0

私はlwjglを学び始め、問題を抱えています!私がしていること:

  1. テクスチャをロードする

  2. レンダリングサイクルを開始します

  3. 長方形を描き、テクスチャを適用します

  4. キーボードとマウスのイベントを確認し、カメラを回転/移動します

    public static void main(String[] args) {
    try {
        Display.setDisplayMode(new DisplayMode(320, 200));
        Display.create();
    } catch (Exception e) {
        System.out.println(e);
    }
    
    Texture texture = null;
    try {
        texture = TextureLoader.getTexture("JPG", ResourceLoader.getResourceAsStream("basic.jpg"), true);
    } catch (Exception e) {
        System.out.println(e);
        return;
    }
    
    GL11.glMatrixMode(GL11.GL_PROJECTION);
    GL11.glLoadIdentity();
    GL11.glOrtho(0, 320, 0, 200, 1, -1);
    GL11.glMatrixMode(GL11.GL_MODELVIEW);
    
    while (!Display.isCloseRequested()) {
        GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
        Color.white.bind();
        texture.bind();
        GL11.glBegin(GL11.GL_QUAD_STRIP);
            GL11.glTexCoord2f(0, 0);
            GL11.glVertex3f(100, 100, 0);
            GL11.glTexCoord2f(0, 1);
            GL11.glVertex3f(100, 140, 0);
            GL11.glTexCoord2f(1, 1);
            GL11.glVertex3f(140, 140, 0);
            GL11.glTexCoord2f(1, 0);
            GL11.glVertex3f(140, 100, 0);
        GL11.glEnd();
    
        Display.update();
        processInput();
        try {
            //Thread.sleep(20);
        } catch (Exception e) {
            System.out.println(e);
        }
    }
    
    Display.destroy();
    
    }
    
    public static void processInput() {
    long delta = getDelta();
    long divider = 10000000;
    float camx = 0, camy = 0, camz = 0;
    float roll = 0;
    if (Keyboard.isKeyDown(Keyboard.KEY_W)) {
        camz += 1.0f * delta / divider;
    }
    if (Keyboard.isKeyDown(Keyboard.KEY_S)) {
        camz -= 1.0f * delta / divider;
    }
    if (Keyboard.isKeyDown(Keyboard.KEY_D)) {
        camx -= 1.0f * delta / divider;
    }
    if (Keyboard.isKeyDown(Keyboard.KEY_A)) {
        camx += 1.0f * delta / divider;
    }
    if (Keyboard.isKeyDown(Keyboard.KEY_SPACE)) {
        camy -= 1.0f * delta / divider;
    }
    if (Keyboard.isKeyDown(Keyboard.KEY_C)) {
        camy += 1.0f * delta / divider;
    }
    if (Mouse.isButtonDown(0)) {
        roll += 1.0f * delta / divider;
    }
    if (Mouse.isButtonDown(1)) {
        roll -= 1.0f * delta / divider;
    }
    GL11.glTranslatef(camx, camy, camz);
    GL11.glTranslatef(160, 100, 0);
    GL11.glRotatef(roll, 0, 0, 1);
    GL11.glTranslatef(-160, -100, 0);
    }
    

XY平面内のすべてを回転および移動すると、完全に機能します。しかし、Z軸に沿って移動しようとすると、長方形全体が消えます。私が間違っていることは何ですか?

4

1 に答える 1

0

わかりました。初期パラメータを確認した後、自分で解決策を見つけました。ザ

GL11.glOrtho(0, 320, 0, 200, 1, -1);

関数はレンダリングを定義し、このボックスから出たものはすべてレンダリングされません。したがって、z軸に沿って移動した後、アイテムは消えます。レンダリングボックスをに変更しました

GL11.glOrtho(0, 320, 0, 200, 100, -100);

そしてそれはうまくいきます。

于 2013-02-12T11:46:24.067 に答える