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:
Cinema 4D Version: 8.100
Language(s) : C++ ;
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.
On 01/08/2003 at 06:05, xxxxxxxx wrote:
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
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.
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..
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.
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.
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
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.
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.
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.)
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.