Я прошу прощения, потому что это кажется довольно простой проблемой, которая должна быть очевидной, но кажется, что я не в курсе.
Я пишу движок и использую Light 0 как "солнце" для сцены. Я считаю, в идеале, солнце будет постоянным источником света, а не вектором, поэтому w / четвертый индекс в векторе положения должен быть 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 в середине экрана.
Есть мысли? Может быть, я немного запутал здесь свой код?