Странная проблема при попытке рендерить 3d модели в webgl - PullRequest
2 голосов
/ 15 июня 2011

Итак, в основном я пытаюсь создать загрузчик моделей, который будет принимать obj-файлы wavefont и отображать их в webgl.В конце концов я хотел бы иметь возможность вращать, переводить и масштабировать эти объекты.

У меня есть все настройки интерфейса, и он прекрасно работает.Однако у меня проблемы с рендерингом.

Я взял файл obj и проверил, все ли массивы имеют правильное количество элементов, и я даже проверил, используя плагин отладки chromes webgl, и оказалось, что массивы совпадают(четные значения элементов совпадают).

Количество вершин: 10932 Количество индексов: 18960

В любом случае, когда я запускаю gl.drawElements (gl.TRIANGLES, numItems, gl.UNSIGNED_SHORT, 0);Я не получаю ошибку Chrome, но в отладке плагина webgl я получаю «INVALID_OPERATION» без дополнительной информации.

Я обнаружил, что, изменив numItems (обычно это число index / 18960) на гораздо меньшее число, это сделает чайник (немного неправильно).Счастливое число по какой-то причине - 11034, если я пойду выше этого, оно не будет отображаться, если я пойду ниже этого, то получится мой немного неправильный чайник.Мне нужно, чтобы это число действительно было полным числом индексов, поскольку, очевидно, я не могу жестко закодировать числа.

Так что я очень озадачен тем, почему это происходит, для моего полного кода для отладки: http://webdesignscript.net/assignment/graphics_a3/

Рендеринг части кода: http://webdesignscript.net/assignment/graphics_a3/scripts/webglengine.js

Загруженная модель чайника: http://webdesignscript.net/assignment/graphics_a3/models/teapot.obj

Приветствия, Джош

1 Ответ

1 голос
/ 15 июня 2011

Надеюсь, вы вспомнили, что грани в файлах OBJ используют индексы вершин, начинающиеся с 1, а не 0. Поэтому, возможно, те более поздние грани (которые приводят к сбою или не работают) просто ссылаются на недопустимую вершину (одна за концом) , Если это так, просто вычтите 1 из индексов вершин граней после чтения из файла.

...