Java glOrtho相当于VBO';s
我正在尝试使用Java glOrtho相当于VBO';s,java,opengl,lwjgl,Java,Opengl,Lwjgl,我正在尝试使用LWJGL将clickteamfusion游戏移植到Java。我决定只使用像素测量,因为这个游戏中的一切都是使用PNG文件,甚至是动画(是的,真的)。我听说过一个名为glOrtho()的函数,它可以让你设置如何在OpenGL中绘制东西 虽然我成功地使用了像glVertexf()这样的函数,但是包括glOrtho()在内的那些函数已经被弃用了,如果我是正确的,在OpenGL 3.1中完全删除。因此,我使用的是现代的方法,即使用VBO、索引、着色器等。有没有任何方法可以使用VBO实现g
LWJGL
将clickteamfusion
游戏移植到Java
。我决定只使用像素测量,因为这个游戏中的一切都是使用PNG
文件,甚至是动画(是的,真的)。我听说过一个名为glOrtho()
的函数,它可以让你设置如何在OpenGL
中绘制东西 虽然我成功地使用了像glVertexf()
这样的函数,但是包括glOrtho()
在内的那些函数已经被弃用了,如果我是正确的,在OpenGL 3.1
中完全删除。因此,我使用的是现代的方法,即使用VBO、索引、着色器等。有没有任何方法可以使用VBO
实现glOrtho()
的效果
如果你需要我,我可以上传我在这里的当前代码以及;只需留下一条评论,我就会用我现有的代码更新帖子。对于OpenGL>=3.1,您需要定义自己的矩阵。有一些LIB为您定义了它们。GLM,举个著名的例子。
格洛托矩阵定义可在此处找到:
格洛托不是一种“效果”,而是一种将事物投射到屏幕上的方式。Ortho指的是“正交”,意思是“无透视”。对于OpenGL>=3.1,您需要定义自己的矩阵。有一些LIB为您定义了它们。GLM,举个著名的例子。
格洛托矩阵定义可在此处找到:
格洛托不是一种“效果”,而是一种将事物投射到屏幕上的方式。正交是指“正交”,意思是“无透视”。投影矩阵(glOrtho
)应与VBO数据分开计算。整个固定函数堆栈已从核心配置文件(包括glVertexf
等)中删除,因此您应该自己进行矩阵运算,并将带有正交投影的投影矩阵发送到作为着色器统一编写的着色器
LWJGL有一个Matrix4f类,它使生活变得更简单,上一次我检查它在LWJGL 3.0中没有替换,但从那时起情况可能发生了变化。还有少数几个其他的图书馆打算作为替代品
无论哪种方式,您都应该能够在网上找到glOrtho的实现。这是我第一次想到LWJGL:
如果您决定推出自己的产品,相关功能:
public static Matrix4f orthographic(float left, float right, float bottom, float top, float near, float far) {
Matrix4f ortho = new Matrix4f();
float tx = -(right + left) / (right - left);
float ty = -(top + bottom) / (top - bottom);
float tz = -(far + near) / (far - near);
ortho.m00 = 2f / (right - left);
ortho.m11 = 2f / (top - bottom);
ortho.m22 = -2f / (far - near);
ortho.m03 = tx;
ortho.m13 = ty;
ortho.m23 = tz;
return ortho;
}
投影矩阵(glOrtho
)应与VBO数据分开计算。整个固定函数堆栈已从核心配置文件(包括glVertexf
等)中删除,因此您应该自己进行矩阵运算,并将带有正交投影的投影矩阵发送到作为着色器统一编写的着色器
LWJGL有一个Matrix4f类,它使生活变得更简单,上一次我检查它在LWJGL 3.0中没有替换,但从那时起情况可能发生了变化。还有少数几个其他的图书馆打算作为替代品
无论哪种方式,您都应该能够在网上找到glOrtho的实现。这是我第一次想到LWJGL:
如果您决定推出自己的产品,相关功能:
public static Matrix4f orthographic(float left, float right, float bottom, float top, float near, float far) {
Matrix4f ortho = new Matrix4f();
float tx = -(right + left) / (right - left);
float ty = -(top + bottom) / (top - bottom);
float tz = -(far + near) / (far - near);
ortho.m00 = 2f / (right - left);
ortho.m11 = 2f / (top - bottom);
ortho.m22 = -2f / (far - near);
ortho.m03 = tx;
ortho.m13 = ty;
ortho.m23 = tz;
return ortho;
}