PDA

View Full Version : Identifying the Visible points



protonstar
12-07-2008, 05:15 AM
I have a 3d model made of around 3000 vertices, i set the camera and view the model by projecting it onto an image using the model view matrices , i also use the gluproject function to find where the vertices of the 3d model are projected onto the image.

out of the 3000 and odd vertices i would like to know , the list of points visible for the given camera matrix specified.

EG:- if a 3d model of a sphere consists of 1000 points then , only around 500 points are visible from any camera position , i would like to know if there is any opengl routine/code to identify this set of points

Rosario Leonardi
12-07-2008, 10:39 AM
No gl calls here, only geometry. :)

Use a octree (or a k-dtree or any spatial structure you like) to memorize the points then read this
http://www.lighthouse3d.com/opengl/viewfrustum/

protonstar
12-07-2008, 11:00 AM
In my case all the 3d points are in the view frustum, i would like to get the list of points that form the front faces of the 3d model.

Fred T.J.
12-07-2008, 11:59 AM
I don't know of a call that'd give you that list.. A classic trick is to draw all faces using a distinct color for each, reading back the back-buffer and searching for colors. This won't give you the vertices though, only (sometimes partially) visible faces.

If you're after the forward-facing ones instead of visible ones (which is the same in your sphere case), just dot the normal with the camera vector, whichever is positive is forward facing.

Rosario Leonardi
12-08-2008, 08:59 AM
Ops.. sorry, I misunderstand.

Then is more complex, you have two cases:
-Vertex belonging to back facing faces.
-Vertex occluded by other geometry.

First case is simple, as Fred say, you simply have to make a dot product with the camera.
For occluded vertex you can use the occlusion query extension to read the number of pixel generated by the draw command, I don't know if it works with points. You have to make a query for every vertex, can be rather slow.
It's quite old but it's faster than reading the buffer. The opengl 3.0 conditional rendering is based on this.

Here an example:
http://www.codesampler.com/oglsrc/oglsrc_7.htm#ogl_occlusion_query

Note: Don't work with transparent object.