Andrea Tagliasacchi

09-16-2008, 02:49 PM

Hello everybody,

I am trying to solve the current problem using GPU capabilities: "given a point cloud P and an oriented plane described by a point and a normal (Pp, Np) return the points in the cloud which lye at a distance equal or less than EPSILON from the plane".

Talking with a colleague of mine I converged toward the following solution:

1) prepare a vertex buffer of the points with an attached texture coordinate such that every point has a different vertex coordinate

2) set projection status to orthogonal

3) rotate the mesh such that the normal of the plane is aligned with the -z axis and offset it such that x,y,z=0 corresponds to Pp

4) set the z-clipping plane such that z:[-EPSILON;+EPSILON]

5) render to a texture

6) retrieve the texture from the graphic card

7) read the texture from the graphic card and see what points were rendered (in terms of their indexes), which are the points within the desired distance range.

Now the problems are the following:

q1) Do I need to open a window-frame to be able to do such operation? I am working within MATLAB and calling MEX-C++. By experience I know that as soon as you open a new frame the whole suit crashes miserably!

q2) what's the primitive to give a GLPoint a texture coordinate?

q3) I am not too clear how the render to a texture would be implemented? any reference, tutorial would be awesome...

q4) How would you retrieve this texture from the card? again, any reference, tutorial would be awesome...

I am on a tight schedule, thus, it would be nice if you could point me out the names of the techniques I should learn about, rather to the GLSL specification document and the OpenGL API as somebody has done. Those are a tiny bit too vague answers to my question.

Thanks a lot for any comment.

p.s.

Also notice that I would rather not use any resource like CUDA if possible, thus, getting something which uses

as much OpenGL elements as possible without requiring me to write a new shader.

I am trying to solve the current problem using GPU capabilities: "given a point cloud P and an oriented plane described by a point and a normal (Pp, Np) return the points in the cloud which lye at a distance equal or less than EPSILON from the plane".

Talking with a colleague of mine I converged toward the following solution:

1) prepare a vertex buffer of the points with an attached texture coordinate such that every point has a different vertex coordinate

2) set projection status to orthogonal

3) rotate the mesh such that the normal of the plane is aligned with the -z axis and offset it such that x,y,z=0 corresponds to Pp

4) set the z-clipping plane such that z:[-EPSILON;+EPSILON]

5) render to a texture

6) retrieve the texture from the graphic card

7) read the texture from the graphic card and see what points were rendered (in terms of their indexes), which are the points within the desired distance range.

Now the problems are the following:

q1) Do I need to open a window-frame to be able to do such operation? I am working within MATLAB and calling MEX-C++. By experience I know that as soon as you open a new frame the whole suit crashes miserably!

q2) what's the primitive to give a GLPoint a texture coordinate?

q3) I am not too clear how the render to a texture would be implemented? any reference, tutorial would be awesome...

q4) How would you retrieve this texture from the card? again, any reference, tutorial would be awesome...

I am on a tight schedule, thus, it would be nice if you could point me out the names of the techniques I should learn about, rather to the GLSL specification document and the OpenGL API as somebody has done. Those are a tiny bit too vague answers to my question.

Thanks a lot for any comment.

p.s.

Also notice that I would rather not use any resource like CUDA if possible, thus, getting something which uses

as much OpenGL elements as possible without requiring me to write a new shader.