Возможно, я упускаю что-то очевидное, но если вы сохраняете только 2 x 2 пикселя с 3 байтами на цвет (= 4 x 3 байта = 12 байтов) в качестве текстуры;тогда откуда 6 в «GLubyte пикселях [6 * 3]» взято?
6 * 3 равно 18 и! = power 2
// Загрузка текстуры glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 3, 2 , 0, GL_RGB, GL_UNSIGNED_BYTE, пиксели);
Из спецификации: glTexImage2D (цель GLenum, уровень GLint, внутренний формат GLint, ширина GLsizei, высота GLsizei , граница GLint, формат GLenum, тип GLenum, const GLvoid * данные);
лучше всего использовать полужирные переменные ^ 2 ...
Итакпопробуйте следующее:
// Загрузка текстуры glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, 2, 2 , 0, GL_RGB, GL_UNSIGNED_BYTE, пиксели);
Удалите последние 2 строки из массива пикселей, затем измените все значения на «255»;если вы получаете белую текстуру, это означает, что она работает.
Другой пример:
GLubyte пикселей [4 * 3] = {
255, 0, 0, // Красный // Зеленый // Синий // Пиксель 0
255, 0, 0, // Красный // Зеленый // Синий // Пиксель 1
255, 0, 0, // Красный // Зеленый // Синий // Пиксель 2
255, 0, 0 // Красный // Зеленый // Синий // Пиксель 3
};
И все отображается красным.
Если этого не произойдет, возможно, мой код поможет:
void CMesh::renderMesh(GLuint program, glm::mat4 *mvp){
glUseProgram(program);
int mvpLocation = glGetUniformLocation(program, "matViewProjection");
int texLocation = glGetUniformLocation(program, "baseMap");
glUniformMatrix4fv( mvpLocation, 1, GL_FALSE, glm::value_ptr(*mvp));
int vertexAttribLocation = glGetAttribLocation(program, "vertex");
int uvAttribLocation = glGetAttribLocation(program, "texturecoordinate");
// Bind our texture in Texture Unit 0
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textureIndex);
glUniform1i(texLocation, 0);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glVertexAttribPointer(
vertexAttribLocation,
3, // size
GL_FLOAT, // type
GL_FALSE, // normalized?
0, // stride
(void*)0 // array buffer offset
);
glEnableVertexAttribArray(1);
glBindBuffer(GL_ARRAY_BUFFER, uvBuffer);
glVertexAttribPointer(
uvAttribLocation,
2, // size
GL_FLOAT, // type
GL_FALSE, // normalized?
0, // stride
(void*)0 // array buffer offset
);
// Draw the triangles !
glDrawArrays(GL_TRIANGLES, 0, vertices.size() );
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
};