LWJGL3和Antons OpengGL教程,不显示简单的三角形

时间:2015-10-10 23:05:10

标签: java opengl lwjgl

我已经开始用LWJGL3学习OpenGL和一些教程。最后我在github上找到了Anton的一个,我从最基本的一个开始: Hello Triangle

我的问题与此类似:Triangle not showing up

这是我的问题。我创建了黑色背景的窗口,但没有出现三角形。关于我的错误的任何信息,我将不胜感激。这是我的代码:

public class HelloWorld 
{

    public static void main(String[] args) 
    {
        long window = NULL;
        int vao, vbo;

        final float[] points = 
        {
             0.0f,  0.5f,   0.0f, 
             0.5f, -0.5f,   0.0f,
            -0.5f, -0.5f,   0.0f
        };

        final String vertex_shader =
        "#version 410\n" +
        "in vec3 vp;" +
        "void main () {" +
        "   gl_Position = vec4 (vp, 1.0);" +
        "}";

        final String fragment_shader =
        "#version 410\n" +
        "out vec4 frag_colour;" +
        "void main () {" +
        "   frag_colour = vec4 (0.5, 0.0, 0.5, 1.0);" +
        "}";

        int vs, fs, shader_programme;

        if( glfwInit() == GL_FALSE )
        {
            System.err.println("Can't initialize glfw!");
            return;
        }

        window = glfwCreateWindow (640, 480, "Hello Triangle", NULL, NULL);
        if (window == 0) {
            glfwTerminate();
            return;
        }
        glfwMakeContextCurrent (window);


        GL.createCapabilities();


        glEnable (GL_DEPTH_TEST); 
        glDepthFunc (GL_LESS);

        vbo = glGenBuffers();
        glBindBuffer (GL_ARRAY_BUFFER, vbo);
        glBufferData (GL_ARRAY_BUFFER, FloatBuffer.wrap(points),
                      GL_STATIC_DRAW);

        vao = glGenVertexArrays();
        glBindVertexArray (vao);
        glEnableVertexAttribArray (0);
        glBindBuffer (GL_ARRAY_BUFFER, vbo);
        glVertexAttribPointer (0, 3, GL_FLOAT, false, 0, 0);

        vs = glCreateShader (GL_VERTEX_SHADER);
        glShaderSource (vs, vertex_shader);
        glCompileShader (vs);

        fs = glCreateShader (GL_FRAGMENT_SHADER);
        glShaderSource (fs, fragment_shader);
        glCompileShader (fs);

        shader_programme = glCreateProgram ();
        glAttachShader (shader_programme, fs);
        glAttachShader (shader_programme, vs);
        glLinkProgram (shader_programme);

        while ( glfwWindowShouldClose(window) == GL_FALSE ) {

            glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
            glUseProgram (shader_programme);
            glBindVertexArray (vao);

            glDrawArrays (GL_TRIANGLES, 0, 3);

            glfwPollEvents ();

            glfwSwapBuffers (window);
        }


        glfwTerminate();
        return;
    }

}

2 个答案:

答案 0 :(得分:0)

所以我的问题的解决方案是使用

integer

而不是

FloatBuffer buffer = BufferUtils.createFloatBuffer(points.length);
buffer.put(points);
buffer.rewind();    
glBufferData(GL_ARRAY_BUFFER, buffer, GL_STATIC_DRAW);

即使没有建议更改着色器(布局= 0),它仍然有效。谢谢你的所有答案。我获得了在LWJGL论坛上发布问题的解决方案。

答案 1 :(得分:-1)

是glEnable(GL_DEPTH_TEST);你正在绘制一个2d形状,深度测试正在消除你的形状。摆脱它,它应该工作。

相关问题