| PMG http://forum.pmg.org.ru/ |
|
| Помогите разобраться с GL_ARB_shader_objects http://forum.pmg.org.ru/viewtopic.php?f=1&t=756 |
Страница 1 из 1 |
| Автор: | Виталий Лещенко [ 21 сен 2006 20:27 ] |
| Заголовок сообщения: | Помогите разобраться с GL_ARB_shader_objects |
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 ] |
| Заголовок сообщения: | |
Спасибо... с этим вопрособ я уже сам разобрался... |
|
| Автор: | Виталий Лещенко [ 21 сен 2006 23:49 ] |
| Заголовок сообщения: | |
Еще вопрос: Так же с посощью 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-буфера (видимо)...
|
|
| Автор: | MagicWolf [ 22 сен 2006 17:02 ] |
| Заголовок сообщения: | |
Это сложно попасть два раза в одно и тоже место, это видяхи зависит данная прецезионность. |
|
| Автор: | Виталий Лещенко [ 22 сен 2006 17:21 ] |
| Заголовок сообщения: | |
До этого я сделал реализацию через RC Отличия били лишь в том, что эти светлые пятна писовалить по другому... остальные этапы идентичны. Раньше все работало... что здесь не так? |
|
| Автор: | MagicWolf [ 25 сен 2006 14:27 ] |
| Заголовок сообщения: | |
Что тут не так я тоже собразить не могу сходу. Могу только шейдерам по рекомендовать обратиться к Борескову. Но возможно подойдет и подход с исключениями, т.е. возвращаешься к тому что было, а потом поэтапно переходишь к тому что надо... |
|
| Автор: | Виталий Лещенко [ 25 сен 2006 23:10 ] |
| Заголовок сообщения: | |
Извиняюсь... был не прав! Ошибку уже нашел... и исправил. Дела в том, что из-за своей невнимательности я забыл включить текстуры... почему в некоторых кадрах текстуры били? Я не знаю... это точно глюк... А общем я сам был виноват... |
|
| Автор: | MagicWolf [ 26 сен 2006 08:34 ] |
| Заголовок сообщения: | |
Бывает |
|
| Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|