Opengl Can';不能让2D变换工作

Opengl Can';不能让2D变换工作,opengl,matrix,glsl,lwjgl,linear-algebra,Opengl,Matrix,Glsl,Lwjgl,Linear Algebra,我和我的budy正在尝试创建一个2D引擎,但我们无法让转换工作,这就是它现在的样子。我们已经为每个元素创建了矩阵,比如缩放、平移等。但是我们不能让四边形移动或做任何事情,我们有没有做过任何数学错误?这就是我们现在得到的,我们只渲染vbo而不使用着色器。对于着色器,我的意思是我们是GLSL 转化 Matrix3f Matrix4f VBO 碱性粉碎机 着色器 顶点着色器 碎片着色器 我们从哪里渲染和更新 我想我把着色器绑定到vbo时弄糟了,是吗?如果是这样,我该如何修复它 另外

我和我的budy正在尝试创建一个2D引擎,但我们无法让转换工作,这就是它现在的样子。我们已经为每个元素创建了矩阵,比如缩放、平移等。但是我们不能让四边形移动或做任何事情,我们有没有做过任何数学错误?这就是我们现在得到的,我们只渲染vbo而不使用着色器。对于着色器,我的意思是我们是GLSL

转化

Matrix3f

Matrix4f

VBO

碱性粉碎机

着色器

顶点着色器

碎片着色器

我们从哪里渲染和更新

我想我把着色器绑定到vbo时弄糟了,是吗?如果是这样,我该如何修复它


另外,我只想要现代opengl中的答案,所以不需要glBegin()和glEnd(),谢谢

在顶点着色器中,您编写了
gl\u Position=In\u Position*变换

这应该返回一个矩阵,而不是向量。考虑到你的矩形是纯白色的,并且你已经对颜色做了规定,我会冒险说你的着色器根本无法编译


gl_位置=变换*在_位置
是用矩阵变换向量的正确顺序。

我很好奇,因为这可能会有所帮助,但在您开始的课程中,您是否确保在每帧之前清除屏幕?最常用的方法是使用
glClear(GL\u COLOR\u BUFFER\u位)在你的主游戏循环中。我在调用render方法之前就这样做了。从一个名为Engine的类。无论
glClear()
在哪里,都将其放入主游戏循环中。为了模拟任何类型的运动,无论是平移、变换还是反射,每帧都需要清除一次屏幕。我甚至在vbo渲染之前进行了测试。你能看到转换是否正确吗?我会在修复着色器错误后测试这个。你能看到我的矩阵是否正确吗?如果我在变换中应该将每个矩阵相乘得到变换矩阵?矩阵*向量没有问题(这实际上是旧的固定函数管道遵循的惯例)。GLSL将根据乘法的顺序将向量视为行或列向量,因此M*v与v*transpose(M)相同