Свет (spot light)

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

Модератор: Mikle

-=BADBOY=-
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 9
Зарегистрирован: 21.08.2007 (Вт) 7:26
Откуда: Барнаул

Свет (spot light)

Сообщение -=BADBOY=- » 21.08.2007 (Вт) 7:34

Вот такая проблемка создаю источник света D3DLIGHT_SPOT, а он ничего не освещает :(

Сама функция
Код: Выделить всё

' Добавление напраленного источника света
Public Function AddLightSpot(X As Single, Y As Single, Z As Single, Xto As Single, Yto As Single, Zto As Single, Theta As Integer, Phi As Integer, Range As Single, Optional Attenuation1 As Single = 0.005)

    ReDim Preserve Light(LightCount)

    With Light(LightCount)
        .Type = D3DLIGHT_SPOT ' Задает тип источника света
        .Position = CreateVector(X, Y, Z) ' Вектор, задающий местоположение источника света в пространстве
        .Ambient = CreateDXColorRGBA(1, 1, 1, 100)  ' Цвет фоновой составляющей испускаемого источником света
        .Direction = CreateVector(Xto, Yto, Zto)         ' Вектор, задающий направление, в котором распространяется свет
        .Falloff = 1#         ' Определяет как меняется интенсивность света в пространстве между внутренним и внешним конусами
        .Theta = Theta        ' Pадает угол внутреннего конуса в радианах
        .Phi = Phi            ' Pадает угол внешнего конуса в радианах
        .diffuse = .Ambient   ' Цвет рассеиваемой составляющей испускаемого источником света
        .specular = .Ambient  ' Цвет отражаемой составляющей испускаемого источником света
        .Range = Range        ' Максимальное расстояние, на которое может распространиться свет
        .Attenuation1 = Attenuation1
    End With

    D3Ddevice.SetLight LightCount, Light(LightCount)
    D3Ddevice.LightEnable LightCount, True
    LightCount = LightCount + 1

End Function


Вызов
Код: Выделить всё

xLight.AddLightSpot 0, 1, 0, 0, -10, 0, 0.5, 1, 50


Никаких изминений на картинке не наблюдаю :( , зоздаю источник света типа point или directional - свет хорошо виден.
Не подскажите в чём может быть дело или где у меня ошибка?
Зарание большое спасибо.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 21.08.2007 (Вт) 8:46

-=BADBOY=-
А геометрия (вертексы) содержит Diffuse? А TSS выставлены правильно?

-=BADBOY=-
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 9
Зарегистрирован: 21.08.2007 (Вт) 7:26
Откуда: Барнаул

Сообщение -=BADBOY=- » 21.08.2007 (Вт) 9:17

Mikle
Геометрия Diffuse содержит.
Единственное что менял связанное с TSS, всё остальное по умолчанию
Код: Выделить всё

    D3Ddevice.SetTextureStageState 0, D3DTSS_MAGFILTER, D3DTEXF_ANISOTROPIC
    D3Ddevice.SetTextureStageState 0, D3DTSS_MINFILTER, D3DTEXF_ANISOTROPIC
    D3Ddevice.SetTextureStageState 0, D3DTSS_MIPFILTER, D3DTEXF_ANISOTROPIC
    D3Ddevice.SetTextureStageState 0, D3DTSS_MAXANISOTROPY, 16

Другими типами света обьекты освечиваются без проблем

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 21.08.2007 (Вт) 13:22

Попробуй прописать Diffuse*Texture вручную.

-=BADBOY=-
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 9
Зарегистрирован: 21.08.2007 (Вт) 7:26
Откуда: Барнаул

Сообщение -=BADBOY=- » 22.08.2007 (Ср) 4:11

Mikle
Не хочу покозатся ламером... Но с 3D я работаю всего неделю так что не совсем точно предстовляю где и как это надо прописать. Подробней не обьесниш?

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 22.08.2007 (Ср) 20:59

-=BADBOY=- писал(а):Mikle
Не хочу покозатся ламером... Но с 3D я работаю всего неделю так что не совсем точно предстовляю где и как это надо прописать. Подробней не обьесниш?

.Direction надо задавать как Sin() или Cos() угла в радианах. Пределы [0-1]. Попробуй привязаться к углам обзора камеры, должно получиться.
Углы Phi, Theta в радианах! Phi [0 - 3.14], Theta [0 - Phi]. Исправь
Код: Выделить всё
Dim HorLookDegree As Single  ' горизонтальный угол обзора (0-360) в градусах
Dim VertLookDegree As Single ' вертикальный в угол (0-180) градусах
Dim Dx As Single, Dy as Single, Dz As Single

HorLookDegree = 0
VertLookDegree = 90
DX = Sin(HorLookDegree*3.14/180)
DY = Cos(VertLookDegree*3.14/180)
DZ = Cos(HorLookDegree*3.14/180)

xLight.AddLightSpot 0, 1, 0, Dx, Dy, Dz, 0, 0.78, 50

Public Function AddLightSpot(X As Single, Y As Single, Z As Single, Xto As Single, Yto As Single, Zto As Single, Theta As Single, Phi As Single, Range As Single, Optional Attenuation1 As Single = 0.005)
...
End Function
- Какой треугольник не подвластен законам геометрии?
- У которого все углы тупые!

-=BADBOY=-
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 9
Зарегистрирован: 21.08.2007 (Вт) 7:26
Откуда: Барнаул

Сообщение -=BADBOY=- » 24.08.2007 (Пт) 8:22

Yurich
Спасибо, но это не помогло.


Дело в матерьяле который освещается.
Подставил под свет голую не отекстурированную модель на ней свет виден, отекстурированные пол и стены не освещаются, зато теже пол и стены замечательно освещаются другими источниками света :(

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 24.08.2007 (Пт) 10:47

-=BADBOY=-
SetRenderState ...DiffuseMaterialSource попробуй поменять, если юзаешь материалы.

VladPro
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 15.10.2005 (Сб) 23:52

Сообщение VladPro » 24.08.2007 (Пт) 23:25

Пол и стены освещаются, причём текстурирование дела не меняет.

Я делал такой "фонарик". Когда наводил его на модель (Tiny) отлично видел круг света. Когда на стены - только слабые отблески. Попробуй посветить в углы - заметишь. Как рассчитывается освещение? По нормалям. Думаю (поправьте, если ошибаюсь) что берётся среднее значение между соседними нормалями. Поэтому если нормалей по 3 на треугольник, а стена состоит из двух треугольников - круга света не увидишь. Попробуй сделать треугольников побольше.

-=BADBOY=-
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 9
Зарегистрирован: 21.08.2007 (Вт) 7:26
Откуда: Барнаул

Сообщение -=BADBOY=- » 28.08.2007 (Вт) 4:12

VladPro

СПАСИБО!!! Действительно увиличел каличество полигонов для пола и свет стал виден :)

K0GG
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 20
Зарегистрирован: 28.02.2011 (Пн) 14:26
Откуда: Москва

Re: Свет (spot light)

Сообщение K0GG » 11.03.2011 (Пт) 14:23

Привет.
По поводу SPOT света.
Из форума я не понял какой параметр SetRenderState ...DiffuseMaterialSource
ты поставил, чтобы тектуры стали видны?
Полный пример сохранился? Если да - выложи пожалуйста.
K0GG
"Omnia ab uno et in unum omnia"
_____
http://gorkavchukkg.narod.ru

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Свет (spot light)

Сообщение longwair » 11.03.2011 (Пт) 17:32

Я делаю так
Код: Выделить всё
Public Sub InitLight()
Dim Light1 As D3DLIGHT8
Dim Col1 As D3DCOLORVALUE
With Col1
.r = 1
.g = 1
.b = 1
End With
With Light1
.Type = D3DLIGHT_SPOT
.diffuse = Col1
.specular = Col1
.Ambient = Col1
.Position = vec3(0, 15, 0)  'Позиция источника
.Direction = vec3(0, 15, 50) 'Направление источника
.Range = 80    'Максимум куда светит свет
.Attenuation0 = 5 'Ну типо яркость
.Theta = 0.2
.Phi = 0.5
End With


Остальное смотри в проекте. Да и кстати, чем больше в меше полигонов тем качественней пятно света.
У вас нет доступа для просмотра вложений в этом сообщении.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

K0GG
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 20
Зарегистрирован: 28.02.2011 (Пн) 14:26
Откуда: Москва

Re: Свет (spot light)

Сообщение K0GG » 13.03.2011 (Вс) 15:16

Спасибо longwair. :)
K0GG
"Omnia ab uno et in unum omnia"
_____
http://gorkavchukkg.narod.ru


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

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

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

    TopList  
cron