значения вершинного и фрагментного шейдера в webgl

Я новичок в webgl. Мне было интересно, как генерируются значения вершинного и фрагментного шейдера. Я видел некоторые образцы и мог видеть огромный массив этих значений. Не мог понять, как эти значения генерируются. Существуют ли какие-либо инструменты для создания этих значений. Я что-то упускаю? Ни в одном учебнике не объяснялось, как создавать эти значения шейдера. Любая помощь в этом приветствуется.


person Raghu    schedule 05.11.2011    source источник
comment
Если вы сообщите нам, какие образцы вы просматривали, может быть, мы сможем рассказать вам, как генерируются значения. Вы говорите о значениях координат вершин?   -  person LarsH    schedule 05.11.2011
comment
webglsamples.googlecode.com/hg/aquarium/aquarium.html.Они имеют огромные значения, определенные в их файлах js. Не понимаю, как они смогли генерировать такие большие значения.   -  person Raghu    schedule 05.11.2011


Ответы (2)


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

[1.0, 2.0, 3.0, 0.5, 0.5, 1.0, 0.0, 0.0]

Это может, в зависимости от макета вершины, представлять позицию, координату текстуры и нормаль для одной вершины, например:

Позиция: (x: 1,0, y: 2,0, z: 3,0) Texcoord: (u: 0,5, v: 0,5) Normal: (x: 1,0, y: 0,0, z: 0,0)

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

Недавно я написал о том, как вы рассказываете WebGL для интерпретации этих значений, но я точно не знаю, как много вы знаете о 3D-геометрии, так что это может быть слишком высокий уровень. Некоторые из первых уроков Learning WebGL рассказывают об этом более подробно:

Урок 1, Урок 2

person Toji    schedule 05.11.2011

Просто используйте какой-нибудь инструмент для 3D-моделирования, например Blender, Maya, 3D Studio Max, Google Sketch, на самом деле не имеет значения.

Эти значения, о которых вы говорите, генерируются этими программами, когда вы создаете в них модель, например, вы хотите создать рыбу, затем вы открываете свой инструмент 3D-моделирования, выполняете там свою работу, а затем экспортируете это в один из многих файлов. форматы для 3D-моделей, есть .x, .fbx, collada и т. д. Полученный файл будет содержать всю информацию, необходимую для рендеринга этой 3D-рыбы в любом месте, где вы хотите, он будет содержать положения вершин, координаты текстур, нормали (используемые для освещения в основном), может быть, цвета и куча других вещей.

Таким образом, вам просто нужно выбрать один из этих форматов файлов, узнать, как получить из него нужные вам данные, поместить их таким образом, чтобы их можно было оценить с помощью javascript (те массивы, которые вы сказали) и передать информацию в вершину/фрагмент шейдеры.

person Delta    schedule 08.11.2011