我在 OpenGL 中遇到了 3d 纹理的问题。
我通过设置纹理
glTexImage3D(GL_TEXTURE_3D, 0, GL_LUMINANCE, 640, 480, 8, 0, GL_RED, GL_UNSIGNED_BYTE, tex3Ddata);
tex3Ddata 共有 8 片 640x480 位图。现在,当我尝试使用纹理坐标访问不同的切片时,由于某种原因,图像相互融合,因此我没有正确设置坐标,但我不知道为什么。纹理切片本身是 8 位单色的。
显示代码:
for(unsigned int i = 0; i < g_numCameras; i++) {
float tx = ((float)i) / ((float)g_numCameras - 1);
//tx = 0.5f; //this is for testing only
float fI = ((float)i) / ((float)g_numCameras);
if( i < (g_numCameras >> 1)) {
glTexCoord3f(0.0f, 1.0f, tx);
glVertex3f( -1.0f + fI * 4.0f, 0.0f, 0.5f);
glTexCoord3f(1.0f, 1.0f, tx);
glVertex3f( -1.0f + (fI + 1.0f / ((float)g_numCameras)) * 4.0f, 0.0f, 0.5f);
glTexCoord3f(1.0f, 0.0f, tx);
glVertex3f( -1.0f + (fI + 1.0f / ((float)g_numCameras)) * 4.0f, 1.0f, 0.5f);
glTexCoord3f(0.0f, 0.0f, tx);
glVertex3f( -1.0f + fI * 4.0f, 1.0f, 0.5f);
}
else {
fI -= 0.5f;
glTexCoord3f(0.0f, 1.0f, tx);
glVertex3f( -1.0f + fI * 4.0f, -1.0f, 0.5f);
glTexCoord3f(1.0f, 1.0f, tx);
glVertex3f( -1.0f + (fI + 1.0f / ((float)g_numCameras)) * 4.0f, -1.0f, 0.5f);
glTexCoord3f(1.0f, 0.0f, tx);
glVertex3f( -1.0f + (fI + 1.0f / ((float)g_numCameras)) * 4.0f, 0.0f, 0.5f);
glTexCoord3f(0.0f, 0.0f, tx);
glVertex3f( -1.0f + fI * 4.0f, 0.0f, 0.5f);
}
}
g_numCameras 是 8,所以我希望切片可以通过 Z 坐标 0.0f、1/7、2/7、...、1.0f 访问。然而它总是被插值的。我用 tx=0.5f 测试过;也是,但这也是图像的混合。x/y 坐标正常工作,并且 8 个四边形按预期放置,只是切割立方体并没有按我预期的方式工作。
有什么想法我在这里做错了吗?(我无法在 3d 纹理上找到等效的答案/示例)。
我还通过上传 8 次相同的图像来测试数据是否正确,并且效果很好(因为插值会产生原始图像,所以我在那里得到了原始图像)。