Würfelsimulator
Würfelsimulator
Würfelsimulator
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
PDA-Programmieren • "<strong>Würfelsimulator</strong>" • SS10 • Simon Brennecke • Ivo Torp • Klaus Manneck<br />
device.RenderState.ZBufferEnable = true;<br />
device.RenderState.CullMode = Cull.CounterClockwise;<br />
device.Lights[0].Type = LightType.Point;<br />
device.Lights[0].Diffuse = Color.White;<br />
device.Lights[0].AmbientColor = new ColorValue(0, 1, 0);<br />
device.Lights[0].Position = new Vector3(0.49f, 0.49f, 0.49f);<br />
device.Lights[0].Attenuation0 = 0;<br />
device.Lights[0].Attenuation1 = 0.75f;<br />
device.Lights[0].Attenuation2 = 0;<br />
device.Lights[0].Range = 100;<br />
device.Lights[0].Specular = Color.White;<br />
device.Lights[0].Update();<br />
device.Lights[0].Enabled = true;<br />
device.RenderState.Ambient = Color.FromArgb(0x20, 0x20, 0x20);<br />
device.RenderState.Lighting = true;<br />
Backface Culling ist ein Verfahren, um jene Polygone, die gerade nicht sichtbar sind (weil sie auf<br />
der Rückseite des Würfels sind) nicht mit zu rendern. Ob ein Polygon ausgeblendet wird, wird<br />
durch die Reihenfolge der Eckpunkte angegeben. Hier speziell werden Polygone ausgelassen,<br />
dessen Punkte (nach der Transformation in Bildschirmkoordinaten) gegen den Uhrzeigersinn<br />
verteilt sind.<br />
Für die Beleuchtung wird eine Lichtquelle definiert. Diese enthält Typ, Farbe, Position und<br />
Reichweite. Es wird nach dem Aktivieren des Lichts und der Beleuchtung (Lighting) von DirectX<br />
automatisch angewendet. Dieses einfache Beleuchtungsmodell kann keine Schatten werfen, sondern<br />
nur die Helligkeit von Polygonen ändern, je nach dem, wie genau die Normale des Polygons zur<br />
Lichtquelle ausgerichtet ist.<br />
Nun muss nur noch eine „Kamera“ gesetzt werden. Diese besteht aus ein paar Matrizen, welche,<br />
multipliziert mit den eigentlich zu rendernden Daten multipliziert werden, um entsprechend die<br />
Position und Drehung einer Kamera zu imitieren. Auch hier macht DirectX die meiste Arbeit :<br />
device.Transform.View =<br />
Matrix.LookAtRH(<br />
new Vector3(-0.5f, 0.0f, +0.5f),<br />
new Vector3(0.0f, 0.0f, 0.0f),<br />
new Vector3(0.0f, 0.0f, 1.0f));<br />
device.Transform.Projection =<br />
Matrix.PerspectiveFovRH(<br />
(float)Math.PI / 2.0f,<br />
(float)targetForm.ClientSize.Width/(float)targetForm.ClientSize.Height,<br />
0.1f, 40.0f );<br />
Seite 28 / 37