问题标签 [lwjgl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3208 浏览

java - 移动/调整大小期间opengl窗口冻结

我正在使用 LWJGL 开发游戏。移动窗口时,(计划在未来添加调整大小代码),渲染循环冻结。我希望它在移动时继续以某种方式运行。LWJGL 不包括 glutMainLoop。

Display 属于 OpenGL,而不是 Java。

相关代码:

0 投票
2 回答
1546 浏览

java - LWJGL - 使用四元数和平移矩阵在 6DOF 相机中实现“滚动”的问题

我在这个问题上花了几个星期,似乎找不到合适的解决方案,需要一些建议。

我正在使用 LWJGL/Java 创建一个 Camera 类,并使用四元数来处理方位(偏航)、俯仰和滚动旋转。我希望这台相机能够处理 3D 空间中的所有 6 度运动并滚动。轴承、俯仰和滚动都是四元数。我将它们乘以“变化”四元数,并从中创建一个平移矩阵。我把它放在一个浮点缓冲区中,并将模型视图矩阵乘以包含旋转矩阵的缓冲区。

我可以让轴承和俯仰旋转正常工作,但是当我实施滚动时,我遇到了问题。主要是,围绕 Z 轴旋转(滚动)似乎不起作用。当我“滚动”相机时,它似乎围绕全局 Z 轴而不是本地相机方向轴滚动。根据我乘以四元数的顺序,我通常可以让 3 个中的 2 个工作,但我不能让它们一起工作。

由于它们都是独立工作的,我假设我的定向方法有问题,我将它们组合并构建一个旋转矩阵。我在粘贴整个类时遇到问题,所以这里是与轮换相关的方法和声明:

...

Vector3f、Quaternion 和 Matrix4f 都是 LWJGL 类,不是定制的。

所以我的问题是,给定代表轴承、俯仰和滚动的 3 个四元数,我如何修改 ModelView 矩阵以准确表示这些旋转?

编辑:我觉得这非常接近。请参阅 RiverC 评论中的要点链接。在旋转了这么多度之后,视图在滚动时恢复正常之前跳了很多。它的要点在那里,但它仍然略微偏离。

0 投票
1 回答
3302 浏览

opengl - 在 OpenGL 中平铺背景

我敢肯定这是一个相对简单的问题,这只是我一直难以理解的一件事。

我有一个 512x512 背景,我想“无限”平铺。我四处寻找,似乎找不到很多东西,所以我想我会来这里。无论如何,这里是:

背景 http://dl.dropbox.com/u/5003139/hud/stars_far.png

所以你有它。我有一个可以在 2D 平面上移动的船精灵,这是一个自上而下的游戏。我将如何渲染此背景以使其覆盖任意大小窗口的每个像素?

0 投票
1 回答
5163 浏览

java - 基于鼠标移动的旋转四元数(OpenGL 和 Java)

我正在使用 OpenGL(具体来说是 LWJGL 绑定)用 Java 编写游戏。每个实体,包括相机,都有一个代表它的旋转的四元数。我已经想出了如何将四元数应用于当前的 OpenGL 矩阵并且一切都旋转得很好。我遇到的问题是让相机随鼠标旋转。

现在,每一帧,游戏都会抓取鼠标在一个轴上移动的量,然后将这个量应用到四元数上以进行相机旋转。这是旋转四元数的代码,我会发布它,因为我认为这是问题所在(尽管我对这类东西总是错的):

该方法应该围绕 X 轴旋转四元数。'rotation' 是代表实体旋转的四元数。“数量”是我想要旋转四元数的数量(也就是鼠标移动的数量)。'rot' 是沿 X 轴的归一化向量,其 aw 值转换为弧度(我想这里的目标是给它一个角度 - 比如 10 度 - 并让它沿着给定轴旋转四元数角度)。使用 Quaternion.mul 获取新的四元数,将其乘以旋转四元数,然后将结果存储为旋转四元数。我不知道标准化是否必要,因为“rot”是正常的,“rotation”应该已经标准化了。

rotateY 和 rotateZ 方法做同样的事情,除了改变 'rot' 的向量(y 为 0.0, 1.0, 0.0 和 z 为 0.0, 0.0, 1.0)。

当游戏开始并且相机向下看负 Z 轴时,代码似乎可以正常工作。您可以在 Y 轴上一直旋转一直围绕 X 轴旋转。但是,一旦您尝试在不向下看 Z 轴的情况下旋转相机,一切都会变得非常糟糕(我什至无法描述它,它的旋转非常奇怪)。

我的最终目标是在没有向上矢量的空间中控制一艘船。因此,当您在 Y 轴上移动鼠标时,无论船处于什么角度,它都会改变船的俯仰角(沿 X 轴旋转)。同样,当您在 X 轴上移动鼠标时,它会改变偏航角(沿 Y 轴的旋转)。我可能会以错误的方式解决这个问题,我可能只需要朝着正确的方向推动(或推动)。

如果您需要有关任何事情的更多详细信息(我的渲染是如何完成的,我正在尝试做的任何其他数学运算)只要问我就会提出来。当我使用欧拉角时,我明白了一切(这显然是 3D 应用程序开发的一大禁忌……希望有人能在我花很多时间让它们工作之前告诉我),但只要我切换到四元数,我很快就进入了我的脑海。在过去的几个月里,我一直在玩这个代码并阅读四元数试图让它工作,但我还没有真正得到任何地方:'(

非常非常令人沮丧...开始后悔尝试用 3D 制作东西>_<

0 投票
3 回答
916 浏览

java - 制作 Minecraft Mod。编译错误

我正在为我的速度破解做一些键绑定。我已经完成了部分键绑定。这是我得到的错误,我认为这是由于将布尔值放在错误的位置引起的。

== MCP v4.4 ==

== 发现错误 ==

代码

编辑新问题

代码

堆栈溢出格式很有趣,所以使用 pasteie http://pastie.org/2741100

0 投票
2 回答
236 浏览

java - 无法将项目提取为可运行的 Jar

我正在尝试将我的游戏提取到一个可运行的 .jar 文件中,以便在朋友中进行第一次 alpha 测试。但是,当我导出时,我得到一个只打开一个空白框架的应用程序。使用 Eclipse 中的运行可以正常工作。

这是我的静态主要内容:

在你问之前,我确实尝试过使 Main 类(在我的清单中选择)不是一个可运行的线程,并且我确实尝试将所有内容简化为一个简单的 Display。我知道游戏功能本身没有运行,因为它永远不会到达我分配的内存附近的任何地方。

我的 opengl 库被提取到 jar 中。Main 类在 processes 包中(它也不适用于默认包)。

而且,就像我说的,它是从一个清单中运行的,该清单将 Main 指定为主类(静态 main 所在的类)。

我已经对其进行了相当多的修改,并将其范围缩小到对 Display 类的所有调用,即使它们在 Run in Eclipse 中运行良好。(使用 System.exit(0); 函数调用后,如果冻结,则将其删除。)

补充:我还发现在解压jar里面的lwjgl包里面,Display类被分成了8个独立的文件。但是,我正在导入 opengl.*。

0 投票
1 回答
9413 浏览

opengl - OpenGL Alpha 混合

我已经找到了 5349574673 个关于 alpha 混合的页面,但我仍然无法得到想要的结果。我正在尝试使用 opengl 使 gif/png 文件正确显示(透明/半透明)。

这是我的初始化位:

我确信图像具有透明度,并且加载正确。
glBlendFunc(GL_ONE, GL_ONE); 工作,但我不知道它是否在 alpha 通道上做任何事情,因为它会呈现为黑色 => 混合工作
glColor4f(1f,1f,1f,0.3f); 工作正常,我可以画透明的东西

PS 我正在使用这个例子http://lwjgl.org/wiki/index.php?title=Space_Invaders_Example_Game来学习

编辑 我使用了用 GIMP 和其他纹理加载器编码的其他纹理,现在它工作正常。

0 投票
1 回答
2731 浏览

java - Eclipse:使用原生打包 JAR

我使用 LWJGL 制作了一个 Java 游戏,它需要一些本机文件。在 Eclipse 中一切正常。我想将 .dll 文件包含在 JAR 文件中,但每次尝试时,LWJGL 都找不到本地文件。我已经尝试过使用 jarsplice 或 fatjar,但无济于事。我知道我的世界也是使用 LWJGL 编程的,它以某种方式设法从另一个文件夹加载本地人。

有没有办法将本机文件打包成 JAR 文件并让第三方库(如 LWJGL)访问它们?如果没有,我将如何从外部文件夹加载它们?

编辑:不知何故,它与 JAR 文件所在目录中的本地人一起工作。不过,我仍然想要一些解释,也许还有其他一些方法。

0 投票
1 回答
598 浏览

java - 将 java 游戏导出到 .jar 的问题

我有一个使用 lwjgl 和 slick-util 的 java 游戏。它可以在我的电脑上完美运行,但不能在其他任何人的电脑上运行。它被包装在一个罐子里。我使用 Eclipse 创建了 jar,并使用 Jarsplice 密封了原生程序和库。基本 Jar 文件夹仅包含包目录和本机,没有清单或类路径。游戏本身不是 Applet。

在我的电脑上,这个 jar 可以完美运行游戏。对于其他任何人,只要在主代码中调用 Display 类,它就会崩溃(留下一个带有基本 java 名称和图标以及灰色内部窗口的空框架)。我已经打包了 32 位和 64 位本机,并在 32 位和 64 位 Windows 系统上对其进行了测试,但唯一运行它的是我的(Windows 32 位)。

该 jar 在基本文件夹中没有类路径或清单。

在运行 jar 之前,我重命名了我的 eclipse 构建引用文件夹,包括 natives 文件夹,它仍然有效。我没有其他地方的本地人。

这是 jar 中的 META-INF/MANIFEST.MF。请注意,当我删除 Main-Class 行时,jar 在我的计算机上也不起作用。被引用的类在 Jar 中。

这是jar中的目录结构:

更新:我已经明确将其范围缩小到仅被我的机器检测到的本地人,这可能是由于我安装了一些东西。也许我错过了什么?

0 投票
2 回答
1478 浏览

java - glBufferDataARB 还是 glBufferSubDataARB?

我正在开发一个基于瓷砖的物理游戏,例如 Falling Sand Game。我目前对顶点使用静态 VBO,对与每种块类型关联的颜色使用动态 VBO。在这种类型的游戏中,颜色 VBO 中的数据变化非常频繁。(曾经块更改)目前我正在为每个块更改调用 glBufferSubDataARB。我发现这行得通,但它不能很好地适应分辨率。(随着分辨率的每次增加,速度会慢得多)我希望我能获得两倍的当前可播放分辨率。(256x256)

我应该非常频繁地调用 BufferSubData 还是一帧调用一次 BufferData?我应该放弃 VBO 并使用顶点数组吗?

对不支持 VBO 的视频卡可以做什么?

(注:每块大于一个像素)