Всенаправленное освещение видящее препятствие

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

Модератор: Mikle

Саша_ОР
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 08.01.2006 (Вс) 19:48

Всенаправленное освещение видящее препятствие

Сообщение Саша_ОР » 15.10.2007 (Пн) 20:33

Здравствуйте всем. Модернизирую софтверный движок и обнаружил проблему, имеющую важное значение для красоты. У меня есть освещение, но оно не видит препятствия, т.е. не отбрасывается тень.
Вот его код:
Код: Выделить всё
Type VECTOR
  X As Single
  Y As Single
  Z As Single
End Type

Sub LightRenderList()
  Dim i As Long, j As Long, L As Long
  Dim koef As Single, d As Single
  Dim VDelta As VECTOR

  For i = 1 To PolyCount
    If RenderList(i).bCulled = False Then
      For j = 1 To 3
        For L = 1 To LightCount
          VDelta = VSub(RenderList(i).Base(j).Location, LightList(L).Location)
          d = VLen(VDelta)
                       
          koef = LightList(L).powerful / d 'мощность света / d
                         
          RenderList(i).Final(j).intensity.R = RenderList(i).Final(j).intensity.R + LightList(L).intensity.R * koef
          RenderList(i).Final(j).intensity.G = RenderList(i).Final(j).intensity.G + LightList(L).intensity.G * koef
          RenderList(i).Final(j).intensity.B = RenderList(i).Final(j).intensity.B + LightList(L).intensity.B * koef
        Next L
               
        If RenderList(i).Final(j).intensity.R > 256 Then RenderList(i).Final(j).intensity.R = 256
        If RenderList(i).Final(j).intensity.G > 256 Then RenderList(i).Final(j).intensity.G = 256
        If RenderList(i).Final(j).intensity.B > 256 Then RenderList(i).Final(j).intensity.B = 256
                       
      Next j
    End If
  Next i

End Sub

Function VLen(V As VECTOR) As Single
  VLen = Sqr(V.X * V.X + V.Y * V.Y + V.z * V.z)
End Function

Вопрос в том, как можно реализовать
динамическое всенаправленное освещение, видящее препядствие и отбрасывающее в результате этого тень. Только одно ограничение, т.к. движок софтверный, мне хочется, чтобы он им и остался, поэтому буду рад увидеть чистый код, математика и т.д. без библиотек и компонентов... Спасибо!

Ktulhu
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 14.07.2007 (Сб) 14:03
Откуда: Киев, Р'льех

Сообщение Ktulhu » 15.10.2007 (Пн) 20:41

Хм... На мысль приходит только трассировка лучей. Только это ооочень сильно ударит по производительности, тем болле софтварного двига

Саша_ОР
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 08.01.2006 (Вс) 19:48

Сообщение Саша_ОР » 15.10.2007 (Пн) 21:28

я месяц мучился над этой проблемой... уже думал и через z-buffer просматривать, какие полигоны будут освещены, и думал сделать тени через лучи, проходащими через вершины... но все это очень сложно и глючно... никак я не могу домыслить... если и есть примеры в интернете, то они на Си, что мне не подходит...

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

Сообщение Mikle » 16.10.2007 (Вт) 9:10

Саша_ОР
Попробуй сымитировать стенсил, или рендер теней в текстуру.


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

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

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

    TopList