c++ - 在opengl中在z方向上更改将2d纹理应用于单个立方体表面

标签 c++ qt opengl opengl-compat texturing

我试图将纹理应用于立方体的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轴。我该如何解决这个问题?

最佳答案

不必将纹理坐标关联到顶点坐标的x和y分量,甚至不必相同。纹理坐标是完全独立的。
您必须定义二维纹理如何在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();

关于c++ - 在opengl中在z方向上更改将2d纹理应用于单个立方体表面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59440677/

相关文章:

c++ - 提高应用程序性能的简单方法

c++ - 我怎么知道处理器是否有 xmm 寄存器或 ymm 寄存器

qt - QML 键盘快捷键会干扰 Key OnPressed 事件

c++ - 在 QGraphicsItem 上安装 SceneEventFilter

c++ - 我如何有效地处理 OpenGL 中的大量逐顶点属性?

c - 使用 glutWireCube() 用鼠标拖动对象

c++ - c++中 vector 容器的大小和调整大小函数

c++ - 主板信息

c++ - 有没有更简单的方法来使用 C++ 和 OpenGL 显示文本?

python - 从 pyuic5 转换的 Python 代码显示 PySide2 UI