Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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++ OGL ESv2中的同一个游戏不适用于OGL3_C++_Opengl_Opengl Es_Opengl Es 2.0_Opengl 3 - Fatal编程技术网

C++ OGL ESv2中的同一个游戏不适用于OGL3

C++ OGL ESv2中的同一个游戏不适用于OGL3,c++,opengl,opengl-es,opengl-es-2.0,opengl-3,C++,Opengl,Opengl Es,Opengl Es 2.0,Opengl 3,我已经编写了一个引擎,它能够使用OpenGLESv2或OpenGL3核心概要API进行绘图。 但最近OpenGL 3部分被破坏了,我记不起我做了什么更改,也记不起我在svn commitlog中做了什么,因为我确实在bountysource托管了它,现在它已经关闭了,我把它带到了Google(但OGL3端口坏了) 使用OpenGLESv2,一切正常,但使用OpenGL3,一切都是水平拉伸和镜像的。两者甚至使用相同的矩阵和顶点 不要困惑。OpenGL ESv2和OpenGL 3渲染器使用不同的方式

我已经编写了一个引擎,它能够使用OpenGLESv2或OpenGL3核心概要API进行绘图。 但最近OpenGL 3部分被破坏了,我记不起我做了什么更改,也记不起我在svn commitlog中做了什么,因为我确实在bountysource托管了它,现在它已经关闭了,我把它带到了Google(但OGL3端口坏了)

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

不要困惑。OpenGL ESv2和OpenGL 3渲染器使用不同的方式渲染

OpenGLESV2使用VBO。 OpenGL3使用VAO和VBO

我的引擎是开源的,所以,您可以在这里查看:

这些应该是重要的部分:

着色器:

GLv2:

GL3:

以下是一些示例图片:

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

编辑: 通过480x800窗口,gldebugger显示以下矩阵:
modviewmat
{1,-0,0,0}
{0,1,0,0}
{0,0,1,0}
{5770,0,1}

projmat
{2,0,0,0}
{0,2,0,0}
{0,0,-1,0}

{-1,-1,-0,1}
我太笨了..因为我有两门课。 1个基类和1个从基类派生的平台特定实现。 所有变量都是在基类和其他类中创建的。 因此,我在基类和其他类中都有矩阵的句柄。
OpenGL句柄是在基类中初始化的。在gl3类中也有句柄,但它们没有初始化,因为它是基类的工作

tl;dr伪代码:

基类:glhandle projmatrix
gl3class:glhandle projmatrix

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


:/

您的纵横比有问题。这由两个因素控制:视口和透视矩阵。你从来没有给我们你用来计算透视矩阵的代码。另外,如果你能使图像不那么巨大,那就太好了。为了将来的参考,Alt+PrintScreen将只捕获最上面的/活动的窗口。应该可以为您节省一些裁剪工作:)和。。GLE和gl3的矩阵相同。所以,我没想到它会相关,如果它对你有帮助的话(480x800):modviewmat{1,-0,0,0}{0,1,0,1,0}{5,770,0,1}{projmat{2,0,0,0}{0,2,0,0}{0,0,-1,0,0}{1,-1,-0,1}你可以接受你自己的答案(当然你不会得到声誉)来标记它的解决。这也是OOP使事情变得更难而不是更简单的一个例子。