问题标签 [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 投票
0 回答
552 浏览

opengl - 使用模板缓冲区合并动态阴影

我正在使用 LWJGL 制作一个分屏合作 2D 顶级游戏。我目前正在尝试寻找一种将两个视野与模板缓冲区合并的智能方法。关键是你能够看到其他玩家能够看到的东西。

图片胜于文字。

模板缓冲区

请记住,我只能绘制白色方块和黑色阴影。

我不想在黑色区域内绘制任何东西,因此是模板缓冲区。

在用“1”填充模板缓冲区的同时绘制世界很容易。为玩家绘制视野很容易。找出只有一个玩家可以看到的地方并不容易。

对我来说,这似乎是最后两张图片之间的 OR 操作。然而,只有一个模板缓冲区。由于相对缺乏关于模板缓冲区的文档,我也不确定它是如何工作的。

我也想避免像FBO这样复杂的东西。我很确定有一种简单的方法可以使用模板缓冲区来做到这一点。

有人对此有任何想法吗?

0 投票
1 回答
173 浏览

opengl - 需要 LWJGL 支持 - 设置纹理类型

有人可以帮我设置不同的纹理类型吗?(GL_LINEAR、GL_NEAREST 等)我正在使用带有 netbeans 的 slick-util 库。问题是我无法设置为不同的类型。我记录并发现如果我想使用 MIP_MAP,那么我需要创建它们。问题是我无法创建它们。所以问题是!如何使用或不使用 slick-util 纹理进行创建,以及如何将它们设置为不同的纹理类型。我知道它是如何用 c++ 制作的,但还没有在 java 中实现?

谢谢你的时间,Zsurzsa,

0 投票
1 回答
224 浏览

java - Webstart 和 JavaCompiler API 限制

我有一个只有签名 jar 的应用程序,所有这些都由同一个证书,我的。我不想用 Webstart 运行应用程序。应用程序运行编译器,编译后的代码运行 LWJGL。但是,当我运行该应用程序时,它通过编译代码返回错误,它实际上无法找到 LWJGL(-library) 包(原始应用程序可以很好地看到它)。当我将应用程序编译为可信库时,它也会出错:

http://download.oracle.com/javase/6/docs/technotes/guides/jweb/mixed_code.html 我找到了这个网站,但它并没有让我对特定主题更加明智,因为它显然与编译后的代码与其他代码的处理方式不同。

谁能帮我解决这个问题?还是清理一下?

编辑:我已经得出结论,编译后的代码被视为无符号。要识别这些库,需要将它们添加到类路径中。

0 投票
1 回答
442 浏览

java - 缓冲 VBO 数据的小延迟

我正在开发一个受我的世界启发的图形引擎,很快就会在实际游戏中实现。在几何压力测试下,我的引擎速度高达 60+ FPS。我只使用 LWJGL 来提供图形辅助。在某一时刻,我在更新本地内存上的 VBO 数据时遇到了很大的延迟,但我通过多线程、流线化和同步通用块剔除器/构造器解决了这个问题。

在剔除后将 VBO 数据缓冲到视频内存的过程中,我偶尔会遇到一个小故障(20-30 毫秒),这可能会导致屏幕在这段时间内冻结。我认为延迟发生的原因是因为我每隔几帧通过 glBufferData(在静态绘制模式下)向 VBO(3-5mb)发送大量几何数据。我已经实现了块截锥体剔除、块截锥体剔除、空气块剔除和定向环境剔除器。

这给我留下了两个问题:

  1. 我可以使用另一种比 glBufferData 快的数据缓冲方法吗?(也许是一种将第二个缓冲区多线程作为准备的方法,这会将障碍转移到第二个线程)?

  2. 如果不是,我将如何使用指示立方体角的浮点矩阵(易于操作)从本地内存(可能是视频内存)实现直接遮挡剔除?请注意,反门户与我的框架不兼容。

或者,用“简单”的英语:如何在不进一步减少数据大小的情况下使用 glBufferData 加速将数据缓冲到 vram?

更新:将运行自定义遮挡剔除路线。我相当肯定我的数据缓冲时间大大增加了添加遮挡块所需的时间,甚至可能由于剔除更新程序获取锁而被同步延迟。如果有人有关于从缓冲区中进行遮挡剔除的建议,那就太好了。

更新 2:一旦我添加了隐藏面剔除(两个接触面 = 都不渲染),问题就巧合地解决了。我现在不需要额外的性能提升,因为仅此一项就使我的缓冲区大小降低了 90%,帧速率提高了 400%。感谢RTS的回答。

0 投票
1 回答
1510 浏览

java - LWJGL 使用纹理时颜色混乱 + 经常禁用纹理时会降低 FPS

我最初在使用纹理时遇到了颜色混乱的问题,但我设法修复了它(问题是我没有在需要时禁用纹理)。之后,颜色发生了变化,但仍然不是我想要的颜色 - 白色而不是纯蓝色 (0,0,255) RGB。这是完整的渲染方法:

问题出现在 RENDERING TILES 部分。那些没有纹理(目前),我希望它们只是彩色方块 - 红色(用于熔岩)和蓝色(用于水)。颜色取自静态变量并且是正确的(我通过 System.out.ln(tile.color.getRed()...... - 输出为 0,0,255 进行了检查)。这是静态变量:

输出如下所示:渲染场景

白色的田野是水——它们应该是蓝色的!

另一个问题是 FPS - 正如您在屏幕上看到的那样,它是 41。在渲染部分中添加纹理的多个 glEnable 和 glDisables 之前,FPS 是 60。这些多个启用和禁用是否会导致这种情况并且可以避免吗?

我是openGL的新手,这也是我在这里的第一个问题,所以如果我做错了什么,请原谅我。

0 投票
1 回答
7685 浏览

java - LWJGL 使用 slick-util 渲染文本

我想使用 slick-util 的教程在我的 openGL 应用程序顶部呈现一串文本:http://lwjgl.org/wiki/index.php?title=Slick-Util_Library_-_Part_3_-_TrueType_Fonts_for_LWJGL

这是我的初始化代码:

渲染代码:

附加方法:

输出看起来像这样:图像 1 (它似乎用我的水纹理纹理)

或者像这样,如果我在绘制文本之前禁用纹理:图像 2

我究竟做错了什么?

0 投票
1 回答
273 浏览

java - Eclipse 调试问题

我有一个使用 Java 制作的 LWJGL 和 Slick2D 的游戏。我最近添加了这段代码来获取像素是否为空:

这段代码在 Eclipse 的运行模式下似乎运行良好,但是当我在 Eclipse 的调试模式下启动程序时,游戏运行非常缓慢并且非常有故障。删除此代码块可使调试模式像运行模式一样流畅运行。

有谁知道为什么会这样,是否是我的错?这真的很有帮助:)

0 投票
1 回答
1522 浏览

java - 将 Gradle 项目配置为依赖 lwjgl

如何配置build.gradle为依赖 LWJGL?

我是 Gradle 新手,如何配置库依赖项对我来说一清二楚。

我的理解是,可以指定 Gradle 下载的库依赖项,而不是将它们签入源代码控制,但任何形式的配置帮助都将不胜感激。

(我不认识任何常春藤或 Maven。)

0 投票
2 回答
3149 浏览

java - Java 位图字体:用不同颜色对 1 位图像进行 blitting

我想在基于 Java AWT 的应用程序中实现一个简单的位图字体绘制。应用程序绘制一个Graphics对象,我想在其中实现一个简单的算法:

1) 加载一个文件(可能使用ImageIO.read(new File(fileName))),它是 1 位 PNG,看起来像这样:

8*8位图字体

即它是 8*8 字符的 16*16(或 16*many,如果我想支持 Unicode)矩阵。黑色对应背景色,白色对应前景。

2) 逐个字符地绘制字符串,将该位图的相关部分传送到目标Graphics。到目前为止,我只成功了这样的事情:

它可以工作,但是,唉,它按原样显示文本,即我不能用所需的前景色和背景色代替黑白,我什至不能使背景透明。

所以,问题是:在 Java 中是否有一种简单(而且快速!)的方法来将一个 1 位位图的一部分传输到另一个位图,在传输过程中对其进行着色(即用一种给定的颜色和所有 1 像素替换所有 0 像素和另外一个)?

我研究了几个解决方案,所有这些对我来说都不是最理想的:

  • 使用自定义着色BufferedImageOp,如本解决方案中所述- 它应该可以工作,但在每次 blit 操作之前重新着色位图似乎效率很低。
  • 使用多个 32 位 RGBA PNG,黑色像素的 alpha 通道设置为 0,前景设置为最大值。每个所需的前景色都应该有自己的预渲染位图。通过这种方式,我可以使背景透明,并在 blitting 之前将其单独绘制为一个矩形,然后使用我的字体选择一个位图,用所需的颜色预着色并在该矩形上绘制它的一部分。对我来说似乎是一个巨大的矫枉过正 - 是什么让这个选项变得更糟 - 它将前景色的数量限制在相对较小的数量(即我可以实际加载并保存数百或数千个位图,而不是数百万)
  • 如本解决方案中所述,捆绑和加载自定义字体可以工作,但据我在Font#createFont文档中看到的,AWTFont似乎仅适用于基于矢量的字体,而不适用于基于位图的字体。

可能已经有任何库实现了这种功能?或者是时候让我切换到某种更高级的图形库,比如lwjgl

基准测试结果

我在一个简单的测试中测试了几种算法:我有 2 个字符串,每个字符串 71 个字符,并在同一个地方一个接一个地连续绘制它们:

然后我测量所用时间并计算速度:每秒字符串和每秒字符数。到目前为止,我测试过的各种实现产生了以下结果:

  • 位图字体,16*16 字符位图:10991 个字符串/秒,780391 个字符/秒
  • 位图字体,预分割图像:11048 个字符串/秒,784443 个字符/秒
  • g.drawString():8952 个字符串/秒,635631 个字符/秒
  • 彩色位图字体,使用 LookupOp 和 ByteLookupTable 着色:404 个字符串/秒,28741 个字符/秒
0 投票
1 回答
490 浏览

lwjgl - 尝试将场景渲染到 FBO 返回白色

所以这就是我想要做的。我正在尝试使用 LWJGL 制作一个 2d 游戏,该游戏具有使用图像作为图块的动态生成的地形。它工作得很好,但是当我尝试进行缩放时,图块的边缘会出现深色阴影,并且我会在图块之间得到一个额外的像素。这是缩放前后的屏幕截图:

缩放前后截图: http: //postimage.org/image/rhuc9744/

我看了又看,从我在互联网上收集到的信息来看,我认为主要是缩放导致像素精度问题,在混合后会变得更糟。我看到一个博客说我可以在图块之间重叠一些像素,但这似乎太复杂了。我已经尝试了所有的混合选项,但都没有奏效。所以我想,我应该把所有的图块渲染到一个缓冲区,一个 FBO,然后将它应用为一个大纹理,所以即使我放大,我也不会看到暗边,因为它只是一张巨大的图片。所以我已经阅读了很多关于 FBO 的教程,但大多数(如果不是全部)都是针对 3D 的,而我实际上已经开始工作了。问题是当我将它应用于二维正交时。代码中断,我得到的只是一个白框。我已经被这个问题困扰了好几天了,我似乎无法使用谷歌找到答案。这里'

该代码在 resource/lamp.png 中加载图像,该图像可以是任何 .png 文件,并尝试将其渲染到 FBO,然后将其作为 2d 四边形中的纹理应用。出于某种原因,当我尝试将 FBO 绑定为纹理时,我只会得到一个白色的空白四边形。我不确定我是否没有正确渲染到 FBO,或者我没有正确绑定它。您可以检查方法 draw() 以便您知道我在说什么。就像我说的那样,我已经被这个问题困住了一天,所以非常感谢任何帮助。

资源/lamp.png:http://s3.postimage.org/rhpdn5ms/lamp.png?noCache=1315464566