如何为gluCylinder()和gluDisk()等函数设置纹理坐标偏移和倍增器?
如果通常情况下纹理从点0开始,我想通过设置倍增器将其从点0.6或3.2等处开始。我所说的倍增器是指纹理可以变大或变小。
解决方案不能使用glScalef(),因为:1)我正在使用法线;2)我也希望调整纹理起始位置。
尝试使用纹理矩阵堆栈:
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glTranslatef(0.6f, 3.2f, 0.0f);
glScalef(2.0f, 2.0f, 1.0f);
glMatrixMode(GL_MODELVIEW);
drawObject();
glScalef
(和glTranslatef
进行偏移调整),但将其应用于纹理矩阵(假设您不使用着色器)。通过调用glMatrixMode
并选择GL_TEXTURE
纹理矩阵可以转换顶点的纹理坐标,然后在插值使用它们访问纹理之前(无论如何这些纹理坐标如何计算,在这种情况下由GLU计算它们并调用glTexCoord2f
)。glMatrixMode(GL_TEXTURE);
glTranslatef(0.1f, 0.2f, 0.0f);
glScalef(0.5f, 0.5f, 1.0f);
在调用gluCylinder
之前,请确保在这些更改之后恢复它们(可能需要使用glPush/PopMatrix
进行包装)。
但是,如果您想根据世界空间坐标更改纹理坐标,则可能涉及一些更多的计算。当然,您也可以使用顶点着色器完全控制纹理坐标生成。