HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- XashXT (https://hlfx.ru/forum/forumdisplay.php?forumid=30)
-- XashXT/3D [Вопросы и ответы] (https://hlfx.ru/forum/showthread.php?threadid=3689)
Отправлено Aynekko 22-12-2021 в 20:21:
Цитата:
ncuxonaT писал:
переводи всё в мировое пространство
Ох если бы я знал как это сделать
почему и стал тогда из паранои копипастить.__________________
Мой мод на Xash
Отправлено Дядя Миша 22-12-2021 в 20:22:
ncuxonaT ты сам пробовал так бороться или только другим советуешь?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Aynekko 23-12-2021 в 10:49:
Я нашел способ как вращать шадоумапу для точечного источника. Но это просто тест и ничего более, как попытка определить, где хотя бы нужно изменять.
Оригинал
C++ Source Code:
ShadowOmni(-var_LightVec, u_ShadowParams); |
Я попробовал повернуть вектор. Нашел формулу, правда она для 2д (для 3д матрицы что ли надо юзать?) и поигрался с числами:
C++ Source Code:
1 | vec3 ang = u_MeshAngles; |
2 | float xx = u_test; // gl_test консольное значение |
3 | vec3 rot = vec3( -var_LightVec.x*cos(-ang.y + xx) + var_LightVec.y * sin(-ang.y+xx), -var_LightVec.x*sin(-ang.y + xx) - var_LightVec.y*cos(-ang.y + xx), var_LightVec.z); |
4 | shadow = ShadowOmni( -rot, u_ShadowParams); |
Повторюсь, это просто тест и попытка повернуть вектор хотя бы в 2д. Выяснилось, что при определенных значениях gl_test шадоумапа ложится идеально на конкретную модель (которая повернута). Только почему идет прибавка к углу angles я пока не понимаю.
TL: DR нужно в shadowomni повернуть вектор var_LightVec в зависимости от angles модели. Вот только как это сделать я пока не разобрался. Есть идеи у кого-нибудь?
Добавлено 23-12-2021 в 13:49:
Нашел прямую зависимость. Горизонтальный поворот шадоумапы для всех моделей адекватный. Остался вертикальный.
C++ Source Code:
1 | vec3 ang = u_MeshAngles; |
2 | vec3 rot = vec3( -var_LightVec.x*cos(ang.y * 0.0175 + M_PI) + var_LightVec.y * sin(ang.y * 0.0175 + M_PI), -var_LightVec.x*sin(ang.y * 0.0175 + M_PI) - var_LightVec.y*cos(ang.y * 0.0175 + M_PI), var_LightVec.z); |
4 | shadow = ShadowOmni( -rot, u_ShadowParams); |
Вот чую, уже совсем близко подобрался...__________________
Мой мод на Xash
Отправлено FiEctro 23-12-2021 в 11:08:
А в чём прикол теней и света в локальном пространстве, зачем оно вообще используется?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено Дядя Миша 23-12-2021 в 12:56:
Цитата:
FiEctro писал:
А в чём прикол теней и света в локальном пространстве, зачем оно вообще используется?
Вот это я и пытаюсь воспомнить.
Добавлено 23-12-2021 в 15:56:
Скорее всего это как-то связано с хромом.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Aynekko 23-12-2021 в 18:58:
Продолжение эпопеи с тенями 
Вот то что выше писал, переписал как матрицу, уже начинаю что-то подозревать. Это в шейдере.
C++ Source Code:
1 | vec3 ang = u_MeshAngles; |
4 | m[0][0] = -var_LightVec.x*cos(ang.y * 0.0175 + M_PI); |
5 | m[1][0] = var_LightVec.y * sin(ang.y * 0.0175 + M_PI); |
7 | m[0][1] = -var_LightVec.x*sin(ang.y * 0.0175 + M_PI); |
8 | m[1][1] = -var_LightVec.y*cos(ang.y * 0.0175 + M_PI); |
12 | m[2][2] = var_LightVec.z; |
14 | vec3 ShadowVec = m * vec3(1.0); |
16 | shadow = ShadowOmni( -ShadowVec, u_ShadowParams); |
Как результат, тени ложатся всегда идеально на модели в горизонтальном повороте. А вот дальше я пока не совсем понимаю. Сейчас я сделал поворот шадоумапы по одной из осей. Мне нужно получается сделать еще 2 матрицы, а в конце записать так:
vec3 ShadowVec = m * m1 * m2 * vec3(1.0);
Я хоть на правильном пути? Подскажите.
Добавлено 23-12-2021 в 21:58:
Так, вот сделал все 3 матрицы. Для каждой из осей.
Та первая, вот еще две.
C++ Source Code:
2 | m2[0][0] = -var_LightVec.x*cos(ang.x * 0.0175 + M_PI); |
4 | m2[2][0] = -var_LightVec.z * sin(ang.x * 0.0175 + M_PI); |
6 | m2[1][1] = var_LightVec.y; |
8 | m2[0][2] = var_LightVec.x * sin(ang.x * 0.0175 + M_PI); |
10 | m2[2][2] = -var_LightVec.z * cos(ang.x * 0.0175 + M_PI); |
13 | m3[0][0] = var_LightVec.x; |
17 | m3[1][1] = -var_LightVec.y * cos(ang.z * 0.0175 + M_PI); |
18 | m3[2][1] = var_LightVec.z * sin(ang.z * 0.0175 + M_PI); |
20 | m3[1][2] = -var_LightVec.y * sin(ang.z * 0.0175 + M_PI); |
21 | m3[2][2] = -var_LightVec.z * cos(ang.z * 0.0175 + M_PI); |
Ну и финальный аккорд. Как их соединить?!
m * m2 * m3 * vec3(1.0) к сожалению не сработало 
P.S. Все матрицы проверил. Если задать вектор как матрица * vec3(1.0) то тень ложится как надо на модель, повернутую в этой оси.__________________
Мой мод на Xash
Отправлено Дядя Миша 24-12-2021 в 07:17:
Aynekko перестань тратить время на ерунду 
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Aynekko 24-12-2021 в 08:03:
Цитата:
Дядя Миша писал:
Aynekko перестань тратить время на ерунду
Знаю. Но уж очень интересно. Я уже почти дошел.
http://aynekko.pw/temp/test3.jpg
Я вчера ошибся в том, что каждую матрицу считал из изначального вектора. А надо было брать вектор, посчитанный предыдущей матрицей. Но есть проблема - модель может быть повернута только в одной плоскости, чтобы тень не съезжала. Кажется, я был прав, что для омни-теней нужно повернуть var_lightvec и загнать его в shadow.__________________
Мой мод на Xash
Отправлено Crystallize 24-12-2021 в 08:04:
Цитата:
Дядя Миша писал:
Скорее всего это как-то связано с хромом.
На брашах?
Отправлено Дядя Миша 24-12-2021 в 08:18:
Цитата:
Aynekko писал:
Знаю. Но уж очень интересно. Я уже почти дошел.
У нас был один чудик, он три года углы Эйлера складывал. И ему тоже всё время казалось, что он "почти дошёл".
Цитата:
Crystallize писал:
На брашах?
на моделях__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Aynekko 24-12-2021 в 08:22:
Цитата:
Дядя Миша писал:
У нас был один чудик, он три года углы Эйлера складывал.
Я так и знал, что ты его упомянешь. 
__________________
Мой мод на Xash
Отправлено Дядя Миша 24-12-2021 в 09:46:
Если ты понимаешь что делаешь - ты и знаешь, что ты получишь.
Если не понимаешь - у тебя миллионы вариантов перебора. Жизни не хватит.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Aynekko 24-12-2021 в 10:01:
Ну что, все пофикшено. Оказалось, нужно было просто матрицы записать в обратном порядке. Наконец-то проблема со светотенью полностью разрешилась. Правильно или нет - у меня уже нет ни сил, ни желания притрагиваться. Несколько месяцев попыток прошли не зря. Однако ж, без Дяди Миши и советом про матрицу с обратным скейлом я бы еще долго сидел.
__________________
Мой мод на Xash
Отправлено Дядя Миша 24-12-2021 в 10:51:
Ну вообщем вернул обратно всё в мировое пространство?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Aynekko 24-12-2021 в 10:54:
Получается так? Но я сделал это в шейдере. Сделал копию var_LightVec перед тенями и повернул его в зависимости от angles модели. Я долго делал то же самое в коде, но почему-то ничего не получалось. Почем и решил взять уже вектор, который был трансформирован в вертексном шейдере. Не прогадал однакось!
__________________
Мой мод на Xash