Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2008.01.13;
Скачать: [xml.tar.bz2];

Вниз

Проективные тени   Найти похожие ветки 

 
Зм1й ©   (2006-12-03 18:03) [0]

Здравствуйте. Вот, пытаюсь сделать projective shadow maps. Рисую в текстуру объект чёрным цветом на белом фоне с позиции источника света. Затем накладываю полученную текстуру на другой объект при автоматическом расчёте координат. Вот что получается: http://zmiy-data.narod.ru/Incorrect_shadow.jpg . Параметры текстуры:

const
PlaneS: Array [0..3] of Single = (1, 0, 0, 0);
PlaneT: Array [0..3] of Single = (0, 1, 0, 0);
PlaneR: Array [0..3] of Single = (0, 0, 1, 0);
PlaneQ: Array [0..3] of Single = (0, 0, 0, 1);
GL_CLAMP_TO_EDGE = $812F;
...
 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
 glEnable(GL_TEXTURE_GEN_S);
 glEnable(GL_TEXTURE_GEN_T);
 glEnable(GL_TEXTURE_GEN_R);
 glEnable(GL_TEXTURE_GEN_Q);
 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
 glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
 glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
 glTexGeni(GL_Q, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
 glTexGenfv(GL_S, GL_EYE_PLANE, @PlaneS);
 glTexGenfv(GL_T, GL_EYE_PLANE, @PlaneT);
 glTexGenfv(GL_R, GL_EYE_PLANE, @PlaneR);
 glTexGenfv(GL_Q, GL_EYE_PLANE, @PlaneQ);
 glMatrixMode(GL_TEXTURE);
 glLoadIdentity;
 glTranslatef(0.5, 0.5, 0);
 glScalef(0.5, 0.5, 1);
 // Установка проекции и вида камеры
 glMatrixMode(GL_MODELVIEW);  
 glTexImage2D(GL_TEXTURE_2D, 0, 3, 128, 128, 0, GL_RGB, GL_UNSIGNED_BYTE, @ShadowArr);


Скажите, пожалуйста, как нормально наложить текстуру.


 
Sapersky   (2006-12-05 15:43) [1]

http://www.paulsprojects.net/tutorials/smt/smt.html


 
Зм1й ©   (2006-12-05 19:18) [2]


> Sapersky   (05.12.06 15:43) [1]
> http://www.paulsprojects.net/tutorials/smt/smt.html

Но здесь используются теневые буферы, я же их не использую, а рисую лишь силуэт одного объекта в обычную текстуру, что бы потом наложить её на другой объект. То есть я не хочу получить самозатенение объектов, и я не использую никаких расширений OpenGL. Вот тут-то и появляется моя проблема...


 
Sapersky   (2006-12-06 13:53) [3]

Ну пардон, я сам, честно говоря, в этот документ не особо вчитывался.

По картинке, кстати, не очень понятно в чём проблема. То ли в том, что тень рисуется не только на кубе, но и на плоскости - но там её, на самом деле, должна перекрыть тень куба, так что сам виноват, что его не учитываешь.
То ли, судя по отсвечивающему в глаз блику, в неправильном направлении тени. По этому поводу должно быть в соотв. документе, т.к. определение направления у всех родственных методов затенения (с исп. текстуры), скорее всего, делается одинаково. Хотя могу и ошибаться - в тенях разбираюсь слабо.
Ещё ссылка:
http://www.devmaster.net/articles/shadows/
- там расписаны все методы.
Charles Bloom тоже что-то писал по поводу теней:
http://www.cbloom.com/3d/index.html


 
Зм1й ©   (2006-12-06 19:08) [4]

При использовании "теневых буферов" строилась бы тень от куба на плоскость, и она действительно закрывала бы тень от сферы. Но дело в том, что в моём случае тень от куба строиться не должна. Сфера - это один объект, а куб и плоскость - другой. Тень падает только с одного объекта на другой без самозатенения. На сайте gamedev.ru есть статья про использование буферов (http://gamedev.ru/articles/?id=20121), и в постскриптуме написано, что есть ещё способ, который я и пытаюсь использовать, однако про мою проблему там ничего не написано. В обоих документах тоже. Но должа же она как-то решаться, ведь к примеру в hl2 от объектов падают именно такие тени! Я думаю, может дело заключается в установках GL_TEXTURE_WRAP? Я пробовал GL_CLIP, GL_CLIP_TO_EDGE - один результат; GL_CLIP_TO_BORDER вообще не работает. :(
 То, что тень падает не из точки, в которой находится "реальный" источник света - это конечно так, я потом сделаю по-нормальному.


 
Sapersky   (2006-12-07 16:53) [5]

В статье на DevMaster есть в том числе и Projected Shadows. Все параметры (GL_TEXTURE_WRAP и прочее) расписаны. Хотя сам на работоспособность этот пример не проверял.


 
Зм1й ©   (2006-12-07 18:07) [6]

Я разумеется смотрел статью, у меня параметры такие же. Но это работает, когда тень падает на плоскость (как на рисунке в статье), а не на сложные объекты.


 
Sapersky   (2006-12-07 20:30) [7]

Посмотрел ещё раз картинку... мне кажется, нормальные это побочные эффекты. Метод простой, да, но тупой - таких тонкостей как задняя/передняя грань, что чем закрыто - вполне может не учитывать. На 100% не уверен, уточни на gamedev или ещё где.
hl2 я видел мельком, тени толком не разглядывал. Но судя по
http://en.wikipedia.org/wiki/Source_engine#Future_technologies
система затенения там довольно простая. В частности вот это:
"Dynamic shadows in a map always come from the same predetermined direction". Т.е. источник света, от которого тень, для каждой сцены фиксирован.
Напрашивается некая заранее просчитанная "маска", что ли, которая будет отсекать задние грани и перекрытые другими поверхности.



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2008.01.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.007 c
2-1197447060
Washington
2007-12-12 11:11
2008.01.13
Сглаживание


15-1197193761
Стас0818
2007-12-09 12:49
2008.01.13
математические библиотеки для Delphi


15-1197276822
ArtemESC
2007-12-10 11:53
2008.01.13
А вы ели когда-нибудь насекомых?


2-1197534498
phantom
2007-12-13 11:28
2008.01.13
Многопоточность в CGI


4-1181578038
Тохер
2007-06-11 20:07
2008.01.13
Как получить картинку с USB фотокамеры.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский