Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 纹理映射问题openglut_C++_Object_Opengl_Textures_Glut - Fatal编程技术网

C++ 纹理映射问题openglut

C++ 纹理映射问题openglut,c++,object,opengl,textures,glut,C++,Object,Opengl,Textures,Glut,我有一个简单的对象(box.obj),它本质上是一个立方体,但由大约50个向量、法线和纹理坐标组成 然后我有一个砖块jpeg纹理,我想映射到它: 我正在使用jpeglib将图像导入纹理,这一切都很好,我的问题是纹理如何映射到立方体。这就是它最终的样子: 注意奇怪的卷曲边和前面和顶部的大砖块。我对立方体下面的“桌子”也做了同样的处理,它应该有木材纹理,但它是模糊的/块状的 这是我用来获取对象/纹理的解析器。这将在display函数中调用 for (int i = 0; i < m_nNu

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

然后我有一个砖块jpeg纹理,我想映射到它:

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

注意奇怪的卷曲边和前面和顶部的大砖块。我对立方体下面的“桌子”也做了同样的处理,它应该有木材纹理,但它是模糊的/块状的

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

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();
}
for(int i=0;i

让我知道我是否需要发布更多的代码,例如如何读取对象等等

我认为你给出了错误的纹理坐标

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


(来源:)


(来源:)

通过理解此图像,尝试指定顶点。它基本上将立方体对象展开到纹理平面上

因此,请考虑将纹理指定给背面的情况。如果您正在为左、右、底和顶面提供协调的纹理,则最终会将所有四个面的整个纹理粘贴到该单个面上

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


希望有帮助。

加载几何体后,打印所有顶点数据并检查其是否与输入文件匹配。此外,您应该将glBegin()/glEnd()移动到for循环之外(使用GL_三角形,您可以一次输出多个三角形)。使用VBOs会更好。您对顶点和纹理坐标(v1、v2、v3)采用相同的索引。但是obj通常对顶点和纹理坐标使用单独的标记集。对象文件的格式为
vx.*,y.*,z.*vt u.*v.*vn x.*y.*z.*f vectorindex/vectorindex/vectorindex-vectorindex/vectorindex-vectorindex/vectorindex-vectorindex/vectorindex-vectorindex
不确定这是否有帮助?想不到你还能怎么映射纹理…为你的帮助干杯!这是我正在做的一个uni项目,其他一些项目也有同样的问题,所以可能是方形图像文件没有正确映射到立方体对象的纹理坐标?