圆柱体()和纹理坐标偏移/乘数



如何设置纹理坐标偏移量和乘数为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();

解决方案与GLU函数无关,并且确实是glScalef(和glTranslatef用于偏移调整),但将其应用于纹理矩阵(假设您不使用着色器)。用GL_TEXTURE调用glMatrixMode选择的纹理矩阵,在插值和访问纹理之前转换顶点的纹理坐标(不管这些纹理坐标是如何计算的,在这种情况下是由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之间包装)。

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

最新更新