Hi! I have a 3d texture, i need to “cut” it into slices and render each slice on a quad, and then blend them. i know how to blend, but how can i cut the slices and pass them to the quads?
Simply activate the 3d texture, and set the appropriate 3D texture coordinates to your quads.
question: so for render 3 slices in 3 quads is it enough write something like:
glBegin(GL_QUADS);
glTexCoord3i(0,0,0); glVertex2f(0,0)
glTexCoord3i(0,1,0); glVertex2f(0,1)
glTexCoord3i(1,1,0); glVertex2f(1,1)
glTexCoord3i(1,0,0); glVertex2f(1,0)
glTexCoord3i(0,0,1); glVertex2f(0,0)
glTexCoord3i(0,1,1); glVertex2f(0,1)
glTexCoord3i(1,1,1); glVertex2f(1,1)
glTexCoord3i(1,0,1); glVertex2f(1,0)
glTexCoord3i(0,0,2); glVertex2f(0,0)
glTexCoord3i(0,1,2); glVertex2f(0,1)
glTexCoord3i(1,1,2); glVertex2f(1,1)
glTexCoord3i(1,0,2); glVertex2f(1,0)
glEnd()
That is almost it.
Do not forget that texture coordinates are normalized, that means always in the [0…1] range, whatever the texture size, and even for the Z parameter. If you use linear filtering, a small shift is also needed to avoid sampling from texture borders and between slices.
So change the texcoord like this:
int SLICES = 3;
int i;
float shift = 1.0/SLICES *0.5
for (i=0;i<SLICES;i++) {
float z= shift+((float)i)/SLICES;
...
glTexCoord3f(x,y,z); glVextex x,y ...
...