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:
Et ma sortie:
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);
}
0
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