Z-Test



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 01/08/2003 at 05:35, xxxxxxxx wrote:

    User Information:
    Cinema 4D Version:   8.100 
    Platform:      
    Language(s) :     C++  ;

    ---------
    Hi
    i wanted to upgrade my Pointcollapse Tool with a "only visible Points" mode
    so i have the problem of checking whether a point is visible.
     
    Does someone know if there is a way to use the Z-buffer for a visibility check.
    BaseDraw::TestPointZ(..) seems only to check if the Point is within the nearclip/farclip range.
    I could also use the RayCollider to check if there are polys in front of my point.  Hope this is not too slow.
    Michael



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 01/08/2003 at 06:05, xxxxxxxx wrote:

    Hi Michael,
    Z-Buffer...hmm, doubt this would be useable but not sure.
    With TestPointZ you are right, it doesn´t check for visibility somehow (maybe it´s buggy?)
    Cannot help you with the RayCollider though for I haven´t used it. Mikael will be back on Monday, I guess he can tell you more then.
    Good luck! (and let me know how you worked it out :)



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 02/08/2003 at 15:35, xxxxxxxx wrote:

    A Z buffer test is for most purposes not a viable option - it's simply too imprecise. Also think of some gfx cards that do not allow to read GL Z values (though they have become rare).
    The best way is to send in rays to detect which points are visible and which not.



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 03/08/2003 at 00:36, xxxxxxxx wrote:

    thank you guys
    ....but, now i would really like to try that z-test thing out  ;)     I can hardly believe that it is too imprecise. Since it is precise enougth for drawing.
    so i would do someting like 
    visible = ( Abs(p.z - buffer[p.x][p.y]) < small_value ) 
    i think it would be enougth to filter out points that are far behind the visible surface.
     
    And for the ray test, there are two problems:  there are some strange perspective projetions where i don't know where to start the rays.  And i have to test every point against every poly... That is no good unless the point-polys-test is O(log n)
    i will think some more about it..



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 04/08/2003 at 04:26, xxxxxxxx wrote:

    ok i'm using the ray shooting method now.   It works quite well unless the mesh is not too big.



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 04/08/2003 at 17:18, xxxxxxxx wrote:

    yes, I believe it is. But if it works..why not ;o)
    IMO there should be a convenience function in the SDK that returns only the visible points, just like we can get the selected, hidden points.



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 07/08/2003 at 15:58, xxxxxxxx wrote:

    you could try the C4DObjectList class
    this seems to be the fastest way to get a z distance to a given point on screen.
    you can use it  something like this
    AutoAlloc<C4DObjectList> mylist;
    SelectionListCreate(doc, NULL, bd, x, y, NULL, mylist);
    you will need to convert your world coords into screen  coords.
    this will put a list of all objects that can be found at the screen coord x,y into mylist
    of course the first object is the nearest and you can read its z distance.
    the advantage of this is that you dont need to consider which objects are in the scene or how many.
    spline objects are passed as planes , so you should check through the list for the first valid polygon based object.
    im not sure if this is the right method for you plugin , but its a very fast and  easy way to get z depth values and can be abused in many ways.



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 08/08/2003 at 00:16, xxxxxxxx wrote:

    that is not necessary for my plugin since it should only consider "self" occlusion of the active object. Similar to the live selection tool.



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 08/08/2003 at 04:28, xxxxxxxx wrote:

    You can't access C4D's Z buffer. There are lots of reasons it's not very practical to do so: the Z buffer may be in unititialized state, the Z scaling is different for the various display types, some GL buffers don't support Z access etc.
    Finally, as beaker said, its so imprecise. If C4D would use this for selection, you couldn't work with it. (All according to the developers.)



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 08/08/2003 at 05:33, xxxxxxxx wrote:

    aha.  then i was wrong i guess. but never mind. i build in ray shooting anyway. It was very easy with the raycollider.  It's slow with large meshes but guess i can limit the number of point's that must be checked... in a future version.


Log in to reply