В вашем случае массив vertex
- это массив с координатами 3 компонентов (x, y, z).Таким образом, параметр "size" gl:vertex-attrib-pointer
должен быть равен 3 вместо 4:
(gl:vertex-attrib-pointer 0 3 :float nil 0 0)
Обратите внимание, что при использовании размера 4 спецификация координат вершин смещена.И, наконец, доступ к массиву вершин осуществляется за пределами.
Ваше предположение о индексах файла obj может быть неверным.
В общем случаеФайл obj выглядит следующим образом:
v -1.000000 0.000000 1.000000
v 1.000000 0.000000 1.000000
v -1.000000 0.000000 -1.000000
v 1.000000 0.000000 -1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 0.000000 1.000000
vt 1.000000 1.000000
vn 0.0000 1.0000 0.0000
f 1/1/1 2/2/1 4/4/1
f 1/1/1 4/4/1 3/3/1
Он состоит из координат вершины (v
с 3 компонентами), координат текстуры (vt
2 компонента) и нормальных векторов (vn
3 компонента).Далее идут лица (f
).Каждая грань указывает один треугольник с 3 координатами вершины и его атрибутами.Каждая вершина состоит из трех индексов, 1-й - индекс координаты вершины, 2-й - индекс координаты текстуры, а 3-й - индекс вектора нормали.
Это означает, что следующееface
f 1/1/1 2/2/1 4/4/1
определяет один треугольник (с 3 вершинами), где индексы координат вершин (1-ые индексы) равны
1// 2// 4//
индексы основных текстурных координат (2-ые индексы)) равны
/1/ /2/ /4/
, а индексы соответствующих нормальных векторов (3-ий индексы) равны
//1 //1 //1
Вы можете попробовать
vertices #(-0.707 -0.5 0.0
0.707 -0.5 0.0
0.0 1.0 0.0)
вместомассив вершин orignal и
elements #(0 1 2)
вместо индексов orignal для рисования одного треугольника по причинам отладки.