Я начал с рендерера WebGL от ThreeJS после того, как выполнил «обычный» WebGL без дополнительных библиотек + шейдеры GLSL. Сейчас я пытаюсь писать собственные шейдеры в своей программе ThreeJS, и я заметил, что ThreeJS заботится о многих стандартных вещах, таких как матрицы проекции и модель / представление. Мой простой вершинный шейдер теперь выглядит так:
// All of these seem to be predefined:
// vec3 position;
// mat4 projectionMatrix;
// mat4 modelViewMatrix;
// mat3 normalMatrix;
// vec3 normal;
// I added this
varying vec3 vNormal;
void main() {
vNormal = normalMatrix * vec3(normal);
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
}
Мой вопрос: какие еще переменные (я предполагаю, что они унифицированные) предопределены для вершинных и фрагментных шейдеров, которые я мог бы использовать? Помогает ли ThreeJS, например, с векторами света / цветом света (конечно, при условии, что я добавил один или несколько источников света в свою сцену ThreeJS)?
Обновление (9 октября 2014 г.): этот вопрос получил довольно много просмотров, и пользователь Killah упомянул, что существующие ответы больше не приводят к решению с текущей версией three.js . Я добавил и принял свой ответ, см. Ниже.