标签: lwjgl

如何使LWJGL窗口可调整大小?

我试图使我的Java游戏的窗口可调整大小,它使用LWJGL库.根据可追溯到2007年的一些论坛问题,这只能通过解决方法实现.今天仍然如此吗?什么是路?

java lwjgl

8
推荐指数
3
解决办法
7190
查看次数

GLSL #version提供语法错误(Mac上的LWJGL)

使用LWJGL时,指定GLSL版本会出现语法错误.我没有尝试在LWJGL之外重现这个问题.这是在运行Lion的多台Mac上发生的.

我已经使顶点和片段着色器无需使用即可工作#version.但我即将使用该texture函数,这似乎需要一个#version指令.

这是最简单的失败示例:

#version 120

void main() {
  gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

编译此片段着色器并调用glGetShaderInfoLog会出现此错误:

ERROR: 0:1: '' : syntax error #version
Run Code Online (Sandbox Code Playgroud)

替换120其他任何东西,例如110,也会出错.但奇怪的是,如果我使用130或更高,它会给出相同的错误以及对不支持的版本的抱怨.(我知道我的系统没有GLSL 1.3,但是当编译器表现得像它不理解版本标签时,显示此错误仍然很奇怪.)

我在Mac上使用ATI的Radeon HD 4670. GL_VERSION2.1 ATI-7.12.9GL_SHADING_LANGUAGE_VERSION1.20.

鉴于此,我认为没有任何理由说明为什么GLSL 1.20不可用.对我来说,这#version是一个非常奇怪的说它是一个语法错误,而不是说一个不受支持的GLSL版本.

java opengl glsl lwjgl

8
推荐指数
1
解决办法
6356
查看次数

gluProject将3D坐标转换为2D坐标不会正确转换2D Y坐标

经过两个小时的谷歌搜索(这里,这里,这里,这里,这里,以及其他一些我不想找到的东西),我以为我终于学会了将3D坐标转换为2D坐标的理论.但它没有用.我们的想法是将船舶的3D坐标转换为屏幕上的2D坐标,以呈现控制该船舶的玩家的用户名.

但是,文本呈现在错误的位置: 在此输入图像描述

文本是"Test || 2DXCoordinate || 2DZCoordinate".

这是我的getScreenCoords()- 将3D坐标转换为2D.

public static int[] getScreenCoords(double x, double y, double z) {
    FloatBuffer screenCoords = BufferUtils.createFloatBuffer(4);
    IntBuffer viewport = BufferUtils.createIntBuffer(16);
    FloatBuffer modelView = BufferUtils.createFloatBuffer(16);
    FloatBuffer projection = BufferUtils.createFloatBuffer(16);
    GL11.glGetFloat(GL11.GL_MODELVIEW_MATRIX, modelView);
    GL11.glGetFloat(GL11.GL_PROJECTION_MATRIX, projection);
    GL11.glGetInteger(GL11.GL_VIEWPORT, viewport);
    boolean result = GLU.gluProject((float) x, (float) y, (float) z, modelView, projection, viewport, screenCoords);
    if (result) {
        return new int[] { (int) screenCoords.get(0), (int) screenCoords.get(1) };
    }
    return …
Run Code Online (Sandbox Code Playgroud)

java opengl lwjgl glu

8
推荐指数
1
解决办法
1503
查看次数

Javafx Platform.runLater从未运行过

我基本上希望能够在我的LWJGL/GLFW线程启动后(和内部)启动一个新的Javafx窗口(阶段).我基本上是这样做的:

Thread thread = new Thread(()->Platform.runLater(()->{
    Stage stage = new Stage();
    //Stage setup
    stage.show();
}));
thread.start();
Run Code Online (Sandbox Code Playgroud)

线程是我的游戏线程.但它永远不会运行,我试过一个System.out.println()内部Platform.runLater()只是为了检查它永远不会运行.

为什么它永远不会运行,我该怎么做才能解决它?谢谢.

编辑:只是为了澄清线程已经启动了什么,如果我这样做:

Thread thread = new Thread(()->{
    System.out.println("Before Platform.runLater()");
    Platform.runLater(()->System.out.println("Inside Platform.runLater()"));
    System.out.println("After Platform.runLater()");
});
Run Code Online (Sandbox Code Playgroud)

它输出:

Before Platform.runLater()
After Platform.runLater()
Run Code Online (Sandbox Code Playgroud)

java multithreading javafx lwjgl

8
推荐指数
1
解决办法
5926
查看次数

当我尝试使用 LWJGL 库加载声音时,为什么会收到错误“NoClassDefFoundError: sun/misc/Unsafe”?

这是我的 Eclipse 项目文件的屏幕截图。 日食截图

new Sound("Res/MouseClick.ogg")当我尝试在类中的AudioPlayer第 15 行启动一个对象时,出现以下错误。

package com.game;
import java.util.HashMap;
import java.util.Map;

import org.newdawn.slick.Music;
import org.newdawn.slick.Sound;

public class AudioPlayer {
    public static Map<String, Sound> soundMap = new HashMap<String, Sound>();
    public static Map<String, Music> musicMap = new HashMap<String, Music>();

    public static void load() {
        try {
            soundMap.put("menu_sound", new Sound("Res/MouseClick.ogg")); // <- throws error
            musicMap.put("music", new Music("Res/Background.ogg"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Music getMusic(String key) {
        return musicMap.get(key);
    }

    public static Sound getSound(String …
Run Code Online (Sandbox Code Playgroud)

java noclassdeffounderror lwjgl

8
推荐指数
1
解决办法
1万
查看次数

Libgdx没有使用Opengl ES 2.0

最好,我想将OpenGL ES 2.0用于我开始制作的新3D游戏.无论如何,我一直在Ubuntu PC上开发它(不是顶级的,但体面的)我在2010年买的.

Gdx.graphics.isGL20Available()返回false,我很确定我的驱动程序支持3.3.0.这是我从glxinfo收到的:

name of display: :0.0
display: :0  screen: 0
direct rendering: Yes
server glx vendor string: NVIDIA Corporation
server glx version string: 1.4
server glx extensions:
GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_SGIX_fbconfig, 
GLX_SGIX_pbuffer, GLX_SGI_video_sync, GLX_SGI_swap_control, 
GLX_EXT_swap_control, GLX_EXT_texture_from_pixmap, GLX_ARB_create_context, 
GLX_ARB_create_context_profile, GLX_EXT_create_context_es2_profile, 
GLX_ARB_create_context_robustness, GLX_ARB_multisample, 
GLX_NV_float_buffer, GLX_ARB_fbconfig_float, GLX_EXT_framebuffer_sRGB
client glx vendor string: NVIDIA Corporation
client glx version string: 1.4
client glx extensions:
GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_visual_info, 
GLX_EXT_visual_rating, GLX_EXT_import_context, GLX_SGI_video_sync, 
GLX_NV_swap_group, GLX_NV_video_out, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, 
GLX_SGI_swap_control, GLX_EXT_swap_control, GLX_ARB_create_context, 
GLX_ARB_create_context_profile, GLX_NV_float_buffer, 
GLX_ARB_fbconfig_float, GLX_EXT_fbconfig_packed_float, 
GLX_EXT_texture_from_pixmap, GLX_EXT_framebuffer_sRGB, 
GLX_NV_present_video, …
Run Code Online (Sandbox Code Playgroud)

lwjgl glx opengl-es-2.0 libgdx

7
推荐指数
1
解决办法
6927
查看次数

Java中可靠的声音API,用于简单的数字样本回放

是否有一个很好的方法可以在Java中获得体面,可靠的数字采样声音播放?

我的请求列表非常简短:

  • 将数字化样本加载到内存中(例如,来自jar中捆绑的资源),例如.wav文件
  • 以非阻塞的方式播放它们
  • 当我同时播放几个样本并且它们在时间上交叉时,它们应该正确混合

拥有以下内容会很高兴,但实际上我可以没有它:

  • 从.ogg或类似的压缩格式播放(显然没有在Java中实现CPU饥饿的解码器)
  • 在播放时仍然播放相同的样本不应该停止先前播放给定的样本,但是第二个副本应该开始并与第一个正确混合

我已经尝试了臭名昭着的Java Sound API,但发现它完全不可靠,似乎无法满足我的最小愿望清单.我得到的问题:

  • 在使用ALSA dmix(OpenJDK 6)的Linux上,在初始化Java Sound API时让任何其他应用程序使用音频只会使Java应用程序中的所有声音消失而不会出现任何错误/警告.

  • 在Linux(OpenJDK 6)上,列出MixerInfos并尝试Clip使用其中任何一个获取对象时,在尝试加载wav文件时会引发以下异常:

    java.lang.IllegalArgumentException: Line unsupported: interface Clip supporting format PCM_SIGNED unknown sample rate, 16 bit, stereo, 4 bytes/frame, big-endian
    
    Run Code Online (Sandbox Code Playgroud)

    因此,AudioSystem.getClip(anySortOfMixer)似乎根本不起作用.只有AudioSystem.getClip()作品.

  • 使用不同的采样率/位/格式加载文件Clip失败LineUnavailableException.似乎第一次调用clip.open将声音系统设置为特定声音选项,在调用后加载具有略微不同采样率的文件(例如,第一个是44100,第二个是48000)

  • 在Linux(OpenJDK 6)上初始化几个不同的Clips并尝试播放它们只会使最后加载Clip声音 - 没有给出错误/警告,但只有play在最后Clip加载时才使用任何声音 - 所有其他声音都是静音的:

    Clip loadSound(String name) {
        URL url = this.getClass().getResource("/" + name + ".wav");
        Clip …
    Run Code Online (Sandbox Code Playgroud)

java openal alsa lwjgl javasound

7
推荐指数
1
解决办法
685
查看次数

LWJGL:打开窗口会导致程序崩溃

我试图在Java/LWJGL中制作一个简单的游戏.我正在关注在Windows上制作的教程,我正在使用mac.我抄他的代码打开了一个窗口,字符中的字符和程序崩溃立刻给了我一个非常漫长而奇怪的错误,可能有事情做与指针(其实我不知道).以下是创建窗口的行,我在其中使用了属性中定义宽度和高度的窗口:

 window = glfwCreateWindow(width, height, "Flappy Bird", NULL, NULL);
Run Code Online (Sandbox Code Playgroud)

当我在我的Mac上运行它时,它给了我这个错误:

2015-10-12 13:18:38.475 java[496:31875] *** Assertion failure in + [NSUndoManager _endTopLevelGroupings], /SourceCache/Foundation/Foundation-1154/Misc.subproj/NSUndoManager.m:340
2015-10-12 13:18:38.476 java[496:31875] +[NSUndoManager(NSInternal) _endTopLevelGroupings] is only safe to invoke on the main thread.
2015-10-12 13:18:38.476 java[496:31875] (
0   CoreFoundation                      0x00007fff98c3003c __exceptionPreprocess + 172
1   libobjc.A.dylib                     0x00007fff9620a76e objc_exception_throw + 43
2   CoreFoundation                      0x00007fff98c2fe1a +[NSException raise:format:arguments:] + 106
3   Foundation                          0x00007fff99f6199b -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 195
4   Foundation                          0x00007fff99ee364f +[NSUndoManager(NSPrivate) _endTopLevelGroupings] + 156
5   AppKit                              0x00007fff96ecbb95 -[NSApplication run] + 756
6 …
Run Code Online (Sandbox Code Playgroud)

java opengl lwjgl

7
推荐指数
1
解决办法
597
查看次数

LWJGL不会在NetBeans之外工作

我无法弄清楚为什么我的LWJGL3应用程序不能在NetBeans之外运行.我将所有本地人复制到同一个目录.作为Jar,如果我直接从Jar运行,我会收到错误:

[LWJGL] GLFW_API_UNAVAILABLE error
    Description : WGL: The driver does not appear to support OpenGL
    Stacktrace  :
            org.lwjgl.glfw.GLFW.nglfwCreateWindow(GLFW.java:1146)
            org.lwjgl.glfw.GLFW.glfwCreateWindow(GLFW.java:1227)
            com.alpha.core.Window.Init(Window.java:101)
            com.alpha.core.Game.GameLoop(Game.java:33)
            com.alpha.core.Game.Start(Game.java:23)
            com.alpha.tests.Main.main(Main.java:11)
Exception in thread "main" java.lang.RuntimeException: Failed to create the GLFW window
    at com.alpha.core.Window.Init(Window.java:103)
    at com.alpha.core.Game.GameLoop(Game.java:33)
    at com.alpha.core.Game.Start(Game.java:23)
    at com.alpha.tests.Main.main(Main.java:11)
Run Code Online (Sandbox Code Playgroud)

图形驱动程序更新,如果我从IDE运行应用程序,所有的DLL都在那里,我不知道是什么导致这个.

任何帮助将不胜感激,提前感谢!

java opengl netbeans lwjgl

7
推荐指数
1
解决办法
356
查看次数

为什么这不是一个正方形?LWJGL

我有一个基本的LWJGL窗口设置,我正在尝试使用该glBegin(GL_QUADS)方法绘制一个正方形.Square square = new Square(25, 25, 25),是我调用Square类绘制正方形的方式......但它是一个矩形.当我打电话给它时,我将所有25个作为参数传递.前两个是起始坐标,最后25个是边长,如下所示.生成矩形我做错了什么?

public Square(float x,float y,float sl) {
    GL11.glColor3f(0.5F, 0.0F, 0.7F);
    glBegin(GL11.GL_QUADS);
        glVertex2f(x, y);
        glVertex2f(x, y+sl);
        glVertex2f(x+sl, y+sl);
        glVertex2f(x+sl, y);
    glEnd();
}
Run Code Online (Sandbox Code Playgroud)

我的视口代码

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity(); // Resets any previous projection matrices
    glOrtho(0, 640, 0, 480, 1, -1);
    glMatrixMode(GL_MODELVIEW);
Run Code Online (Sandbox Code Playgroud)

java lwjgl

7
推荐指数
1
解决办法
244
查看次数