【问题标题】:Texture Mapping issue OpenGL GLUT纹理映射问题 OpenGL GLUT
【发布时间】:2014-11-19 23:15:55
【问题描述】:

我有一个简单的对象 (box.obj),它本质上是一个立方体,但由 50 个左右的向量、法线和纹理坐标组成。

然后我想要映射到它的砖块 jpeg 纹理:

我正在使用 jpeglib 将图像导入纹理,一切正常,我的问题在于纹理如何映射到立方体。这就是它最终的样子:

注意奇怪的卷曲侧面和正面和顶部的大砖块。我正在对立方体下方的“桌子”做同样的事情,它应该有木质纹理,但它是模糊/块状的。

这是我用来获取对象/纹理的解析器。这在显示函数中被调用。

for (int i = 0; i < m_nNumPolygon; i++) {
    glBegin(GL_TRIANGLES);
    glTexCoord2f(m_pUVArray[m_pTriangles[i].v1].u, m_pUVArray[m_pTriangles[i].v1].v);
    glNormal3f(m_pNormalArray[m_pTriangles[i].n1].x,
            m_pNormalArray[m_pTriangles[i].n1].y,
            m_pNormalArray[m_pTriangles[i].n1].z);
    glVertex3f(m_pVertexArray[m_pTriangles[i].v1].x,
            m_pVertexArray[m_pTriangles[i].v1].y,
            m_pVertexArray[m_pTriangles[i].v1].z);
    glTexCoord2f(m_pUVArray[m_pTriangles[i].v2].u, m_pUVArray[m_pTriangles[i].v2].v);
    glNormal3f(m_pNormalArray[m_pTriangles[i].n2].x,
            m_pNormalArray[m_pTriangles[i].n2].y,
            m_pNormalArray[m_pTriangles[i].n2].z);
    glVertex3f(m_pVertexArray[m_pTriangles[i].v2].x,
            m_pVertexArray[m_pTriangles[i].v2].y,
            m_pVertexArray[m_pTriangles[i].v2].z);
    glTexCoord2f(m_pUVArray[m_pTriangles[i].v3].u, m_pUVArray[m_pTriangles[i].v3].v);
    glNormal3f(m_pNormalArray[m_pTriangles[i].n3].x,
            m_pNormalArray[m_pTriangles[i].n3].y,
            m_pNormalArray[m_pTriangles[i].n3].z);
    glVertex3f(m_pVertexArray[m_pTriangles[i].v3].x,
            m_pVertexArray[m_pTriangles[i].v3].y,
            m_pVertexArray[m_pTriangles[i].v3].z);
    glEnd();
}

如果我需要发布更多代码,请告诉我。对象是如何被读取的等等!

【问题讨论】:

  • 加载几何图形后,打印所有顶点数据并检查它是否与输入文件匹配。此外,您应该将 glBegin()/glEnd() 移到 for 循环之外(使用 GL_TRIANGLES,您可以一次输出 许多 个三角形)。使用 VBO 会更好。
  • 您为顶点和纹理坐标(v1、v2、v3)采用相同的索引。但是 obj 通常为顶点和纹理坐标使用单独的索引集。
  • 目标文件格式为v x.**, y.**, z.** vt u.** v.** vn x.** y.** z.** f vectorindex/vectorindex/vectorindex vectorindex/vectorindex/vectorindex vectorindex/vectorindex/vectorindex不确定是否有帮助?想不出你还能如何映射纹理......

标签: c++ object opengl textures glut


【解决方案1】:

我认为您提供了错误的纹理坐标。

您可以在相邻面之间共享顶点,但不能共享纹理坐标。 要可视化此问题,请查看此图像


(来源:geeks3d at www.ozone3d.net


(来源:thedarkmod.com

尝试通过理解这张图片来分配顶点。它基本上将立方体对象展开到纹理平面上。

所以考虑一下将纹理协调到背面的情况。如果你要给你给左、右、底和顶面的纹理协调,它最终会将所有四个面的整个纹理粘贴到那个面上。

所以它最终会将你在立方体中的卷曲纹理粘贴到左面。 看一下图像并尝试理解为什么分配给中间行第一个面的左边缘的纹理坐标不能分配给第四个面的右边缘。

希望对你有帮助。

【讨论】:

  • 为您的帮助干杯!它是我正在做的一个 uni 项目,其他一些人也有同样的问题,所以也许它的方形图像文件没有正确映射到立方体对象的纹理坐标?
猜你喜欢
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-04
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
  • 2011-08-25
相关资源
最近更新 更多