Правильный формат для загрузки массивов вершин из файла - PullRequest
0 голосов
/ 01 декабря 2010

Последние пару недель я бился головой об клавиатуру. Я пытаюсь загрузить массив с плавающей точкой (GLfloat) и массив шорт без знака (GLushort) из текстового файла в эквивалентные массивы в target-c, чтобы я мог визуализировать содержащиеся объекты. Я загрузил свои массивы в векторные объекты как

vector<float> vertices;

и

vector<GLushort> indices;

Но по какой-то причине я не могу понять, почему я не могу заставить их рендериться. Вот мой код для рендеринга выше:

glVertexPointer(3, GL_FLOAT, sizeof(vertices[0])*6, &vertices[0]);
glNormalPoitner(GL_FLOAT, sizeof(vertices[0])*6, &vertices[3]);
glDrawElements(GL_TRIANGLES, sizeof(indices)/sizeof(indices[0]), GL_UNSIGNED_SHORT, indices);

Примеры массивов ниже:

vertices: (Vx, Vy, Vz, Nx, Ny, Nz)

{10, 10, 0, 0, 0, 1,
-10, 10, 0, 0, 0, 1,
-10, -10, 0, 0, 0, 1,
10, -10, 0, 0, 0, 1};

indices: (v1, v2, v3)
{0, 1, 2,
0, 2, 3};

Текстовый файл, из которого я хочу загрузить эти массивы для рендеринга, выглядит следующим образом:

4 //Number of Vertices
###Vertices###
v 10 10 0 0 0 1
v -10 10 0 0 0 1
v -10 -10 0 0 0 1
v 10 -10 0 0 0 1
###Object1###
2 //Number of faces
f 0 1 2
f 3 4 5

Являются ли векторные объекты лучшим подходом? Если нет, то что? И что я делаю неправильно, что они не будут оказывать? Спасибо.

1 Ответ

2 голосов
/ 01 декабря 2010

Вы используете GL_TRIANGLES для указания формата вершин.

alt text

См. График о GL_TRIANGLES, ваш формат неверный.И я предпочитаю использовать формат GL_TRIANGLE_STRIP.Требуется несколько вершин.

...