我很長一段時間推遲了在我正在OpenTK中工作的一個項目中修復燈光。問題基本上是,當我旋轉相機,顯示在我所顯示的地形上的照明也旋轉。燈光正在被相機改變
這裏是我的onRenderFrame代碼片段:
protected override void OnRenderFrame(FrameEventArgs e)
{
base.OnRenderFrame(e);
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
float dist = (float)Math.Sin(Math.PI/3) * camZoom;
Matrix4 view = Matrix4.LookAt(new Vector3(-(float)Math.Cos(camRot) * dist, dist, -(float)Math.Sin(camRot) * dist) + camPos, camPos, new Vector3(0, 1, 0));
//Note: camPos isn't actually the position of the camera, rather the target of it. The actual camera position is calculated above.
GL.MatrixMode(MatrixMode.Modelview);
GL.LoadMatrix(ref view);
float tx = 50;
float ty = 20;
float tz = -15;
GL.Light(LightName.Light0, LightParameter.Position, new float[] { tx, ty, tz});
GL.Begin(BeginMode.Lines);
DrawBox(tx - 2, tx + 2, ty - 2, ty + 2, tz - 2, tz + 2);
GL.End();
...地形的繪畫是在這裏
我用我的快捷DrawBox函數來繪製周圍光線的位置,一個簡單的框。它工作正常,我甚至在地球周圍實施了一些運動,比如太陽。雖然相機還沒有移動,但這很好。但是一旦我轉動照相機,照明就不再顯示它應該具備的東西,它似乎已經「移動」了燈光,而沒有實際移動燈光(燈箱沒有移動,只有燈光效果)。