首页 > 解决方案 > 为什么基于 3D 纹理的体积渲染没有 3D 效果

问题描述

我使用OpenTK实现了基于 3D 纹理的体积渲染。代码基于这个项目。但结果显示没有 3D 效果,只有平面 2D 图像。

管道很简单:(1)加载3D纹理;(2) 绘制一系列四边形(矩形)并指定对应的纹理坐标。

每个四边形的顶点是使用生成的

private void generateVertices(int n)
    {
        vertices = new float[n * 3 * 4];
        int cur;
        for (int i = 0; i < n; i++)
        {
            cur = 3 * 4 * i;

            vertices[cur] = -.5f;
            vertices[cur + 1] = -.5f;
            vertices[cur + 2] = -0.5f + i / n;

            vertices[cur+3] = -.5f;
            vertices[cur + 4] = .5f;
            vertices[cur + 5] = -0.5f +  i / n;

            vertices[cur+6] = .5f;
            vertices[cur + 7] = .5f;
            vertices[cur + 8] = -0.5f +  i / n;

            vertices[cur+9] = .5f;
            vertices[cur + 10] = -.5f;
            vertices[cur + 11] = -0.5f + i / n;
        }
    }

要绘制 256 个四边形,只需调用 generateVertices(256) 和 opengl 例程

GLDrawElements(GL_QUADS,...)

使用顶点着色器中的顶点位置计算 TexCoordinates,如下所示:

texCoord = aPosition+vec3(0.5f,0.5f,0.5f);

欢迎任何想法。

标签: c#opentk

解决方案


[0,n-1] 范围内的整数ii/n将永远为 0。所以你确实指定了 n 个重叠的四边形。

解决方案很简单,只需将 i 显式转换为 float 即可(float)i/n


推荐阅读