Java Opengl 3.2:尝试使用着色器渲染三角形,但输出失真

Java Opengl 3.2:尝试使用着色器渲染三角形,但输出失真,java,opengl,graphics,rendering,jogl,Java,Opengl,Graphics,Rendering,Jogl,我正在尝试使用JOGL将教程从移植到Java 我能够获得输出,但收到了意外的输出 预期: 以及我的输出: 三角形似乎没有完全面向摄影机,但本教程没有介绍平移或旋转 GLSL程序编译和链接: float[] verts = //Our triangle as a set of 2d coordinates { 0.0f, 0.5f, //vertex 1, top at 0x, -0.5y 0.5f, -0.5f

我正在尝试使用JOGL将教程从移植到Java

我能够获得输出,但收到了意外的输出

预期:

以及我的输出:

三角形似乎没有完全面向摄影机,但本教程没有介绍平移或旋转

GLSL程序编译和链接:

float[] verts =       //Our triangle as a set of 2d coordinates
        {
             0.0f,  0.5f, //vertex 1, top at 0x, -0.5y
             0.5f, -0.5f  //vertex 2, right at 0.5x, -0.5y
            -0.5f, -0.5f  //vertex 3, left at -0.5x, -0.5y
        };

    IntBuffer vao = Buffers.newDirectIntBuffer(1);
    gl.glGenVertexArrays(1, vao);
    gl.glBindVertexArray(vao.get(0));

    IntBuffer vbo = Buffers.newDirectIntBuffer(1);
    FloatBuffer vertBuffer = Buffers.newDirectFloatBuffer(verts);

    gl.glGenBuffers(1, vbo);

    gl.glBindBuffer(GL3.GL_ARRAY_BUFFER, vbo.get(0));       
    gl.glBufferData(GL3.GL_ARRAY_BUFFER, vertBuffer.limit() * Buffers.SIZEOF_FLOAT, vertBuffer, GL3.GL_STATIC_DRAW);

    int vertexShader = gl.glCreateShader(GL3.GL_VERTEX_SHADER);
    gl.glShaderSource(vertexShader, 1, vertProgram, null);
    gl.glCompileShader(vertexShader);

    int fragmentShader = gl.glCreateShader(GL3.GL_FRAGMENT_SHADER);
    gl.glShaderSource(fragmentShader, 1, fragProgram, null);
    gl.glCompileShader(fragmentShader);

    program = gl.glCreateProgram();
    gl.glAttachShader(program, vertexShader);
    gl.glAttachShader(program, fragmentShader);
    gl.glBindFragDataLocation(program, 0, "outColor");
    gl.glLinkProgram(program);

    gl.glUseProgram(program);

    int positionAttribute = gl.glGetAttribLocation(program, "position");
    gl.glEnableVertexAttribArray(positionAttribute);
    gl.glVertexAttribPointer(positionAttribute, 2, GL.GL_FLOAT, false, 0, 0L);
显示方法:

    gl.glClearColor(0f, 0f, 0f, 1f);
    gl.glClear(GL3.GL_COLOR_BUFFER_BIT);
    gl.glDrawArrays(GL.GL_TRIANGLES, 0, 3);
顶点着色器:

#version 330

in vec2 position;

void main()
{
    gl_Position = vec4(position, 0.0, 1.0);
}
片段着色器:

#version 330

out vec4 outColor;

void main()
{
    outColor = vec4(1.0, 1.0, 1.0, 1.0);
}

我想你这里有个错误:

float[] verts =       //Our triangle as a set of 2d coordinates
    {
         0.0f,  0.5f, //vertex 1, top at 0x, -0.5y
         0.5f, -0.5f  //vertex 2, right at 0.5x, -0.5y
        -0.5f, -0.5f  //vertex 3, left at -0.5x, -0.5y
    };

第一个
-0.5f
(对于vertex 2)后缺少逗号。

当您的移植教程准备就绪时,请毫不犹豫地更新官方JogAmp wiki。我们将很高兴看到您的源代码,其他一些初学者可以从中受益。