在opengl中将二维纹理应用于具有z方向变化的单个立方体面
Posted
技术标签:
【中文标题】在opengl中将二维纹理应用于具有z方向变化的单个立方体面【英文标题】:Applying 2d texture to single cube face with change in z direction in opengl 【发布时间】:2019-12-21 23:49:11 【问题描述】:我正在尝试将纹理应用到立方体的 1 个面,但我遇到的问题是立方体也在 z 方向。
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, Tex);
glBegin(GL_POLYGON);
glTexCoord2f( 1.0, 1.0); glVertex3f( 1.0, 1.0, 1);
glTexCoord2f( 1.0, -1.0); glVertex3f( 1.0, -1.0, 1);
glTexCoord2f( 1.0, -1.0); glVertex3f( 1.0, -1.0, -1);
glTexCoord2f( 1.0, 1.0); glVertex3f( 1.0, 1.0, -1);
glEnd();
glDisable(GL_TEXTURE_2D);
显然,通过这种方式,我最终会得到重复的纹理顶点 (1,1) 和 (1,-1),因为它们不包括 z 轴。我该如何解决这个问题?
【问题讨论】:
【参考方案1】:纹理坐标不必与顶点坐标的x和y分量相关联,甚至不必相同。纹理坐标完全独立。 您必须定义 2 维纹理如何包裹在 3 维空间中的表面上。对于立方体的每一面,您必须定义单独的纹理坐标。
更改纹理坐标。例如:
glBegin(GL_POLYGON);
glTexCoord2f( 1.0, 1.0); glVertex3f( 1.0, 1.0, 1.0);
glTexCoord2f( 1.0, 0.0); glVertex3f( 1.0, -1.0, 1.0);
glTexCoord2f( 0.0, 0.0); glVertex3f( 1.0, -1.0, -1.0);
glTexCoord2f( 0.0, 1.0); glVertex3f( 1.0, 1.0, -1.0);
glEnd();
【讨论】:
以上是关于在opengl中将二维纹理应用于具有z方向变化的单个立方体面的主要内容,如果未能解决你的问题,请参考以下文章