Articles of lwjgl3

如何在JOML和LWJGL3中使用四元数

我正在使用LWJGL3和JOML(math库)实现一个太空fps游戏(太空中没有太多的空间!)。 我游戏中的实体有一个基于向前,向上和向右的旋转。 我使用俯仰,偏航和滚转方法来旋转我的实体。 这些方法可以进一步在伪代码中看到。 当我为实体构建模型matrix时,我将根据上述3个向量计算旋转matrix并应用它。 在伪代码中可以进一步看到。 我也使用角和线性加速度和速度旋转和移动一个实体。 在伪代码中可以进一步看到。 实体: Vector3f position Vector3f scale Vector3f forward Vector3f up Vector3f right private Vector3f linearAcc private Vector3f linearVel private Vector3f angularAcc private Vector3f angularVel public void pitch(double angle) { forward.mul((float) Math.cos(angle), tempVector1).add(up.mul((float) Math.sin(angle), tempVector2)).normalize(forward); right.cross(forward, up); } public void roll(double angle) { right.mul((float) Math.cos(angle), tempVector1).add(up.mul((float) Math.sin(angle), tempVector2)).normalize(right); right.cross(forward, […]

二维屏幕坐标到LWJGL中的2D世界坐标

我使用lwjgl制作了一个2D自上而下的游戏,并且在将我的2D屏幕坐标转换为2D世界坐标时遇到了麻烦。 这是我迄今为止 private Vector2f toWorldCoords(Vector4f eyeCoords) { Matrix4f invertedView = Matrix4f.invert(MathUtil.createViewMatrix(camera), null); Vector4f rayWorld = Matrix4f.transform(invertedView, eyeCoords, null); Vector2f mouseRay = new Vector2f(rayWorld.x, rayWorld.y); mouseRay.normalise(); return mouseRay; } public Vector2f screenToWorld(Vector2f mouseCoords) { Vector2f normalizedCoords = CursorHandler.getNormalisedDeviceCoordinates(); Vector4f clipCoords = new Vector4f(normalizedCoords.x, normalizedCoords.y, -1.0f, 1.0f); Vector2f worldRay = toWorldCoords(clipCoords); return worldRay; } 我知道这是以前被问过的,我已经尝试了一些处理同一主题的3d教程,但到目前为止,我还没有能够成功地使用代码。 谢谢

2D摄像头在LWJGL 3

我正在试图在LWJGL3中实现一个简单的2D相机。 相机具有正投影,可以在二维空间中移动。 在游戏开始时运行一次: GL11.glMatrixMode(GL11.GL_PROJECTION); GL11.glLoadIdentity(); GL11.glOrtho(0, graphics.window().width(), graphics.window().height(), 0, 1, -1); GL11.glMatrixMode(GL11.GL_MODELVIEW); GL11.glLoadIdentity(); 这是作为绘制循环的一部分运行的: GL11.glMatrixMode(GL11.GL_PROJECTION); GL11.glPushMatrix(); GL11.glTranslatef(-position.x(), -position.y(), 0f); // Draw stuff GL11.glPopMatrix(); 一切都看起来很好,直到我移动视图,之后,一切似乎都比左上角(0,0)更接近它应该。 它似乎被窗口大小的标量closures了 – x的因子比y大得多。 我怎么误解了OpenGL命令?

Mac OSX GLFW全屏崩溃

每当我运行我的代码来创建一个全屏GLFW窗口,它崩溃。 这里是代码: package ext.tpz.test; import static org.lwjgl.glfw.GLFW.*; public class Main { public Main() { } public static void main(String[] args) { if (glfwInit() == false) { System.out.println("GLFW failed to init."); System.exit(1); } long fullscreen = 0; if(args.length >= 1) { if (args[0].equals("-fullscreen")) { fullscreen = 1; } } long win = glfwCreateWindow(640,480, "Test", fullscreen, 0); […]

LWJGL 3.0.0 glMapBuffer

我目前正在进行一个项目,通常在C ++中使用函数。 ByteBuffer glMapBuffer(int target, int access) 用法: FloatBuffer buffer = glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY).order( ByteOrder.nativeOrder()).asFloatBuffer(); 但是在java(lwjgl 3.0.0)中,这个函数返回null,因为这个原因它抛出了一个NullPointerExceptionexception。 任何人有任何想法如何在Java中使用这个function? 有几个function: glMapBuffer(int target, int access) glMapBuffer(int target, int access, ByteBuffer old_buffer) glMapBuffer(int target, int access, long length, ByteBuffer old_buffer) 我希望这是足够具体的,谢谢你的帮助:D

高度图顶点列表到顶点+索引列表

现在我正试图将一个高度图加载到我的LWJGL应用程序中。 我像这样加载到一个float [] []数组,我可以读取地图上给定x和z位置的高度值: public class HeightMap { float[][] heightMap; public HeightMap (String fileName) { int height, width; try { BufferedImage image = ImageIO.read(getClass().getResourceAsStream(fileName)); heightMap = new float[image.getWidth()][image.getHeight()]; for (int x = 0; x < image.getHeight(); ++x) { for (int z = 0; z < image.getWidth(); ++z) { heightMap[x][z] = new Color(image.getRGB(x, z)).getRed() / 255f; […]

Android上的Lwjgl

如何编译一个用java编写的用openGL和glfw在android上运行的lwjgl程序。 我应该使用Android的OpenGL ES ..但是如何创建上下文的触摸和触摸屏input。 更新: 一般来说我怎么把用java编写的openGL游戏移植到android上

在LWJGL 2D或3D中是正交的?

我试图在Eclipse中使用lwjgl 3和OpenGL开发一个正交游戏,但我找不到在2D或3D中渲染对象的答案。 都适用? 如果有的话,两者的优点是什么? 如果这改变了你的答案,我也想旋转我的相机。

LWJGL 3如何将屏幕坐标转换为世界坐标?

我试图将鼠标点击事件的屏幕坐标转换为世界坐标。 对于LWJGL 3,没有GLU实用程序类,而LWJGL 2有。 我正在使用JOMLmath类,并写了下面的代码,但它错误的世界坐标,我做错了什么,不知道。 在程序init,我得到viewProjMatrix和视口: viewProjMatrixUniform = glGetUniformLocation(this.program, "viewProjMatrix"); IntBuffer viewportBuffer = BufferUtils.createIntBuffer(4); int[] viewport = new int[4]; glGetIntegerv(GL_VIEWPORT, viewportBuffer); viewportBuffer.get(viewport); 在渲染循环中,我计算viewProjMatrix: viewProjMatrix .setPerspective((float) Math.toRadians(30), (float) width / height, 0.01f, 500.0f) // define min and max planes .lookAt(eye_x, eye_y, eye_z, eye_x, eye_y, 0.0f, 0.0f, 2.0f, 0.0f); glUniformMatrix4fv(viewProjMatrixUniform, false, viewProjMatrix.get(matrixBuffer)); 我使用下面的代码将屏幕坐标转换为世界坐标: DoubleBuffer mouseXBuffer = BufferUtils.createDoubleBuffer(1); […]

坐标系统无法正常工作! OpenGL的

我正在学习opengl并尝试使用shaders将texture添加到rectangle但不幸的是我的rectangle没有显示在正确的位置,改变rectangle的坐标似乎没有改变它的位置,而是改变了所应用的texture的大小。 我使用的是opengl 2.1。 这里是我的代码和我的问题的截图。 import java.awt.image.BufferedImage; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.FloatBuffer; import java.nio.ShortBuffer; import javax.imageio.ImageIO; import org.lwjgl.BufferUtils; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL13; import org.lwjgl.opengl.GL15; import org.lwjgl.opengl.GL20; import RenderEngine.Window; public class Test { private int vertexShaderID; private int fragmentShaderID; private int programID; public static void main(String[] args) { new Test().run(); […]