【问题标题】:Running LWJGL on a Raspberry Pi在树莓派上运行 LWJGL
【发布时间】:2014-07-15 18:30:26
【问题描述】:

我需要将使用 LWJGL 用 Ja​​va 编写的东西移植到 Raspberry。我使用 Raspbian 并尝试了 oracles java 版本和一些称为“openjdk”或类似的东西。 对于这两个版本,我都会收到此异常:

java.lang.UnsatisfiedLinkError: org.lwjgl.opengl.GLContext.nLoadOpenGLLibrary()V

创建“显示”时。 我已经搜索了一些解决方案,但它们指的是 OpenGLES,我从未使用过 OpenGLES,也没有找到任何下载来使用它。 我不知道该怎么做以及您可能需要什么信息,如果您需要更多输入,请发表评论。

编辑:

你可能也想要我当前的源代码:

import java.io.File;

import org.lwjgl.LWJGLException;
import org.lwjgl.Sys;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.PixelFormat;


public class Main {
    private int fps;
    private long lastFPS, lastTime;

    Main() {
        createWindow();
        init2D();
        loop();
    }

    private void init2D() {
        GL11.glMatrixMode(GL11.GL_PROJECTION);
        GL11.glLoadIdentity();

        GL11.glOrtho(0, 500, 400, 0, -1, 1);

        GL11.glMatrixMode(GL11.GL_MODELVIEW);
        GL11.glLoadIdentity();
        GL11.glDisable(GL11.GL_DEPTH_TEST);
        lastFPS = getTime();
        getDelta();
    }

    private long getTime() {
        return (Sys.getTime() * 1000) / Sys.getTimerResolution();
    }

    public void updateFPS() {
        if (getTime() - lastFPS > 1000) {
            Display.setTitle(Integer.toString(fps));
            fps = 0;
            lastFPS += 1000;
        }
        fps++;
    }

    private int getDelta() {
        long time = getTime();
        int delta = (int) (time - lastTime);
        lastTime = time;
        return delta;
    }

    private void loop() {
        float rot = 0;
        while(!Display.isCloseRequested()&&!Keyboard.isKeyDown(Keyboard.KEY_ESCAPE)) {
            GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
            GL11.glLoadIdentity();
            int x = Display.getDisplayMode().getWidth()/2;
            int y = Display.getDisplayMode().getHeight()/2;
            GL11.glTranslated(x, y, 0);
            GL11.glRotated(rot, 0, 0, 1);
            if(Keyboard.isKeyDown(Keyboard.KEY_SPACE)) {
                GL11.glColor3f(1, 0, 0);
            } else {
                GL11.glColor3f(1, 1, 1);
            }
            GL11.glBegin(GL11.GL_QUADS);
            GL11.glVertex2d(-50, -50);
            GL11.glVertex2d(50, -50);
            GL11.glVertex2d(50, 50);
            GL11.glVertex2d(-50, 50);
            GL11.glEnd();
            rot+=0.05*getDelta();
            Display.update();
            updateFPS();
        }
    }

    private void createWindow() {
        try {
            Display.setDisplayMode(new DisplayMode(500, 400));
            Display.create();
        } catch (LWJGLException e) {
            e.printStackTrace();
            System.exit(0);
        } // Window is created in this try-catch
        try {
            Assetloader.load();
        } catch (Exception e) {
        } // Load Assets
    }

    public static void main(String args[]) {
        System.setProperty("org.lwjgl.librarypath", new File("native").getAbsolutePath());
        new Main();
    }
}

【问题讨论】:

    标签: java opengl raspberry-pi lwjgl raspbian


    【解决方案1】:

    Raspberry Pi 仅支持 OpenGL ES 2.0,而且没有任何解决办法。

    OpenGL ES 没有即时模式渲染(glBegin、glVertex、glColor)。您必须将几何图形加载到 VBO 中并以这种方式进行渲染。

    您还需要编写基本着色器并通过 glUniformMatrix 传递您的投影和模型视图矩阵。

    即时模式渲染几乎只能在桌面上使用,iPhone、Android 和 Blackberry 只使用 OpenGL ES,几乎所有游戏机都将使用与 OpenGL ES 非常相似的 API。

    底线:您需要放弃立即模式渲染并学习使用 ES 规范。

    这些链接应该会有所帮助...

    http://www.khronos.org/registry/gles/specs/2.0/es_full_spec_2.0.25.pdf

    http://www.khronos.org/files/opengles_shading_language.pdf

    【讨论】:

    • 感谢您的帮助。我会通读那些 pdf 文件并告诉你它是否真的有帮助。
    • 那些 PDF 是 OpenGL ES 2.0 和 OpenGL Shading Language 的规范,查找教程可能更容易,并且只有在遇到问题时才使用规范 pdf 作为参考。
    猜你喜欢
    • 2019-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多