You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么使用OpenGL绘制带纹理四边形时纹理会顺时针旋转90度?

问题原因

OpenGL是状态机模型,必须先设置纹理坐标等顶点属性,再调用glVertex指定顶点。你的代码把glTexCoord2f和glVertex2f的调用顺序完全写反了,导致每个纹理坐标都绑定到了下一个顶点上,纹理坐标和顶点的对应关系错位,最终呈现出90度旋转的效果。

修复方法

调整draw函数中glBegin块的调用顺序,每个顶点先设置纹理坐标,再指定顶点位置:

glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex2f(x, y);
glTexCoord2f(1, 0);
glVertex2f(x + 400, y);
glTexCoord2f(1, 1);
glVertex2f(x + 400, y + 400);
glTexCoord2f(0, 1);
glVertex2f(x, y + 400);
glEnd();

附加说明

如果修改顺序后发现纹理上下颠倒,是因为SFML加载PNG纹理时默认使用左上角为原点、Y轴向下的坐标系,而你用gluOrtho2D设置的正交投影是左下角为原点、Y轴向上,两者Y轴方向相反。可以直接翻转纹理坐标的Y值解决:

glBegin(GL_QUADS);
glTexCoord2f(0, 1);
glVertex2f(x, y);
glTexCoord2f(1, 1);
glVertex2f(x + 400, y);
glTexCoord2f(1, 0);
glVertex2f(x + 400, y + 400);
glTexCoord2f(0, 0);
glVertex2f(x, y + 400);
glEnd();

内容的提问来源于stack exchange,提问作者anonymous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 12:36:03