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;
}
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 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
#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;
}
Shader Fragment
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);
}
Init Shader
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);
}