Войти
ПрограммированиеФорумГрафика

Создание реалистичной поверхности воды с использованием GLSL (комментарии) (28 стр)

Страницы: 127 28 29 3033 Следующая »
#405
0:54, 10 фев. 2010

экспериментировал с частицами, хоте сделать воду но намудрил с коэффициентами получилось что то похожее на облака, если воспользоваться немного фантазией{не фантазий надо много}...
в итоге получилось вот что http://www.gamedev.ru/files/?id=51352
это мой первый код  тест с  OpenGL работает в цикли без тайминга от FPS у меня 700-1к фпс выдает(если я его еще корректно считаю)


#406
12:54, 10 фев. 2010

Что будет, если из вода посмотреть вверх?
Будет ли под водой всё хорошо, или эта вода только для просмотра на неё из надводной части?

#407
13:03, 10 фев. 2010

KaronatoR
> Что будет, если из вода посмотреть вверх?
> Будет ли под водой всё хорошо, или эта вода только для просмотра на неё из
> надводной части?

Я делал только надводную часть. Но можно переделать и для подводной части, но мне было это не интересно.

#408
19:49, 10 фев. 2010

atwood
То что в статье описывает Sergio - оно только для надводной части?

#409
20:00, 10 фев. 2010

KaronatoR
> То что в статье описывает Sergio - оно только для надводной части?
Угу

#410
22:56, 11 фев. 2010

http://www.sharemania.ru/0229192 перелопатил

#411
0:19, 12 фев. 2010

atwood
> http://www.sharemania.ru/0229192 перелопатил
Что изменилось-то? Скрины хоть кинь. И с этого хостинга принципально не хочеться качать :)))

#412
0:23, 12 фев. 2010

Скачал. На скринах оно красивее смотрелось. Или перелопатил так, что испротил? 11 фпс - ужос.

#413
0:28, 12 фев. 2010

Скрины тафай!.. :(

#414
3:18, 12 фев. 2010

Пытаюсь сделать воду по статье, иду, так сказать от простого к сложному. Сделал проекцию текстуры отражения на поверхность воды - все хорошо легло. Далее начал добавлять искажения отраженной текстуры и всплыл баг - по краям выперает искажение от отражения:

баг | Создание реалистичной поверхности воды с использованием GLSL (комментарии)

Если отражения не выходит за края то бага нету, но стоит какому - либо отражению вылезти за край - с другого края вылзают данные артефакты.

Код вершинного шейдера

#version 120

varying vec4 proj_coords;
varying vec4 vertex;

void main(void)
{
  vertex = gl_Vertex;

  gl_TexCoord[0] = gl_MultiTexCoord0;

  gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;

  proj_coords = gl_Position;
}

Код фрагментного шейдера:

#version 120

uniform sampler2D reflect_texture;
uniform sampler2D normal_texture;
uniform float phase;

varying vec4 proj_coords;

const float fNormalScale = 0.2;
const vec3 water_color = vec3(0.84, 0.89, 0.93);

void main (void)
{
  vec3 normal = 2.0 * texture2D(normal_texture, gl_TexCoord[0].st * fNormalScale + vec2(phase) ).xyz - vec3(1.0);

  // вычислим проективные координаты
  vec3 proj_tc  = 0.5 * proj_coords.xyz / proj_coords.w + 0.5;

  // зададим текстуту отражения
  vec2 vDistort = normal.xy * 0.025;
  vec3 reflection = texture2D(reflect_texture, proj_tc.st + vDistort).xyz;
  
  gl_FragColor = vec4(water_color * reflection, 1.0);
}

При рендеринге используется система координат xyz, где z отвечает за высоту (т.е. водная плоскость лежит в плоскости z = 0).
Заранее благодарен.

#415
9:03, 12 фев. 2010

CrashB

с параметров текстуры попробуй поубирай Repeat, Linear

Sergio

я утомился, то одному не то, то другому не то..... Куда править? Только и делаю что параметры подбираю..... Коэффициенты Френеля и те запрятали. Вот и пляшу с бубном. :-) Фотки моря все разные, да и море по разному выглядит в разные моменты.
на чём такой fps?

#416
9:21, 12 фев. 2010

CrashB
У текстуры отражения, нужно установить тип наложения: Clamp
В DX, это: AddressU=CLAMP; AddressV=CLAMP; у стейта самплера в эффект файле, или в самом движке уже, менять этот параметр.

#417
9:42, 12 фев. 2010

MoKa, спасибо, действительно Clamp помог!

#418
11:15, 12 фев. 2010

Вот сел и для интереса подправил water.fs, надеюсь не нарушил копирайт :)

sample | Создание реалистичной поверхности воды с использованием GLSL (комментарии)
 vec3 lightNormal = normalize(lightdir);
 vec3 viewNormal = normalize(locnorm);
 vec3 normNormal = normalize(normal);

 float VdotN = max(0.0, dot(viewNormal, normNormal));
 float fresnelTerm = 1.0 / pow(1.0 + VdotN, 3.5);

 vec2 vDistort = 0.1 * normNormal.xz;

 vec2 projectectTexCoord = 0.5 + 0.5 * vProjectedVertex.xy / vProjectedVertex.w;
 projectectTexCoord += vDistort;

 vec4 cReflection = texture2D(reflect, projectectTexCoord);
 vec4 cRefraction = texture2D(refract, projectectTexCoord);

 vec3 vReflected = 2.0 * normNormal * NdotL - lightNormal;

 float VdotR = pow( max(0.0, dot(vReflected, viewNormal)), 128.0);
  
 gl_FragColor = mix(cRefraction, cReflection, fresnelTerm) + vec4(VdotR)
#419
11:19, 12 фев. 2010

Sergio
> float fresnelTerm = 1.0 / pow(1.0 + VdotN, 3.5);

не научный подход - эмпирическая формула :)

> vec3 vReflected = 2.0 * normNormal * NdotL - lightNormal;


есть же reflect

Страницы: 127 28 29 3033 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.