4

如何为 gluCylinder() 和 gluDisk() 等函数设置纹理坐标偏移和乘数?

因此,如果通常纹理将从点 0 开始,我想将其设置为从点 0.6 或 3.2 等开始,乘数我的意思是纹理会变大或变小。

解决方案不能是 glScalef() 因为 1) 我使用法线,2) 我也想调整纹理开始位置。

4

2 回答 2

1

尝试使用纹理矩阵堆栈

glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glTranslatef(0.6f, 3.2f, 0.0f);
glScalef(2.0f, 2.0f, 1.0f);
glMatrixMode(GL_MODELVIEW);
drawObject();
于 2011-08-27T00:20:47.330 回答
1

该解决方案与 GLU 函数无关,并且确实是glScalef(以及glTranslatef用于偏移调整),但将其应用于纹理矩阵(假设您不使用着色器)。通过调用glMatrixModewith选择的纹理矩阵GL_TEXTURE在顶点的纹理坐标被插值并用于访问纹理之前转换顶点的纹理坐标(无论这些纹理坐标如何计算,在这种情况下由 GLU 计算,它只是在 CPU 上计算它们并调用glTexCoord2f)。

因此,要让纹理从 (0.1,0.2) 开始(当然是在纹理空间中)并使其大 2 倍,您只需调用:

glMatrixMode(GL_TEXTURE);
glTranslatef(0.1f, 0.2f, 0.0f);
glScalef(0.5f, 0.5f, 1.0f);

打电话之前gluCylinder。但请务必在之后恢复这些更改(可能将其包装在 之间glPush/PopMatrix)。

但是如果你想根据世界空间坐标改变纹理坐标,这可能需要更多的计算。当然,您也可以使用顶点着色器来完全控制纹理坐标的生成。

于 2011-08-27T00:21:32.630 回答