我使用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);
欢迎提出任何想法。
答案 0 :(得分:1)
整数 i 在[0,n-1]范围内, i / n 永远为0。 因此,您确实可以指定n个重叠的四边形。
解决方案很简单,只需将i显式转换为浮点(float)i/n
。