Lichter, die nicht leuchten
-
Servus,
eine kurze Frage: Unten befindet sich ein kurzer Quelltext, auf das wesentliche gekürzt und mein mein Problem ist nun, dass bei Aktivierung der Belichtung nur ein schwarzer Bildschirm angezeigt wird. Deaktiviere ich das Licht über Lighting = false, wird alles optimal angezeigt.
Habe jetzt diverse Foren und Tutorials durchgearbeitet, nur sehe ich das Problem nicht. Für jede Hilfestellung wäre ich sehr dankbar.
Benötige ich für eine Beleuchtung Normalenvektoren, oder sind diese nur für ein einwandfreies Gouroud-Shading nötig?Gruße,
das 2. LichtkindPresentParameters oPresentParameter = new PresentParameters(); oPresentParameter.Windowed = true; oPresentParameter.SwapEffect = SwapEffect.Copy; oPresentParameter.DeviceWindow = oForm; oPresentParameter.EnableAutoDepthStencil = true; // Turn on a Depth stencil oPresentParameter.AutoDepthStencilFormat = DepthFormat.D16; // And the stencil format oPresentParameter.PresentationInterval = PresentInterval.One; // Creates device m_oDevice = new Device(0, DeviceType.Hardware, oForm, CreateFlags.SoftwareVertexProcessing, oPresentParameter ); oDevice.RenderState.CullMode = Cull.None; oDevice.RenderState.Lighting = true; oDevice.RenderState.ZBufferEnable = true; m_oMapBuffer = new VertexBuffer ( typeof ( CustomVertex.PositionColored, m_oOlkgame.Map.GetArea() * 6, oDevice, Usage.WriteOnly, CustomVertex.PositionColored.Format, Pool.Default ); ....................... //////////////////////////////////////// GraphicsStream stm = m_oMapBuffer.Lock(0, 0, 0); CustomVertex.PositionColored[] verts = new CustomVertex.PositionColored [ m_oOlkgame.Map.GetArea() * 6 ]; .... int nOffset = 0; .... verts [ nOffset ].X = nCounterX * 64; verts [ nOffset ].Y = nCounterY * 64; verts [ nOffset ].Z = oEdge1.Height * 4; verts [ nOffset ].Color = Map.Map2D.GetEdgeColor ( oEdge1 ).ToArgb(); ..... stm.Write(verts); m_oMapBuffer.Unlock(); .............................. //////////////////////////////// oDevice.Transform.View = Matrix.LookAtLH ( new Vector3 ( 0, 0, 1000 ), new Vector3 ( 640, 640 + m_nCurrentX, 0 ), new Vector3 ( 0, 0, 1 ) ); oDevice.RenderState.FillMode = FillMode.Solid; oDevice.Transform.Projection = Matrix.PerspectiveFovLH( (float) Math.PI / 4, 1.0f, 0.1f, 10000.0f ); oDevice.Lights [ 0 ].Type = LightType.Point; oDevice.Lights [ 0 ].Diffuse = System.Drawing.Color.White; oDevice.Lights [ 0 ].Position = new Vector3 ( 1000, 500, 5000 ); oDevice.Lights [ 0 ].Enabled = true; oDevice.Lights [ 0 ].Update(); oDevice.RenderState.Ambient = System.Drawing.Color.White; oDevice.RenderState.DiffuseMaterialSource = ColorSource.Material; Material oMaterial = new Material(); oMaterial.Diffuse = System.Drawing.Color.White; oDevice.Material = oMaterial; oDevice.SetStreamSource( 0, m_oMapBuffer, 0); oDevice.VertexFormat = CustomVertex.PositionColored.Format; oDevice.DrawPrimitives( PrimitiveType.TriangleList, 0, Game.Map.GetArea() * 2);
-
Du brauchst Normalen. Bei Lighting=true immer sonst sind sie schwarz.
-
Danke sehr!
Werde mich wieder melden, wenn das nicht hinhaut