在立方体的OpenGL 3D纹理

时间:2013-02-24 23:27:47

标签: opengl textures 3d-texture

我有一个简单的3D立方体(所有边都相等)和OpenGL中的3D纹理。我想将3D纹理映射到立方体。

结果应该是一个立方体着色的立方体,这样立方体内的每个点都可以从纹理内部的相应点获得颜色。这至少是我对3D纹理的解释。

怎么做?我想用GL_QUADS(6个四边形)制作一个立方体并为六个边中的每个边指定一个纹理坐标是不行的?

我假设我必须制作一个立方体,同时使Cubing以正确的方式指定glTexCoord。

2 个答案:

答案 0 :(得分:2)

您所描述的内容听起来像体素渲染,通常使用光线追踪。

不幸的是,3D纹理没有按照你的描述进行。虽然3D纹理对于每个纹素提取采用U,V,W,但OpenGL仍然沿着图元的平面绘制。您必须在片段着色器中编写一些光线跟踪代码以投射到3D纹理中。既然你有效地进行了光线追踪,你可能只需要放置一个平坦的(非旋转的)单个四边形(更好的是,两个三角形制作一个伪四边形,因为四边形不推荐使用),并用你的光线追踪东西写片段着色器代码

有关详细信息,请查看“直接体积渲染”。

答案 1 :(得分:0)

您应该绘制许多平行四边形,而不是绘制单个Cude。

例如,沿z轴绘制一系列四边形:

#define MAP_3DTEXT( TexIndex ) \
glTexCoord3f(0.0f, 0.0f, ((float)TexIndex+1.0f)/2.0f);  \
glVertex3f(-dViewPortSize,-dViewPortSize,TexIndex);\
glTexCoord3f(1.0f, 0.0f, ((float)TexIndex+1.0f)/2.0f);  \
glVertex3f(dViewPortSize,-dViewPortSize,TexIndex);\
glTexCoord3f(1.0f, 1.0f, ((float)TexIndex+1.0f)/2.0f);  \
glVertex3f(dViewPortSize,dViewPortSize,TexIndex);\
glTexCoord3f(0.0f, 1.0f, ((float)TexIndex+1.0f)/2.0f);  \
glVertex3f(-dViewPortSize,dViewPortSize,TexIndex);



 for ( float fIndx = -1.0f; fIndx <= 1.0f; fIndx+=0.003f )
{
    glBegin(GL_QUADS);
        MAP_3DTEXT( fIndx );
    glEnd();
}

现在您将得到想要的东西。 可以找到更多详细信息here

前述方法是所谓的基于纹理的体绘制。但是,如果您要寻求更好的视觉效果和性能,光线投射将更适合您,并且使您可以遍历整个音量。