uniform sampler3D Noise: uniform float NoiseScale
2.7. Дерево
void main(void) {
vec4 noisevec = texture3D(Noise. NoiseScale * MCposition); float intensity = min(1.0, noisevec[3] * 18.0): vec3 color = vec3 (intensity * Lightlntensity): gl_FragColor = vec4 (color. 1.0):
.7. Дерево сдобным созданию гранитной поверхности способом можно получить и нечто охожее на дерево. Вот основные идеи фрагментного шейдера деревянной поверх -ости (листинг 12.8).
Дерево состоит из чередующихся светлых и темных участков поверхности в форме концентрических цилиндров, окружающих центральную ось.
Шум применяется для деформирования цилиндров так, чтобы они выглядели более реалистично.
Центр «дерева» находится на координатной оси у.
Навею поверхность накладывается высокочастотный «волокнистый» шаблон, чтобы создать впечатление распиленного дерева, показывая волокнистую структуру этого материала.
Фрагментный шейдер деревянной поверхности работает совместно все с тем е вершинным шейдером.
.7.1. Настройка приложения ейдеру деревянной поверхности не требуется много информации. Приложение олжно передавать вершинные координаты и нормаль с помощью обычных функ-ий OpenGL. Также вершинный шейдер получает координаты источника осве-ения и коэффициент масштабирования, которые передаются как uniform-nepe-енные. Фрагментный шейдер получает несколько uniform-переменных для того, тобы контролировать вид деревянной поверхности.
Перечислим uniform-переменные, используемые шейдером деревянной поверх-ости:
LightPos 0.0. 0.0. 4.0 Scale 2.0 LightWood 0.6. 0.3. 0.1 DarkWood 0.4. 0.2. 0.07 RingFreq 4.0 LightGrains 1.0 DarkGrains 0.0 GrainThreshold 0.5 NoiseScale 0.5. 0.1. 0.1 Noisiness 3.0 GrainScale 27.0
Шум
12.7.2. Фрагментный шейдер
В листинге 12.8 приведен фрагментный шейдер деревянной поверхности. Листинг 12.8. Фрагментный шейдер деревянной поверхности
varying float LightIntensity: varying vec3 MCposition:
uniform sampler3D Noise:
uniform vec3 LightWood; uniform vec3 DarkWood; uniform float RingFreq: uniform float LightGrains: uniform float DarkGrains: uniform float GrainThreshold: uniform vec3 NoiseScale: uniform float Noisiness; uniform float GrainScale: