Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Xors3D

Xors3D Графический движок с поддержкой DirectX9

Ответ
 
Опции темы
Старый 19.11.2011, 01:41   #31
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Нубошоу по шейдерам.

Вот так я в хорсе пытаюсь передать в шейдер матрицу от камеры с которой отрисована текстура с расстоянием от света до поверхности.

xSetEffectMatrix(entity,"v_proj",xGetViewProjMatri x(shadecam),0);

в шейдере я добавил:

В выходных данных вершинного
float2 shtexcoors : TEXCOORD4;

а матрица:
float4x4 v_proj;

потом я записываю их так в вершинном

float4 pos=mul(input.position, v_proj);
output.shtexcoors = float2((pos.x/pos.w+1)/2,(pos.y/pos.w-1)/2);

и наконец в пиксельном:
float4 shade=tex2D(shadeSampler,input.shtexcoors*0.25);
float4 color=0.75*shade+0.25*(diffuse * lit * lightColor+diffuse*ambient);
return color;

Я как бы добавляю 75% к обычному цвету от спроецированной текстуры.

Но оно мне рисует на всей поверхности только одну точку из текстуры.
Хотя когда я использую передаваемую хорсом матрицу все происходит как надо.
float4 pos=mul(input.position, matrixWorldViewProj);

Как мне передать из хорса в шейдер matrixWorldViewProj другой камеры?
(Offline)
 
Ответить с цитированием
Старый 19.11.2011, 02:36   #32
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Нубошоу по шейдерам.

xSetEffectMatrix(entity,"v_proj",xGetViewProjMatri x(shadecam),0);
каждый кадр вызываешь, надеюсь?
(Offline)
 
Ответить с цитированием
Старый 19.11.2011, 03:07   #33
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Нубошоу по шейдерам.

Да.
На глаз получается, что текстурные координаты не зависят от позиции пикселя, я так понимаю это от того, что вместо матрицы из хорса пришло ничто, нули и поэтому выбирается только одна точка. Т.е. косяк скорей всего в моем коде внутри хорса, но как правильно это сделать я не знаю.
(Offline)
 
Ответить с цитированием
Старый 19.11.2011, 03:42   #34
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Нубошоу по шейдерам.

хз, я юзал xGetViewProjMatrix чтобы проецировать декали из камер, так что в ксорсе в этом плане всё должно быть ок.
--
а, хотя нет.
я юзал
castermatrix=xGetProjectionMatrix(castercamera)
castermatrix2=xGetViewMatrix(castercamera)
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
dsd (19.11.2011)
Старый 25.08.2012, 16:25   #35
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Нубошоу по шейдерам.

Захотелось мне свой бамп сочинить.

Вот есть у меня нормаль. И есть нормаль из нормалмапы
vec3 norm = normalize(texture2D(texture1,fragmentuv).xyz*2-1.0);
Как мне сбацать из нормали матрицу поворота на которую умножить надо нормаль из нормалмапы?
(Offline)
 
Ответить с цитированием
Старый 25.08.2012, 17:20   #36
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Нубошоу по шейдерам.

Как мне сбацать из нормали матрицу поворота
нормально никак, для этого препросчитывают ещё две оси (tangent, binormal) в зависимости от UV и всякой шняги. если у тебя какая-нибудь плоскость воды, то можно легко сочинить эти оси, а на произвольном меше только препросчёт.
ну есть бомжарский способ через ddx/ddy, но качество будет страдать.
(Offline)
 
Ответить с цитированием
Старый 25.08.2012, 17:20   #37
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Нубошоу по шейдерам.

зачем?
если у тебя нормалкарта в объектспейсе, то просто бери значение нормали из нее.

если у тебя нормалкарта в тангентспейсе, то тебе нужно перевести источник света в тангент спейс как то так:
"vec3 n = normalize(normalmatrix * normal);\n"
"vec3 t = normalize(normalmatrix * tangent);\n"
"vec3 b = cross(n, t);\n"

"vec3 vVertex = vec3(model * vec4(position,1));\n"
"vec3 tmpVec = lightpos - vVertex;\n"

"lightVec.x = dot(tmpVec, t);\n"
"lightVec.y = dot(tmpVec, b);\n"
"lightVec.z = dot(tmpVec, n);\n"
ну есть бомжарский способ через ddx/ddy, но качество будет страдать.
а можно поподробнее?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
dsd (25.08.2012)
Старый 25.08.2012, 17:23   #38
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Нубошоу по шейдерам.

если у тебя нормалкарта в тангентспейсе, то тебе нужно перевести источник света в тангент спейс как то так:
необяз, можно и тангент-нормалмапу переводить в обжектспейс, а потом применять N лайтов и прочие эффекты в обычном интуитивном обжектспейсе. я так делаю, но тут уж кому как нравится.

--
а можно поподробнее?
ddx/ddy позволяют примерно узнать, насколько изменится переменная на экране на следующем пикселе по x/y.
для нормали результат может выглядеть так: http://www.gamedev.net/topic/599518-directx-ddxddy/
ну и собсно это можно юзать в некоторых случаях в качве TBN, имея только N, но гранёность будет.

есть на основе этого ещё более хитрозавёрнутый метод бампа через одноканальную карту высот и без TBN и без гранёности (но вблизи артефактово или медленно это фиксить):
http://jbit.net/~sparky/sfgrad_bump/mm_sfgrad_bump.pdf
http://www.rorydriscoll.com/2012/01/11/derivative-maps/
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо Mr_F_ за это полезное сообщение:
dsd (25.08.2012), HolyDel (25.08.2012), St_AnGer (25.08.2012)
Старый 25.08.2012, 18:47   #39
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Нубошоу по шейдерам.

Хочу на свой меш ландшафта бамп и потом тесселяцию со смещением по картам сделать. Так что кроме нормали и текстурных координат у меня нет ничего и вообще слов то таких про тангентспейс я не знаю )

Но ведь нормаль можно смотреть как
(cos кИкс * sin кЗед; соs кИгрек * sin кЗед; cos кЗед)
А карта у меня сделана для отклонения нормали (0,1,0) вот я и считал что
можно из нормали организовать матрицу поворота ибо вроде косинусы с синусами туда нужны, а их есть у меня.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 06:31.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com