Tag: lwjgl

OpenGL透视扭曲场景比沿z轴预期的要多得多

我在LWJGL工作,并且一直在努力编写一个程序,允许简单的3D观看场景。 我遇到的主要问题是每当我应用透视时,我的场景在z轴上非常非常远。 中间的正方形是用正投影绘制的立方体(这里的立方体意味着“所有边都相等”)。 从左下角到中心的形状也是一个立方体,但是用透视投影绘制! 显然,这看起来不像一个立方体。 这是我的代码(它有点像墙,所以我把它分解了): public class OpenGL { //width and height of the screen, plus the depth of the 3d space public static final int WIDTH = 800, HEIGHT = 600, DEPTH = 1000; //called once at startup private static void initGl() { GL11.glEnable(GL11.GL_TEXTURE_2D); GL11.glEnable(GL11.GL_BLEND); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glViewport(0,0,WIDTH,HEIGHT); GL11.glDepthFunc(GL11.GL_LESS); GL11.glPolygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_FILL); GL11.glClearColor(0,0,0,0); […]

将C ++ OpenGl转换为Java(LWJGL),glBufferData();

我一直在搞乱LWJGL尝试创建一个.obj解析器,它将从blender导出的文件转换为OpenGL渲染代码。 我遵循了类似于我正在做的教程,但它是用c ++编写的,我很难理解。 我已经设法让一切都与解析器一起工作(我认为),但是当实际渲染到模型的时候,我很难创建一个与c ++代码相当的java。 本教程使用以下代码行: glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(glm::vec3), &vertices[0], GL_STATIC_DRAW); 然后(显然)它绘制数组。 我很确定我需要将Vecotor3f从我的列表(顶点)转换为FloatBuffer,而我不需要第二个参数(因为java会处理大小)。 但是,我不知道如何做到这一点,我仍然找到了解决java的方法,并且之前从未使用过这个类。

java.lang.UnsatisfiedLinkError:在java运行的java.libary.path中没有lwjgl

我正在尝试使用2个外部库(lwjgl.jar和slick-util.jar)运行我的java程序 编译工作正常 但是当我使用以下命令运行时: java -cp bin;.;lib/lwjgl.jar;lib/slick-util.jar; Game 我得到以下例外: Exception in thread “main” java.lang.UnsatisfiedLinkError: no lwjgl in java.library.path

如何在OpenGL中绘制镜像镜像?

从我的理解是,要在OpenGL中镜像,你基本上绘制场景,然后你翻转所有东西并再次绘制它,除了只通过镜子可见,从而在镜子中创建一个完美的翻转图像。 但我看到的问题是,当这样做时,唯一可以看到其他镜像的镜像是在之前的镜像之后渲染的镜像。 因此,如果我渲染镜像1然后镜像2,则镜像1看不到镜像2,但镜像2可以看到镜像1.如果没有这种情况,我如何有效地镜像镜像?

GLFW的线程设置

我开始使用新的Lwjgl 3,它使用GLFW进行显示/鼠标/键盘处理,我真的很喜欢它! 然而今天我打了砖头。 我有一个简单的渲染动画,但当我拖动屏幕时,它停止渲染,直到我再次放手。 根据: http : //www.glfw.org/faq.html 问题出现在窗户旁边。 3.5 – 当我移动窗口或调整窗口大小时,为什么我的应用程序会冻结? Windows事件循环被某些操作阻止,例如拖动或调整窗口大小或打开窗口菜单。 这是Windows设计的一部分,GLFW无法更改。 如果您希望在此类操作期间继续渲染,则应从辅助线程渲染。 – http://www.glfw.org/faq.html 我以前在Java中做过multithreading的事情。 但我不确定这种情况下自己的线程是什么。 我应该在单独的线程中使用opengl代码和GLFW代码吗? 我也很难想出一种解决问题的方法。

如何在LWJGL中渲染3D立方体?

我无法在网上找到关于在轻量级Java游戏库中渲染3D立方体的好教程! 我一直在学习LWJGL一段时间了。 我知道如何绘制2d对象。 有人能帮帮我吗?

相机间距/偏向方向矢量

我要做的是从我的相机投射光线。 我知道相机的x,y和z坐标,以及它的俯仰和偏航。 我需要计算它的方向向量,这样我就可以将它传递给我的光线跟踪算法。 相机的向上矢量为(0,1,0)。 从相机的角度来看,“俯仰”正在向上和向下看。 (我更愿意不使用矩阵,但如果必须,我会这样做)

从摄像机坐标计算世界坐标

我有一个用2D渲染的世界,我从顶部看它。 Tjat看起来像这样(地砖没有纹理,只有随机的绿色): 在渲染我的实体之前,我像这样变换模型视图矩阵(当position是位置并zoom相机的缩放时, ROTATION为45): glScalef(this.zoom, this.zoom, 1); glTranslatef(this.position.x, this.position.y, 0); glRotatef(ROTATION, 0, 0, 1); 现在我想计算相机当前位置的世界坐标。 我正在尝试用glPushMatrix创建一个新矩阵,然后以与glPushMatrix相同的方式对其进行变换,然后获取矩阵并将给定的摄像机坐标与其相乘: private Vector2f toWorldCoordinates(Vector2f position) { glPushMatrix(); // do the same as when rendering glScalef(this.zoom, this.zoom, 1); glTranslatef(this.position.x, this.position.y, 0); glRotatef(ROTATION, 0, 0, 1); // get the model-view matrix ByteBuffer m = ByteBuffer.allocateDirect(64); m.order(ByteOrder.nativeOrder()); glGetFloatv(GL_MODELVIEW_MATRIX, m); // calculate transformed position […]

纹理不能正确拉伸。 为什么会这样?

我正在使用LWJGL和Slick框架将Textures加载到我的OpenGL应用程序中。 我正在使用这个图片: 这个代码导入并利用纹理: flagTexture = TextureLoader.getTexture(“PNG”, ResourceLoader.getResourceAsStream(“japan.png”)); …… flagTexture.bind(); GL11.glColor3f(1.0f, 1.0f, 1.0f); GL11.glPushMatrix(); GL11.glTranslatef(0.0f, 0.0f, -10.0f); GL11.glBegin(GL11.GL_QUADS); GL11.glTexCoord2f(0.0f, 0.0f); GL11.glVertex2f(0.0f, 0.0f); GL11.glTexCoord2f(1.0f, 0.0f); GL11.glVertex2f(2.5f, 0.0f); GL11.glTexCoord2f(1.0f, 1.0f); GL11.glVertex2f(2.5f, 2.5f); GL11.glTexCoord2f(0.0f, 1.0f); GL11.glVertex2f(0.0f, 2.5f); GL11.glEnd(); GL11.glPopMatrix(); 但最终结果是: 我没有使用任何特殊设置,如GL_REPEAT或类似的东西。 这是怎么回事? 如何使纹理填充给定的顶点?

如何使用LWJGL加载图像以用作openGL纹理?

我正在尝试使用LWJGL库将图像作为openGL的纹理加载。 从我到目前为止发现的,我需要将纹理作为ByteBuffer传递给openGL。 我现在所拥有的是一些正确加载图像的代码,并将其存储在BufferedImage对象中。 问题是,我不知道如何从BufferedImage到包含正确格式的数据的ByteBuffer,以便与openGL一起使用(作为函数GL11.glTexImage2D()的输入)。 非常感谢帮助!