HELP: Directional light

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

AiLEX
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 18.09.2005 (Вс) 11:44
Откуда: Котлас

HELP: Directional light

Сообщение AiLEX » 01.01.2006 (Вс) 18:28

Объясните пожалуйста - в чем проблема? Есть 3D объект, и направленный свет. Координаты источника света 5,5,5 а направления 10,10,10. Объект почему-то освещается совершенно наоборот. Пишу так:

Sub InitLight(lgt As D3DLIGHT8, ltype As CONST_D3DLIGHTTYPE, x As Single, y As Single, z As Single)
lgt.Type = ltype
lgt.diffuse = ColorValue4(1, 1, 1, 1)
lgt.Attenuation1 = 1
lgt.Attenuation0 = 0
lgt.Attenuation2 = 0
lgt.Range = 300
lgt.Direction.x = x + 5
lgt.Direction.y = y + 5
lgt.Direction.z = z + 5
lgt.Position.x = x
lgt.Position.y = y
lgt.Position.z = z
End Sub

Sub Render()

...

Dim lght As D3DLIGHT8
InitLight lght, D3DLIGHT_DIRECTIONAL, 5, 5, 5
D3DDevice.SetLight 0, lght
D3DDevice.LightEnable 0, 1

...

End Sub

Объект находится в точке 0,0,0
У вас нет доступа для просмотра вложений в этом сообщении.

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 01.01.2006 (Вс) 19:30

направление источника - нормализованный вектор, то есть его длинна должна быть равна единице.

то есть такая форма записи недопустима:
lgt.Direction.x = x + 5
lgt.Direction.y = y + 5
lgt.Direction.z = z + 5

ни одна из переменных не может быть больше единицы.

Если ты x,z поставишь равным 0, а y равным -1 то свет будет идти сверзху вниз, если у = 1 то снизу вверх.

В направленном источнике освещения вектор позиции не используется.
ХЎ

AiLEX
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 18.09.2005 (Вс) 11:44
Откуда: Котлас

Сообщение AiLEX » 01.01.2006 (Вс) 20:37

Спасибо за быстрый ответ.

Фишка в том, что в SDK именно так и написано (в примере SkinnedMesh):
lgt.Direction.x = x
lgt.Direction.y = y
lgt.Direction.z = z
Это правильно? Или это написанно только для данного примера.

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 02.01.2006 (Пн) 1:21

Незнаю попробуй так:

lgt.Direction = vec3(x - 1,y,z - 1)
где x,y,z позиция источника!
#define ROFL 0xDDDD

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 02.01.2006 (Пн) 1:23

Вообще это пример, можешь менять... :wink: :lol:
#define ROFL 0xDDDD

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 02.01.2006 (Пн) 3:45

DirectXManiac писал(а):Незнаю попробуй так:

lgt.Direction = vec3(x - 1,y,z - 1)
где x,y,z позиция источника!


что за бред?? Если не можешь дать толкового ответа, то лучше вообще молчи.

lgt.Direction - это направление света; с позицией он ничего общего не имеет. у направленного источника освещения вообще НЕТ НИКАКОЙ ПОЗИЦИИ, есть только направление, смотрите SDK, млин.
ХЎ

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 03.01.2006 (Вт) 1:17

ЁЁЁППППП..... Сорри!!!
Я перепутал!!!!!
Надо просто
lgt.Direction = vec3(-1,0,-1). Типа этого!
#define ROFL 0xDDDD


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21

    TopList