PMG

Форумы по созданию игр
Текущее время: 15 июл 2026 22:48

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Помогите разобраться с GL_ARB_shader_objects
СообщениеДобавлено: 21 сен 2006 20:27 
Не в сети
Любитель
Аватара пользователя

Зарегистрирован: 07 апр 2006 23:21
Сообщения: 23
Откуда: Мозырь, Беларусь
Hi, All!

Subj!

Мне нужно реализовать относительно простой эфект... освещение от направленного источника.
Значит есть у меня сфера (рисуется квадриком) и вектор "света" - LightVec

Делаю так:
Код:
// vertex shader
uniform vec4 LightVec;
varying vec2 uv;
varying vec4 color;
 
void main()
{
  gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;

  vec4 n = normalize(vec4(gl_Normal, 1));
  vec4 normalVec = gl_ModelViewProjectionMatrix * n;

  vec4 lightVec = normalize(LightVec);

  float diffuse = max(dot(normalVec, lightVec), 0.2);
       
        color.a = 1;
        color.rgb = vec3(diffuse, diffuse, diffuse);

  uv = gl_MultiTexCoord0.xy;
}

Код:
// fragment shader
uniform sampler2D diffuseMap;
varying vec2 uv;
varying vec4 color;

void main()
{
  vec4 res = color * texture2D(diffuseMap, uv);
  gl_FragColor = res;
}


Получаю сферу... но вот цвета не те...
Что я делаю не так?
Как надо?

_________________
С уважением, Виталий Лещенко.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 21 сен 2006 23:47 
Не в сети
Любитель
Аватара пользователя

Зарегистрирован: 07 апр 2006 23:21
Сообщения: 23
Откуда: Мозырь, Беларусь
Спасибо... с этим вопрособ я уже сам разобрался...

_________________
С уважением, Виталий Лещенко.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 21 сен 2006 23:49 
Не в сети
Любитель
Аватара пользователя

Зарегистрирован: 07 апр 2006 23:21
Сообщения: 23
Откуда: Мозырь, Беларусь
Еще вопрос:
Так же с посощью GL_ARB_shader_objects делаю освещение из точесных источников.
Тут только фрагментный шейдер:
Код:
// fragment shader
uniform float rrad;
void main()
{
  vec3 lightdist = gl_TexCoord[0].xyz;
  float t = dot(lightdist, lightdist);
  float light = 1.0 - rrad * sqrt(t);
  gl_FragColor = vec4(light, light, light, 1);
}

// end
Тут rrad = 1 / omni.radius
lightdist = вектор от точки до источника

Метод освещения такой:
1.
glBlendFunc(GL_ONE, GL_ZERO);
glDisable(GL_TEXTURE_2D);
glColor3f(0.2, 0.2, 0.2);
2.
Рисую черым цветом всю сцену

3.
glDepthFunc(GL_EQUAL);
glDepthMask(GL_FALSE);
glBlendFunc(GL_ONE, GL_ONE);
4.
Включаю шейдер

5. Перерисовываю все сектора, которые "косаются" лампочек
6. Выключаю шейдер
7.
glBlendFunc(GL_DST_COLOR, GL_SRC_COLOR);
glColor3f(1,1,1);

8. Перерисовываю всю сцену с текстурами

Получаю искомый результат... НО!
Иногда 8 этап не попадает на те же места где был написован во 2 и 5 этапе... и лезут артефакты.

Вопрос:
Где именно происходит нарушение в точности расчета?...
Как это побороть?
Какие есть другие способы решения изначальной проблемы (реализовать освещение omni) используя GL_ARB_shader_objects?

Это момент когда все нормально...
Изображение
А сейчас проблемы из-за неточности z-буфера (видимо)...
Изображение

_________________
С уважением, Виталий Лещенко.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 22 сен 2006 17:02 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Это сложно попасть два раза в одно и тоже место, это видяхи зависит данная прецезионность.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 22 сен 2006 17:21 
Не в сети
Любитель
Аватара пользователя

Зарегистрирован: 07 апр 2006 23:21
Сообщения: 23
Откуда: Мозырь, Беларусь
До этого я сделал реализацию через RC
Отличия били лишь в том, что эти светлые пятна писовалить по другому... остальные этапы идентичны.
Раньше все работало... что здесь не так?

_________________
С уважением, Виталий Лещенко.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 25 сен 2006 14:27 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Что тут не так я тоже собразить не могу сходу. Могу только шейдерам по рекомендовать обратиться к Борескову. Но возможно подойдет и подход с исключениями, т.е. возвращаешься к тому что было, а потом поэтапно переходишь к тому что надо...

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 25 сен 2006 23:10 
Не в сети
Любитель
Аватара пользователя

Зарегистрирован: 07 апр 2006 23:21
Сообщения: 23
Откуда: Мозырь, Беларусь
Извиняюсь... был не прав!
Ошибку уже нашел... и исправил.
Дела в том, что из-за своей невнимательности я забыл включить текстуры...
почему в некоторых кадрах текстуры били? Я не знаю... это точно глюк...

А общем я сам был виноват...

_________________
С уважением, Виталий Лещенко.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 26 сен 2006 08:34 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Бывает

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB