Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.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 四边形上的纹理贴图不工作_C_Opengl_Textures - Fatal编程技术网

C 四边形上的纹理贴图不工作

C 四边形上的纹理贴图不工作,c,opengl,textures,C,Opengl,Textures,我正在尝试编写一些代码,将纹理渲染到一个简单的正方形上,但在让它工作时遇到了很多麻烦。我下载了一些纹理贴图的示例源代码,并对其进行了编译,它似乎可以很好地将纹理贴图到圆柱体上。然后,我添加了一些代码,看看它是否会将纹理渲染到我的正方形上,但它只是使用一种介于红色和黑色之间的纯色对其进行纹理处理,而不是像圆柱体上显示的棋盘。这是我在第一次调用gluCylinder之后添加的代码: glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex2f(-1, -1);

我正在尝试编写一些代码,将纹理渲染到一个简单的正方形上,但在让它工作时遇到了很多麻烦。我下载了一些纹理贴图的示例源代码,并对其进行了编译,它似乎可以很好地将纹理贴图到圆柱体上。然后,我添加了一些代码,看看它是否会将纹理渲染到我的正方形上,但它只是使用一种介于红色和黑色之间的纯色对其进行纹理处理,而不是像圆柱体上显示的棋盘。这是我在第一次调用gluCylinder之后添加的代码:

glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex2f(-1, -1);
glTexCoord2f(1,0);
glVertex2f(1, -1);
glTexCoord2f(1, 1);
glVertex2f(1,  1);
glTexCoord2f(0,1);
glVertex2f(-1,  1);
glEnd();

有什么原因可以解释为什么纹理会在圆柱体上正常渲染,而不是在我的四边形上?

示例代码正在启用自动纹理坐标生成,因此您的glTexCoord2f调用将被忽略。正在将自动生成投影到Z平面上。因为你的四边形是一个Y平面,它实际上只是在整个四边形上拉伸你的纹理的一个像素

要使其工作,请在glBegin之前禁用自动纹理生成,然后在glEnd之后重新启用

i、 e:

或者,可以将“自动纹理生成”设置为在Y平面上投影,并省略glTexCoord2f调用,然后在完成后将其设置回Z:

float zPlane[4] = {0., 0., 1., 0.};
float yPlane[4] = {0., 1., 0., 0.};
glTexGenfv (GL_T, GL_OBJECT_PLANE, yPlane);

glBegin(GL_QUADS);
   glVertex2f(-1, -1);
   glVertex2f(1, -1);
   glVertex2f(1,  1);
   glVertex2f(-1,  1);
glEnd();

glTexGenfv (GL_T, GL_OBJECT_PLANE, zPlane);

示例代码正在启用自动纹理坐标生成,因此您的glTexCoord2f调用将被忽略。正在将自动生成投影到Z平面上。因为你的四边形是一个Y平面,它实际上只是在整个四边形上拉伸你的纹理的一个像素

要使其工作,请在glBegin之前禁用自动纹理生成,然后在glEnd之后重新启用

i、 e:

或者,可以将“自动纹理生成”设置为在Y平面上投影,并省略glTexCoord2f调用,然后在完成后将其设置回Z:

float zPlane[4] = {0., 0., 1., 0.};
float yPlane[4] = {0., 1., 0., 0.};
glTexGenfv (GL_T, GL_OBJECT_PLANE, yPlane);

glBegin(GL_QUADS);
   glVertex2f(-1, -1);
   glVertex2f(1, -1);
   glVertex2f(1,  1);
   glVertex2f(-1,  1);
glEnd();

glTexGenfv (GL_T, GL_OBJECT_PLANE, zPlane);

就这样!谢谢你,你刚刚教了我很多关于OpenGL纹理映射的知识!就这样!谢谢你,你刚刚教了我很多关于OpenGL纹理映射的知识!