3

我编写了一个能够使用 OpenGL ESv2 或 OpenGL 3 Core Profile API 进行绘图的引擎。但是最近 OpenGL 3 部分坏了,我不记得我改变了什么,也不能查看 svn commitlog,因为我确实将它托管在 bountysource 现在已经关闭,我把它带到了谷歌(但 OGL3 端口坏了)。

使用 OpenGL ESv2 一切正常,但使用 OpenGL 3 一切都被水平拉伸和镜像。两者甚至使用相同的矩阵和顶点。

不要混淆。OpenGL ESv2 和 OpenGL 3 渲染器使用不同的方式来渲染它。

OpenGL ESv2 使用 VBO。OpenGL 3 使用 VAO 和 VBO。

我的引擎是开源的,所以,你可以在这里查看它:源代码

这些应该是重要的部分:Sprite ClassBase Window ClassGL3 Window ClassGL ESv2 Window Class

着色器:

GLv2:片段垂直

GL3:片段垂直

以下是一些示例图片: OpenGL 3 - 菜单 OpenGL 3 - 游戏内 OpenGL ESv2 - 菜单 OpenGL ESv2 - 游戏内

如果有人能给我解决这个问题,我会非常非常高兴和感激,也许我会为此给予一点奖励。

编辑:使用 480x800 窗口,gldebugger 显示此矩阵:
modviewmat
{1, -0, 0, 0}
{0, 1, 0, 0}
{0, 0, 1, 0}
{5, 770, 0, 1}

项目
{2, 0, 0, 0}
{0, 2, 0, 0}
{0, 0, -1, 0}
{-1, -1, -0, 1}

4

1 回答 1

0

我太笨了..这是因为我有2节课。1个基类和1个从基类派生的平台特定实现。所有变量都是在基类和另一个中创建的。

所以,我在基类和另一个类中都有矩阵的句柄。
OpenGL 句柄在基类中初始化。在 gl3 类中也有句柄,但它们没有初始化,因为它是基类的工作。

tl;博士伪代码:

基类:glhandle projmatrix
gl3class:glhandle projmatrix

基类::init(): (baseclass).promatrix.init
gl3class::update(): (gl3class).projmatrix.update

:/

于 2011-06-23T00:08:19.990 回答