Opengl 3.2: Essayer de rendre un triangle avec des shaders mais la sortie est déformée


J'essaie de porter un tutoriel de http://open.gl/drawing vers Java en utilisant JOGL

Je peux obtenir une sortie, mais je reçois une sortie inattendue.

Ce qui est attendu:

Sortie normale, triangle équilatéral

Et ma sortie:

ma sortie, triangle isocèle biaisé

Il semble que le triangle ne soit pas entièrement tourné vers la caméra, mais le tutoriel ne couvre pas la translation ou la rotation.

Compilation et liaison du programme 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);

L'affichage méthode:

    gl.glClearColor(0f, 0f, 0f, 1f);
    gl.glClear(GL3.GL_COLOR_BUFFER_BIT);
    gl.glDrawArrays(GL.GL_TRIANGLES, 0, 3);

Le vertex shader:

#version 330

in vec2 position;

void main()
{
    gl_Position = vec4(position, 0.0, 1.0);
}

Le shader de fragment:

#version 330

out vec4 outColor;

void main()
{
    outColor = vec4(1.0, 1.0, 1.0, 1.0);
}
Author: Community, 2014-02-17

1 answers

Je pense que vous avez une erreur ici:

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
    };

Il vous manque une virgule après le premier -0.5f (pour le sommet 2).

 2
Author: GuyRT, 2014-02-17 11:49:36