Код объекта Vertex Buffer Object предназначен для рендеринга текстур красиво, но вместо этого текстуры визуализируются странно с помощью некоторых треугольных фигур.OpenGL Vertex Buffer Код объекта, дающий плохой результат
Что происходит - http://godofgod.co.uk/my_files/wrong.png
Что должно произойти - http://godofgod.co.uk/my_files/right.png
Эта функция создает VBO и устанавливает вершину и текстуры данных координат:
extern "C" GLuint create_box_vbo(GLdouble size[2]){
GLuint vbo;
glGenBuffers(1,&vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
GLsizeiptr data_size = 8*sizeof(GLdouble);
GLdouble vertices[] = {0,0, 0,size[1], size[0],0, size[0],size[1]};
glBufferData(GL_ARRAY_BUFFER, data_size, vertices, GL_STATIC_DRAW);
data_size = 8*sizeof(GLint);
GLint textcoords[] = {0,0, 0,1, 1,0, 1,1};
glBufferData(GL_ARRAY_BUFFER, data_size, textcoords, GL_STATIC_DRAW);
return vbo;
}
Вот некоторые relavant код из другая функция, которая должна нарисовать текстуры с VBO.
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glColor4d(1,1,1,a/255);
glBindTexture(GL_TEXTURE_2D, texture);
glTranslated(offset[0],offset[1],0);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glVertexPointer(2, GL_DOUBLE, 0, 0);
glEnableClientState(GL_VERTEX_ARRAY);
glTexCoordPointer (2, GL_INT, 0, 0);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glDrawArrays(GL_TRIANGLES, 0, 3);
glDrawArrays(GL_TRIANGLES, 1, 3);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, 0);
я бы надеялся на код, чтобы использовать первые три координаты (верхний левый, нижний левый, верхний правый) и последние три (нижний левый, верхний правый, нижний правый) правильно рисовать треугольники с данными текстуры самым эффективным способом. Я не понимаю, почему треугольники должны сделать его более эффективным, но, видимо, это путь. Это, конечно же, не получается по какой-то причине.
Я спрашиваю, что сломано, но также я собираюсь сделать это правильно?
спасибо.
Настоящий nitpicking, но вам лучше использовать некоторую форму offsetof, чтобы найти смещение для координат текстуры. Здесь, вероятно, нет отступов между y и s, но, скажем, у вас было 3 шорта для позиции, тогда история была бы совсем другой (3 * sizeof (GLshort) будет неправильным смещением, так как смещение, вероятно, будет 8 байтов, а не 6). – Bahbar
Большое спасибо за это. Я сейчас изучу его. –
Использование GLdouble для координат текстуры, а также вершин, конечно, я могу просто использовать многомерный массив? Мне нужно будет использовать двойники для координат текстуры для моих закругленных текстур. –