【发布时间】:2019-04-28 13:21:01
【问题描述】:
我使用OpenTK 实现了基于 3D 纹理的体积渲染。该代码基于此project。但结果显示没有 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);
欢迎提出任何想法。
【问题讨论】:
-
我投票结束了这个问题,因为它缺少一个最小、完整和可验证的示例,并且因为(对我而言)完全不清楚 OP 的问题是什么。通过查看生成一些顶点的函数,任何人应该如何知道他们应该期望看到什么?此外,codeproject 文章依赖于过时的 OpenGL 管道。