c++ - 使用 openGL 进行纹理映射

标签 c++ opengl

我正在为一个基元贴图,准确地说是一个四边形。我遇到了纹理以某种方式逆时针旋转 90 度的问题。我以为问题出在纹理的加载代码上,但结果发现它实际上是绘制函数的问题。 所以这是错误地绘制图片的代码:

glVertex2f(0.0f, 0.0f); glTexCoord2f(0.0f, 1.0f);
glVertex2f(0.5f, 0.0f); glTexCoord2f(1.0f, 1.0f);
glVertex2f(0.5f, 0.5f); glTexCoord2f(1.0f, 0.0f);
glVertex2f(0.0f, 0.5f); glTexCoord2f(0.0f, 0.0f);

而这一个就像我想要的那样绘制它:

glTexCoord2f(0.0f, 1.0f); glVertex2f(0.0f, 0.0f);
glTexCoord2f(1.0f, 1.0f); glVertex2f(0.5f, 0.0f);
glTexCoord2f(1.0f, 0.0f); glVertex2f(0.5f, 0.5f);
glTexCoord2f(0.0f, 0.0f); glVertex2f(0.0f, 0.5f);

是什么导致了这种行为?我真的没有想到这会对绘图产生这样的影响。

最佳答案

I really didn't think this would have such effects to the drawing.

想一想。 glTexCoord 有什么作用?它指定了纹理坐标,对吗?但是纹理坐标是什么?

是的,知道它指定了下一个顶点的纹理坐标,但 OpenGL 并不知道。 glTexCoord 所做的就是将您传递给它的值设置到一 block 内存中。

glVertex 做的更多。它设置顶点位置,但它告诉 OpenGL,“获取我目前设置的所有顶点值并用它渲染一个顶点。”这就是为什么你不能在 glBegin/glEnd 之外调用 glVertex,即使你可以glTexCoord 做到这一点, glColor

所以当你执行 glTexCoord(...); glVertex(...),您是说“将当前纹理坐标设置为 X,然后将位置设置为 Y 并使用这些值进行渲染。”当你执行 glVertex(...); glTexCoord(...);,您是说,“将位置设置为 Y 并使用先前设置的值进行渲染,然后将当前纹理坐标设置为 X。”

在您已经告诉 OpenGL 渲染一个顶点之后设置纹理坐标有点晚了。

关于c++ - 使用 openGL 进行纹理映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10196588/

相关文章:

c++ - ld : symbol(s) not found for architecture x86_64 on OSX 10. 9

c++ - Canon SDK (EDSDK) 抓取指定大小的视频流区域

c++ - 如何在C++中从头到尾写入文件

c++ - OpenGL 在 2 个纹理之间切换

python - 尝试使用 PyOpengl 使用索引和顶点绘制简单的正方形

c++ - 使用 gcc 但使用 Clang 时没有关于模板函数中未使用参数的警告

c++ - boost asio在基于tcp的协议(protocol)中找到消息的开头

c++ - 在打开 vsync 的情况下执行 glTexImage2D 时出现奇怪的延迟

c++ - 通过 texture2D 函数使用自动比较从阴影贴图纹理中采样数据

c++ - 写入和读取图像 OpenGL 的内存屏障问题