2012-02-21 4 views
0

Прошу прощения, потому что это кажется довольно простой проблемой, которая должна быть очевидной, но кажется, что я не знаю.OpenGL Освещение и позиционирование

Я пишу двигатель и использую Light 0 как «солнце» для сцены. Я полагаю, что в идеале солнце будет фиксированным источником света, а не вектором, поэтому w/4th индекс в векторе положения должен быть 1.0f.

Я устанавливаю точку зрения Орто-сцены, затем устанавливаю свет в положение персонажа (x/y - координаты плоскости местности, с положительным z, обращенным к камере, и указывающим «высота» на местности - - сцена также повернута для изометрического обзора по оси x).

Символ всегда находится в центре экрана - но я заметил, что по какой-то причине свет, кажется, светит в положении между символом и координатами мира 0,0,0. Чем дальше персонаж получает от мировых координат 0,0,0, тем больше/шире свет. Если символ составляет 0,0,0, свет очень мал. Если персонаж перемещается на что-то вроде 0,200,0, свет ОГРОМНЫЙ.

Я просто пытаюсь намочить ноги и иметь «свет», который следует за персонажем (а затем отрегулировать положение и т. Д., Позже, чтобы создать солнце).

 Graphics.BeginRenderingLayer(); 
     { 
      Video.MapRenderingMode(); 

      Graphics.BeginLightingLayer(Graphics.AmbientR, Graphics.AmbientG, Graphics.AmbientB, Graphics.DiffuseR, Graphics.DiffuseG, Graphics.DiffuseB, pCenter.X, pCenter.Y, pCenter.Z); 
      { 
       Graphics.BeginRenderingLayer(); 
       { 
        Graphics.CenterCamera(pCenter.X, pCenter.Y, pCenter.Z); 
        RenderMap(pWorld, pCenter, pCoordinate); 
       } 
       Graphics.EndRenderingLayer(); 

       Graphics.BeginRenderingLayer(); 
       { 
        Graphics.DrawMan(pCenter); 
       } 
       Graphics.EndRenderingLayer(); 
      } 
      Graphics.EndLightingLayer(); 
     } 
     Graphics.EndRenderingLayer(); 

Graphics.BeginRenderingLayer = PushMatrix, EndRenderingLayer = PopMatrix Video.MapRenderingMode = Орто Проекционное и сцены Вращение/Увеличение CenterCamera делает перевод на противоположной стороне X/Y/Z, таким образом, что символ теперь с центром в X/Y/Z в середине экрана.

Любые мысли? Может быть, я немного смутил часть моего кода?

+0

Обычно солнце определяется как направленный свет. – Luca

ответ

0

Я полагаю, что в идеале солнце будет фиксированным источником света, а не вектором, поэтому индекс w/4th в векторе положения должен быть 1.0f.

Что касается всего происходящего в основных человеческих масштабах, Солнце бесконечно далеко. Это в значительной степени окончательный «направленный свет». Поэтому, если вы не отдаете сотни или тысячи миль, различия в направлении солнечного света будут совершенно неуместны.

Вкратце: вы должны использовать направленный свет, как и все остальные.

+0

Говоря это, у меня все еще есть проблемы с позиционированием света (извините, нажмите enter и ожидайте написать еще одну строку, так что извините, если вы уже ответили). Если я делаю направленный свет, свет по-прежнему не перемещается из координаты 0,0,0. т.е. если я установил свет на левую сторону (обращенный к западу), свет будет около 0,0,0, а левая сторона будет «яркой», а правая сторона 0,0,0 начнет темнеть , Есть ли способ сделать так, чтобы позиционный свет следовал за переводом, который у меня есть? Я полагаю, что свет должен быть «вызван» перед сценой рендеринга, верно? – Locke

Смежные вопросы