0

C ++チュートリアルに従って、三角形を画面に描画しようとしています。プログラムを実行しようとすると、すべての Opengl 呼び出しで NullPointerException が発生します。また、opengl 3 のチュートリアルに従っていますが、私の呼び出しのほとんどは以前のバージョン用ですが、これは lwjgl のセットアップ方法であり、関数は元のバージョンに存在しますか?

package examples;

import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.*;

import java.nio.*;

public class Triangle
{
// An array of 3 vectors which represents 3 vertices
static final float vertexData[] = {
   -1.0f, -1.0f, 0.0f,
   1.0f, -1.0f, 0.0f,
   0.0f,  1.0f, 0.0f,
};

// This will identify our vertex buffer
int vertexBufferID;

public static void main(String[] args)
{
    new Triangle();
}

public Triangle()
{
    // Allocate floatBuffer to hold vertex data
    FloatBuffer vertexBuffer = FloatBuffer.allocate(9);
    // Put float data into buffer and position ready to read
    vertexBuffer.put(vertexData).position(0);

    // Generate 1 buffer, put the resulting identifier in vertexbuffer
    IntBuffer buffers  = IntBuffer.allocate(1); // allocate
    GL15.glGenBuffers(buffers);
    vertexBufferID = buffers.get(0);

    // Binds a buffer to the ARRAY_BUFFER(target)   (1 at a time) (breaks other bonds)
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vertexBufferID);

    // Give our vertices to OpenGL. (creates store for data bound to target(above))
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vertexBuffer,GL15.GL_STATIC_DRAW);

    try {
        Display.setDisplayMode(new DisplayMode(800,600));
        Display.create();
    } catch (LWJGLException e) {
        e.printStackTrace();
        System.exit(0);
    }

    while(!Display.isCloseRequested())
    {
        // Render
        // 1st attribute buffer : vertices
        GL20.glEnableVertexAttribArray(0); // enable vertex attribute index: 0
        GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vertexBufferID);

        // Specify location of vertex data for index 0
        GL33.glVertexAttribP1ui(0, GL11.GL_FLOAT, false, 0);

        // Draw the triangle!
        GL11.glDrawArrays(GL11.GL_TRIANGLES, 0, 3); // Starting from vertex 0; 3 vertices total -> 1 triangle

        GL20.glDisableVertexAttribArray(0);
    }

}
}
4

1 に答える 1

1

問題は、openGlを呼び出す前にディスプレイを作成する必要があることだと思います。動かしてみてください

   try {
        Display.setDisplayMode(new DisplayMode(800,600));
        Display.create();
    } catch (LWJGLException e) {
        e.printStackTrace();
        System.exit(0);
    }

Triangleコンストラクターの上部にあります。

于 2012-06-07T12:29:53.910 に答える