|
17.11.2012, 18:54
|
#1
|
ПроЭктировщик
Регистрация: 20.06.2009
Адрес: Україна
Сообщений: 152
Написано 10 полезных сообщений (для 24 пользователей)
|
Как создать туман с помощью GLSL (WebGL)
Прочитал некоторые уроки по этому поводу, но никак не могу понять с чего начинать.
У меня есть шейдеры:
Вершинный:
attribute vec3 aVertexPosition;
attribute vec2 aTextureCoord;
varying vec2 vTextureCoord;
varying vec3 vPosition;
uniform mat4 uMVMatrix;
uniform mat4 uPMatrix;
void main(void) {
vPosition = aVertexPosition;
gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);;
vTextureCoord = aTextureCoord;
}
Фрагментарный:
#ifdef GL_ES
precision highp float;
#endif
varying vec2 vTextureCoord;
varying vec3 vPosition;
uniform sampler2D SamplerNZ;
void main(void) {
gl_FragColor = texture2D(SamplerNZ, vTextureCoord);
}
Что надо в них добавить чтобы появился туман?
__________________
Blitz3D, XNA, WebGL, OpenGL, Unity3D
PC: ASUS A55VM Core i3 (2.4Ghz), 6 Gb RAM, Nvidia GF 630M GT 2Gb
|
(Offline)
|
|
17.11.2012, 18:55
|
#2
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Как создать туман с помощью GLSL (WebGL)
вот тебе формулы простого тумана
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
дальше смотри какие функции есть в glsl и как ими это написать.
|
(Offline)
|
|
17.11.2012, 19:47
|
#3
|
ПроЭктировщик
Регистрация: 20.06.2009
Адрес: Україна
Сообщений: 152
Написано 10 полезных сообщений (для 24 пользователей)
|
Ответ: Как создать туман с помощью GLSL (WebGL)
Сообщение от Mr_F_
|
Суть в том, что я не знаю какими функциями и как ими пользоваться в GLSL. А за формулы линейного, экспоненциального тумана я уже читал. Просто я не знаю как это реализовать... Помогите пожалуйста.
__________________
Blitz3D, XNA, WebGL, OpenGL, Unity3D
PC: ASUS A55VM Core i3 (2.4Ghz), 6 Gb RAM, Nvidia GF 630M GT 2Gb
|
(Offline)
|
|
17.11.2012, 19:49
|
#4
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Как создать туман с помощью GLSL (WebGL)
Шейдеры? Дистанция пикселя к камере = туман.
|
(Offline)
|
|
17.11.2012, 20:01
|
#5
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Как создать туман с помощью GLSL (WebGL)
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
25.11.2012, 20:20
|
#6
|
ПроЭктировщик
Регистрация: 20.06.2009
Адрес: Україна
Сообщений: 152
Написано 10 полезных сообщений (для 24 пользователей)
|
Ответ: Как создать туман с помощью GLSL (WebGL)
Уже познал!
Чтобы сделать туман на WebGL достаточно взять и переписать фрагментарный шейдер:
#ifdef GL_ES
precision highp float;
#endif
varying vec2 vTextureCoord;
varying vec3 vPosition;
vec4 fColor;
vec4 Fogcolor = vec4(0.0,0.0,0.0,1.0);
float density = 0.0005;
const float LOG2 = 1.442695;
float fogFactor;
float z;
uniform sampler2D SamplerNZ;
void main(void) {
fColor = texture2D(SamplerNZ, vTextureCoord);
z = gl_FragCoord.z / gl_FragCoord.w;
fogFactor = exp2( -density * density * z * z * LOG2 );
fogFactor = clamp(fogFactor, 0.0, 1.0);
gl_FragColor = mix(Fogcolor, fColor, fogFactor );
}
__________________
Blitz3D, XNA, WebGL, OpenGL, Unity3D
PC: ASUS A55VM Core i3 (2.4Ghz), 6 Gb RAM, Nvidia GF 630M GT 2Gb
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:37.
|