![]() |
|
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]()
|
|
| 5kill |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 13.5.2011 Репутация: нет Всего: нет |
Добрый день.
Реализовал алгоритм Shadow Mapping'а, как мне казалось, успешно. Сделал все на работе, запустил, посмотрел, все, вроде, хорошо. Но принес домой, запустил на ноуте - полезли ошибки. Ошибка возникает в функции построения катры теней при вызове:
После длительного гугления, не нашел ни чего подходящего, решил попробовать запустить на стационарной машине, и, о чудо - все работает как часы! Еще одно интересное наблюдение сцена даже с выключенными тенями на ноуте выглядит криво. На ноуте: ![]() На стационарных машинах: ![]() Нормальной видяхе на ноуте нету. Отсюда вопрос: что такого использует эта, и, видимо, не только эта, команда что так зависит от конфигурации железа? И как это можно обойти, если можно? |
|||
|
||||
| Vetos |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 4.4.2005 Репутация: 3 Всего: 4 |
Посмотри какую версию OpenGL поддерживает видюха на ноуте, и какую на стационарном, это можно глянуть в эвересте(если хорошо поискать
-------------------- Строить нужно так, чтоб никто не сломал! А ломать, чтоб никто не знал 8) :ne_huliganit |
|||
|
||||
| 5kill |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 13.5.2011 Репутация: нет Всего: нет |
На ноуте Intel 945GM, который, если верить, Эвересту, поддерживает только 1.4.0 и на 66% 1.5.0
На стационарном HD4850, там все вплоть до 3.3 поддерживается. Вроде как 1.4 для всего что я использую должно хватать... Вот код инициализации:
Генерация карты теней:
Собственно рендеринг сцены:
В коде опущены некоторые стандартные вещи вроде настройки окна вывода, взгляда камеры и т.п. которые ну никак не могут влиять на такие вещи... isAmbientShadowAvailable установлено в false. Что именно не поддерживается версией 1.4 ума не приложу... |
||||||
|
|||||||
| Vetos |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 4.4.2005 Репутация: 3 Всего: 4 |
первая ссылка в гугле на glCopyTexImage2D ссылается на opengl.org. Вот немного интересного чо нашел
Значит дело не в версии ОГЛа, ошибка возникает из-за какогото из этих случаев. Вообщем вот тебе ссыла, там красивее выглядит, проверь, не получается ли у тебя какаято из этих ситуаций Все, все, все, я вкупил в чем дело, твои shadowSize слишком велики для этой видюхи. Т.е. тебе вначале нужно сделать чтот типо этого:
Я думаю после етих изменений все будет работать)))) Если заработает, можешь попробывать увеличить shadowSize еще на 2) Это сообщение отредактировал(а) Vetos - 27.5.2011, 17:39 -------------------- Строить нужно так, чтоб никто не сломал! А ломать, чтоб никто не знал 8) :ne_huliganit |
||||
|
|||||
| 5kill |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 13.5.2011 Репутация: нет Всего: нет |
Дело точно не в размере текстур.
Максимальный размер - 3379, у меня 600х600. В описании glCopyTexImage2D написано также что эти цифры д.б. 2^n+2*border, на что я не обращал внимания, поскольку все работало и без этого... Но на ноуте почему-то не хочет! Ставлю 512 или 1024 - все нормально(если не учитывать, что при 1024 текстура неверно накладывается на сцену), по крайней мере ошибки нет, а тени какие ни какие но есть. При этом странный эффект "двойного освещения" остается даже когда нету ошибок. Особенно видно на кубе. |
|||
|
||||
| Vetos |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 4.4.2005 Репутация: 3 Всего: 4 |
Гг, ну насчет артефактов ничего тебе нескажу, Intel есть Intel, что с него выжмешь
-------------------- Строить нужно так, чтоб никто не сломал! А ломать, чтоб никто не знал 8) :ne_huliganit |
|||
|
||||
| 5kill |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 13.5.2011 Репутация: нет Всего: нет |
Ладно с ними с артефактами...
Не понимаю я все-таки и саму текстуру карты теней... Размер окна вывода в экранных координатах - 600х600. Пускай мы берем текстуры как 2^n т.е. для моего ноута(максимальный размер текстуры 3379х3379, но максимальный ViewPort 2048x2048) мы можем взять 512х512 1024х1024 или 2048х2048. Все эти значения действительно отрабатывают, но, 512 дает достаточно "квадратные" тени, а дальше - хуже... Вот так выглядят карта теней и соответствующая ей сцена с тенями при размере текстуры 1024х1024 А вот так при 2048х2048 И все бы ничего если бы дело ограничилось моим неблагополучным ноутом, но на стационарной машине дела, хоть и лучше, но не принципиально... Слева 1024, справа 2048 Что так влияет на некорректное отображение текстуры? |
|||
|
||||
| Vetos |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 4.4.2005 Репутация: 3 Всего: 4 |
5kill, извини, так ничем не помогу. С# не юзал как и Tao framework, вот еслиб на чистом С++ и OGL, возможно это сам фреймворк дает такие бока?
-------------------- Строить нужно так, чтоб никто не сломал! А ломать, чтоб никто не знал 8) :ne_huliganit |
|||
|
||||
| 5kill |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 13.5.2011 Репутация: нет Всего: нет |
TAO тут врядли при чем, по сути я пользуюсь только стандартными методами.
Поэкспериментировал с параметрами(на машине, которая переваривает любые значения shadowSize); Когда shadowSize = размеру viewport'a все нормально, когда shadowSize становится больше - он, почему-то обрезается по размеру viewport'a, хотя при отрисовке карты теней я устанавливаю размер viewporta'a какраз равным shadowSize. И потом, при отображении на сцену получается только квадратная область с относительным размером viewport'a относительно shadowSize получается освещенной. Конкретнее... Вот это происходит при проецировании сцены в карту теней:
Почему при этом в карте "нормально" заполняется только участок размером с реальное окно вывода... |
|||
|
||||
| Vetos |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 4.4.2005 Репутация: 3 Всего: 4 |
1) Попробуй вначале задать вьюпорт, а потом уже перспективу и положение источника освещения, хотя в версии OGL 3.3 карта строится при ортогональной проэкции а не при перспективной, возможны бока и отсюда.
2) Попробуй рисовать детали с glCullFace(GL_FRONT);только вначале glEnable(GL_CULL_FACE). 3)
я так понял транслятом и скалей)) ты подгоняешь координаты из -1 1 к текстурным от 0 до 1? Жаль немогу поиграть с твоим исходником, тут каждая команда может влиять на результат, с версией ОГЛ 3.3 все работает через шейдера, так вот там матрица смещения bias получается так:
Скорей всего твои трансляты и скали подходят только в часном случае когда вьюпорт совпадает с размерами реального окна. Попробуй сделать через матрицу, или же попробуй смени glTranslated и glScaled на glTranslatef и glScalef, и соответственно
хотя я незнаю как там на C#, может и не надо добавлять f в конце дробных. Это сообщение отредактировал(а) Vetos - 31.5.2011, 13:21 -------------------- Строить нужно так, чтоб никто не сломал! А ломать, чтоб никто не знал 8) :ne_huliganit |
||||||
|
|||||||
| 5kill |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 13.5.2011 Репутация: нет Всего: нет |
1)Никакого эффекта это не дало
2)Пока не пробовал, но, судя по описанию, это не повлияет ни на что... 3)2 часа экпериментов показали возможность приведения картины к "почти нормальной", заменой фиксированных значений на зависящие от соотношения shadowSize и размеров окна:
это работает только при установке даже для карты теней
и то с артефактами. И, главное, что при таком подходе четкости у теней не прибавляется при увеличении размера текстуры(( т.е. мы просто растягиваем тот кусок текстуры который задействован на сцену, а его размеры остаются... как же запихнуть сцену во всю текстуру... Есть идея применить обратные преобразования перед тем как записывать текстуру, вместо того чтобы потом растягивать... вечером попробую, отпишусь. |
||||
|
|||||
| Vetos |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 4.4.2005 Репутация: 3 Всего: 4 |
а зря, в уроках OGL 3 об этом пишут как
а у тебя на сцене как раз такие объекты Видишь, я не работал с теневой картой в старой OGL - могу помочь только догадками, поэтому не суди строго, я всего лишь ПЫТАЮСЬ Могу поставить C#, и если ты скинешь исходник и все что надо к твоему проекту, шансов разобраться будет намного больше Это сообщение отредактировал(а) Vetos - 31.5.2011, 19:10 -------------------- Строить нужно так, чтоб никто не сломал! А ломать, чтоб никто не знал 8) :ne_huliganit |
||||
|
|||||
| 5kill |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 13.5.2011 Репутация: нет Всего: нет |
Спасибо большое за помощь!
К сожалению пока результаты не обнадеживающие( GlCullFace не помогло, только еще и стенки некоторые не отрисовываются, видимо из-за последовательности указания вершин полигона он считает их повернутыми к нам задом)) Отрисовка только объектов в карту теней тоже не спасает. Основная проблема в том что почему-то задействуется только часть текстуры размером 600х600. Т.е. увеличение размера текстуры приводит только к появлению черной кромки по правому и верхнему краю. Могу скинуть на почту исходник. |
|||
|
||||
| Vetos |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 4.4.2005 Репутация: 3 Всего: 4 |
Архив к сожалению битый, можешь еще раз скинуть, только на яндекс - [email protected]
Это сообщение отредактировал(а) Vetos - 1.6.2011, 16:43 -------------------- Строить нужно так, чтоб никто не сломал! А ломать, чтоб никто не знал 8) :ne_huliganit |
|||
|
||||
![]()
|
| Вы можете найти полезным что... | |
|
|
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |