Bonjour,
J'ai suivis le tuto relatif à OpenGL 4 sur ce site mais il manque la couleur.
Je suis donc aller sur le tuto original : http://www.swiftless.com/tutorials/o...vao-color.html
Mais ça ne marche pas
Impossible d'afficher la couleur.
A mon avis le problème viens de la
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 glGenVertexArrays(1, &_vaoId[0]); //create vao glBindVertexArray(_vaoId[0]); //link vao glGenBuffers(2, _vboId); //create vbo glBindBuffer(GL_ARRAY_BUFFER, _vboId[0]); //link vbo0 glBufferData(GL_ARRAY_BUFFER, 18 * sizeof(GLfloat), vertices, GL_STATIC_DRAW); glVertexAttribPointer((GLuint)0, 3, GL_FLOAT, GL_FALSE, 0, 0); glEnableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER, _vboId[1]); //link vbo1 glBufferData(GL_ARRAY_BUFFER, 18 * sizeof(GLfloat), colors, GL_STATIC_DRAW); glVertexAttribPointer((GLuint)1, 3, GL_FLOAT, GL_FALSE, 0, 0); glEnableVertexAttribArray(1); glBindVertexArray(0);
Mais au cas ou je vous donne le code correspondant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 void OpenGLContext::createSquare() { float *vertices = new float[18]; float *colors = new float[18]; vertices[0] = -0.5; vertices[1] = -0.5; vertices[2] = 0.0; //down left colors[0] = 1.0; colors[1] = 0.0; colors[2] = 0.0; vertices[3] = -0.5; vertices[4] = 0.5; vertices[5] = 0.0; //up left colors[3] = 1.0; colors[4] = 0.0; colors[5] = 0.0; vertices[6] = 0.5; vertices[7] = 0.5; vertices[8] = 0.0; //up right colors[6] = 1.0; colors[7] = 0.0; colors[8] = 0.0; vertices[9] = 0.5; vertices[10] = -0.5; vertices[11] = 0.0; //down right colors[9] = 0.0; colors[10] = 0.0; colors[11] = 1.0; vertices[12] = -0.5; vertices[13] = -0.5; vertices[14] = 0.0; //down left colors[12] = 0.0; colors[13] = 0.0; colors[14] = 1.0; vertices[15] = 0.5; vertices[16] = 0.5; vertices[17] = 0.0; //up right colors[15] = 0.0; colors[16] = 0.0; colors[17] = 1.0; glGenVertexArrays(1, &_vaoId[0]); //create vao glBindVertexArray(_vaoId[0]); //link vao glGenBuffers(2, _vboId); //create vbo glBindBuffer(GL_ARRAY_BUFFER, _vboId[0]); //link vbo0 glBufferData(GL_ARRAY_BUFFER, 18 * sizeof(GLfloat), vertices, GL_STATIC_DRAW); glVertexAttribPointer((GLuint)0, 3, GL_FLOAT, GL_FALSE, 0, 0); glEnableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER, _vboId[1]); //link vbo1 glBufferData(GL_ARRAY_BUFFER, 18 * sizeof(GLfloat), colors, GL_STATIC_DRAW); glVertexAttribPointer((GLuint)1, 3, GL_FLOAT, GL_FALSE, 0, 0); glEnableVertexAttribArray(1); glBindVertexArray(0); delete[] colors; delete[] vertices; }Shader Vertex
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 void OpenGLContext::renderScene(void) { glViewport(0, 0, _width, _height); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); _viewMatrix = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, -5.0f)); _modelMatrix = glm::scale(glm::mat4(1.0f), glm::vec3(0.5f)); _shader->bind(); //on lies les matrices au shader int projectionMatrixLocation = glGetUniformLocation(_shader->id(), "projectionMatrix"); int viewMatrixLocation = glGetUniformLocation(_shader->id(), "viewMatrix"); int modelMatrixLocation = glGetUniformLocation(_shader->id(), "modelMatrix"); glUniformMatrix4fv(projectionMatrixLocation, 1, GL_FALSE, &_projectionMatrix[0][0]); glUniformMatrix4fv(viewMatrixLocation, 1, GL_FALSE, &_viewMatrix[0][0]); glUniformMatrix4fv(modelMatrixLocation, 1, GL_FALSE, &_modelMatrix[0][0]); glBindVertexArray(_vaoId[0]); glDrawArrays(GL_TRIANGLES, 0, 6); glBindVertexArray(0); _shader->unbind(); SwapBuffers(_hdc); }
Shader Fragment
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #version 150 core in vec3 in_Position; in vec3 in_Color; out vec3 pass_Color; uniform mat4 projectionMatrix; uniform mat4 viewMatrix; uniform mat4 modelMatrix; void main() { gl_position = projectionMatrix * viewMatrix * modelMatrix * vec4(in_position, 1.0); pass_Color = in_Color; }
Init Shader
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 #version 150 core in vec3 pass_Color; out vec4 out_Color; void main() { out_Color = vec4(pass_Color, 1.0); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 void Shader::init(const char *vsFile, const char *fsFile) { if (inited) return; inited = true; _shaderFp = glCreateShader(GL_FRAGMENT_SHADER); _shaderVp = glCreateShader(GL_VERTEX_SHADER); const char *vsText = textFileRead(vsFile); const char *fsText = textFileRead(fsFile); if (vsText == NULL || fsText == NULL) { std::cout<< "ERROR file is not alive !!!"; return; } glShaderSource(_shaderVp, 1, &vsText, 0); glShaderSource(_shaderFp, 1, &fsText, 0); glCompileShader(_shaderVp); glCompileShader(_shaderFp); _shaderId = glCreateProgram(); glAttachShader(_shaderId, _shaderFp); glAttachShader(_shaderId, _shaderVp); glBindAttribLocation(_shaderId, 0, "in_Position"); glBindAttribLocation(_shaderId, 1, "in_Color"); glLinkProgram(_shaderId); }
Partager