在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】:

纹理坐标不必与顶点坐标的xy分量相关联,甚至不必相同。纹理坐标完全独立。 您必须定义 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方向变化的单个立方体面的主要内容,如果未能解决你的问题,请参考以下文章

将纹理应用到线框

如何将纹理应用到四边形以纹理立方体?

text 将纹理应用于modelItem

javascript 将纹理应用于modelItem

如何将纹理应用于 THREE.ExtrudeGeometry?

我无法将图像纹理应用于对象