Download - 3D- Spieleprogrammierung
![Page 1: 3D- Spieleprogrammierung](https://reader036.vdokument.com/reader036/viewer/2022062501/56815ed4550346895dcd6a0f/html5/thumbnails/1.jpg)
3D- Spieleprogrammierung
Softwaretechnologie IIDozent: Herr Prof. Dr. Manfred Thaller
WS 13/14Referent: Christian Braun
![Page 2: 3D- Spieleprogrammierung](https://reader036.vdokument.com/reader036/viewer/2022062501/56815ed4550346895dcd6a0f/html5/thumbnails/2.jpg)
Das 1
. Dre
ieck
!
Text
uren
!
![Page 3: 3D- Spieleprogrammierung](https://reader036.vdokument.com/reader036/viewer/2022062501/56815ed4550346895dcd6a0f/html5/thumbnails/3.jpg)
Initialisierung der SzeneDefinition des Dreiecks(Art, Größe, Farbe..)Definition des Rahmens(Sichtfeld,, 3D-Effekt,
Beleuchtung, Dithering..)
ZeichenvorgangPosition und Verhalten des
Dreiecks(Ausrichtung, Entfernung, Rotation)Eigentlicher Zeichenvorgang
Das 1
. Dre
ieck
Was brauchen wir dafür?
![Page 4: 3D- Spieleprogrammierung](https://reader036.vdokument.com/reader036/viewer/2022062501/56815ed4550346895dcd6a0f/html5/thumbnails/4.jpg)
o Eck- oder Scheitelpunkt einer Primitive=> Dreieck, Linie, Punkt
o enthält Angaben zu Position, Farbe, Transparenz usw…
o Grundsatz für die meisten Informationen: Interpolation zwischen Vertizes
Initi
alisi
erun
gVertex/ Vertizes
struct SVertex{tbVector3 vPosition; // Position des VertexDWORD dwColor; // Farbe des Vertexstatic const DWORD dwFVF; // Vertexformat (statisch)};
Vertexformat aktivieren
![Page 5: 3D- Spieleprogrammierung](https://reader036.vdokument.com/reader036/viewer/2022062501/56815ed4550346895dcd6a0f/html5/thumbnails/5.jpg)
Initi
alisi
erun
g Dreieck definieren
Svertext g_aTriangleVertex[3]; //Globale Variable
g_aTriangleVertex[0].vPosition = tbVector3 ( 0.0f, 1.0f, 0.0f); // obeng_aTriangleVertex[1].vPosition = tbVector3 ( 1.0f, -1.0f, 0.0f); // rechts unteng_aTriangleVertex[2].vPosition = tbVector3 ( -1.0f, -1.0f, 0.0f);// links unten
g_aTriangleVertex[0]. dwColor = tbColor3 ( 1.0f, 0.0f, 0.0f); // Rotg_aTriangleVertex[1]. dwColor = tbColor3 ( 0.0f, 1.0f, 0.0f); // Grüng_aTriangleVertex[2]. dwColor = tbColor3 ( 0.0f, 0.0f, 1.0f); // Blau
Dreieck definieren
![Page 6: 3D- Spieleprogrammierung](https://reader036.vdokument.com/reader036/viewer/2022062501/56815ed4550346895dcd6a0f/html5/thumbnails/6.jpg)
o Einstellungen, um später etwas auf Bildschirm sehen zu können
o Kontrolle des Rasterizers sowie Anweisung, WIE das Dreieck gezeichnet werden soll
o SetRenderState => Setzt Status auf angegebenen Wert
o GetRenderState => Fragt Status ab und liefert ihn zurück
o Starten alle mit: D3DRS_
o Möglichkeiten des Render-States:BeleuchtungSchattierungFüllmodusDithering
Initi
alisi
erun
gRender- States
![Page 7: 3D- Spieleprogrammierung](https://reader036.vdokument.com/reader036/viewer/2022062501/56815ed4550346895dcd6a0f/html5/thumbnails/7.jpg)
DITHERINGIn
itial
isier
ung
Render- States
..fehlender Farbgenauigkeit....starker Verpixelung!
Geringe Anzahl verfügbarer Farben führt zu..
![Page 8: 3D- Spieleprogrammierung](https://reader036.vdokument.com/reader036/viewer/2022062501/56815ed4550346895dcd6a0f/html5/thumbnails/8.jpg)
DITHERINGIn
itial
isier
ung
Rende- States
o Pixel wird von menschlichem Auge nicht als Einzelobjekt wahrgenommen
o eine Farbe wird aus verschiedenfarbigen Pixeln gemischt
1 Pixel Blau + 1 Pixel Rot
= 1 Pixel Violett
Technik zur Erzeugung größerer Farbtiefen:
![Page 9: 3D- Spieleprogrammierung](https://reader036.vdokument.com/reader036/viewer/2022062501/56815ed4550346895dcd6a0f/html5/thumbnails/9.jpg)
300 Farben OHNE Dithering
DITHERINGIn
itial
isier
ung
RENDER-STATES
16 Farben MIT Dithering
![Page 10: 3D- Spieleprogrammierung](https://reader036.vdokument.com/reader036/viewer/2022062501/56815ed4550346895dcd6a0f/html5/thumbnails/10.jpg)
Initi
alisi
erun
gRENDER-STATES
tbResult InitScene(){HRESULT hResult;
g_pD3DDevice->SetRenderState(D3DRS_Lighting, FALSE);
g_pD3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);g_pD3DDevice->SetRenderState(D3DRS_DITHERENABLE, TRUE);
Return TB_OK;}
Fertige Render-States für unser Dreieck
![Page 11: 3D- Spieleprogrammierung](https://reader036.vdokument.com/reader036/viewer/2022062501/56815ed4550346895dcd6a0f/html5/thumbnails/11.jpg)
o Bestimmt, welcher Teil der Weltmatrix dargestellt wird
o erschafft den eigentlichen 3D Effekto weiter entfernte Objekte erscheinen kleiner, Nahe
wirken GroßIniti
alisi
erun
gProjektionsmatrix
//Bildseitenverhältnis berechnenFloat fAspect = (float)(g_Direct3DParameters.VideoMode.Width)
/ (float)(g_Direct3DParameters.VideoMode.Heigth);
//Projektionsmatrix erzeugentbMatrix mProjection = tbMatrixProjection (TB_DEG_TO_RAD(90.0f),//Sichtfeld: 90°
fAspect, //Bildseitenverhältnis
0.1f, //Nahe Clipping-Ebene
100.0f); //Ferne Clipping-Ebene
//Projektionsmatrix einsetzenG_pD3DDevice->SetTransform(D3DTS_PROJECTION, (D3DMATRIX*) (&mProjection));
3D- Effekt erstellen
![Page 12: 3D- Spieleprogrammierung](https://reader036.vdokument.com/reader036/viewer/2022062501/56815ed4550346895dcd6a0f/html5/thumbnails/12.jpg)
o tbMatrixTranslationo verschieben des Dreiecks im dreidimensionalem
Raumo Beobachter befindet sich(ohne spezielle
Sichtmatrix) beim Punkt (0,0,0)o Dreieck wird im Beispiel auf (0,0,2), also um 2
Einheiten in die Tiefe verschoben
o tbMatrixRotationYo Rotation um die Y-Achse, einzig ein Winkel wird
benötigto Winkel sollte sich parallel zur abgelaufenen Zeit
seit Programmstart erhöhen=> gleichmäßige Drehung
Zeic
hnen
/ Ren
dern
Translationsmatrix
Rotationsmatrix
![Page 13: 3D- Spieleprogrammierung](https://reader036.vdokument.com/reader036/viewer/2022062501/56815ed4550346895dcd6a0f/html5/thumbnails/13.jpg)
Zeic
hnen
/ Ren
dern
Zeitzähler
tbResult Move(float fNumSecsPassed){
g_fTime += fNumSecsPassed; // Zeitzähler erhöhen
return TB_OK;}
Variable g_fTime wird erhöht um die abgelaufene Zeit seit dem letzten Bild!
![Page 14: 3D- Spieleprogrammierung](https://reader036.vdokument.com/reader036/viewer/2022062501/56815ed4550346895dcd6a0f/html5/thumbnails/14.jpg)
Zeic
hnen
/ Ren
dern
Translation & Rotation
tbResult Render(float FNumSecsPassed){
// Rotations- Translationsmatrix des Dreiecks erzeugentbMatrix mRotation(tbMatrixRotationY(TB_DEG_TO_RAD(g_fTime *90.0f)));tbMatrix mTranslation(tbMatrixTranslation(tbVector3(0.0f, 0.0f, 2.0f)));
//Beide Matrizen kombinieren und als Weltmatrix einsetzentbMatrix mWorld(mRotation * mTranslation);
g_pD3DDevice->SetTransform(D3DTS_WORLD, (D3DMatrix*)(&mWorld));
Return TB_OK;
![Page 15: 3D- Spieleprogrammierung](https://reader036.vdokument.com/reader036/viewer/2022062501/56815ed4550346895dcd6a0f/html5/thumbnails/15.jpg)
Zeic
hnen
/ Ren
dern
Zeichenvorgang
g_pD3DDevice->BeginScene(); //Szene Beginnen
If(FAILED(hResult = g_pD3DDevice->DrawPrimitiveUP( // UP= User Pointer
D3DPT_TRIANGLELIST, //Dreiecksliste1, //1 Dreieckg_aTriangleVertex, //Vertizessizeof(Svertex)))) //Vertexgröße
g_pD3DDevice9::EndScene(); //Szene beenden
g_pD3DDevice->Present(NULL, NULL, NULL, NULL); //Bildpuffer sichtbar machen
Return TB_OK;}
![Page 16: 3D- Spieleprogrammierung](https://reader036.vdokument.com/reader036/viewer/2022062501/56815ed4550346895dcd6a0f/html5/thumbnails/16.jpg)
o Nichts weiter als Bilder, welche charakteristische Muster und Farben auf Oberfläche übertrageno Simulation von unterschiedlichsten
Oberflächenoaus Kugel wird mit passender Textur
Fußball
o Gute Verarbeitungsgeschwindigkeit=> kein Unterschied in Performance zwischen einem texturierten und einem nicht texturierten Dreieck
o Nachteil: Eventuelle Unebenheiten werden nicht berücksichtigt, Oberfläche bleibt stets flach
TexturenSinn und Zweck
![Page 17: 3D- Spieleprogrammierung](https://reader036.vdokument.com/reader036/viewer/2022062501/56815ed4550346895dcd6a0f/html5/thumbnails/17.jpg)
Wie wird die Textur an das Objekt angelegt und
positioniert?
TexturenHmm..?
![Page 18: 3D- Spieleprogrammierung](https://reader036.vdokument.com/reader036/viewer/2022062501/56815ed4550346895dcd6a0f/html5/thumbnails/18.jpg)
o Textur enthält TEXEL => Pixel einer Texturo Zuordnung von Texel(Textur) und Vertex(Objekt)o jeder Vertex erhält sein Gegenüber auf der
Textur
(0,0)u-Achse
v-Achse
0,5
0,5
(1, 1)1
1
Zweidimensionales Texturkoordinatensystem
Texturkoordinaten Texturen
![Page 19: 3D- Spieleprogrammierung](https://reader036.vdokument.com/reader036/viewer/2022062501/56815ed4550346895dcd6a0f/html5/thumbnails/19.jpg)
Bevorzugter Speicherplatz: Grafikkarteo Häufiger Zugriff nötig, schneller Zugriff gewährleistet
o Große Texturen problematisch, weil zu wenig Speicher
Bevorzugte Größe: quadratische Texturen Zweierpotenzregel beachten
o viele 3D Grafikkarten akzeptieren nur Texturen, dessen Breite und Höhe Zweierpotenzen sindo 1, 2, 4, 8, 16, 32…
TexturenSpeicher und Größe
![Page 20: 3D- Spieleprogrammierung](https://reader036.vdokument.com/reader036/viewer/2022062501/56815ed4550346895dcd6a0f/html5/thumbnails/20.jpg)
TexturenHmm..?
Bei Objekten, welche nah an der Kamera
und dementsprechend
groß sind, erscheinen
hässliche, verpixelte Vierecke?!
Texturauflösung zu gering
Viele nebeneinanderliegende Pixel erhalten den gleichen Texel
=Mehr Pixel als Texel
=
![Page 21: 3D- Spieleprogrammierung](https://reader036.vdokument.com/reader036/viewer/2022062501/56815ed4550346895dcd6a0f/html5/thumbnails/21.jpg)
TexturenBilineare Filter
Lösungsmöglichkeit 1:Auflösung der Textur erhöhen..ABER:Ressourcenunfreundlich hohe SpeicherplatzbelegungGrafikkartenspeicher
Lösungsmöglichkeit 2:
o Interpolation zwischen vier Texturkoordinaten des nächst gelegenen Texel
o Vergrößerte Texturen werden nicht eckiger, sondern runder/weicher
![Page 22: 3D- Spieleprogrammierung](https://reader036.vdokument.com/reader036/viewer/2022062501/56815ed4550346895dcd6a0f/html5/thumbnails/22.jpg)
TexturenSo siehts aus!
![Page 23: 3D- Spieleprogrammierung](https://reader036.vdokument.com/reader036/viewer/2022062501/56815ed4550346895dcd6a0f/html5/thumbnails/23.jpg)
Der bilineare Filter hat keinen Sinn bei weit entfernten, kleinen Objekten.
Was nun?
TexturenHmm..?
![Page 24: 3D- Spieleprogrammierung](https://reader036.vdokument.com/reader036/viewer/2022062501/56815ed4550346895dcd6a0f/html5/thumbnails/24.jpg)
TexturenMIP- Mapping
o Größe der Textur veränderno es entstehen viele verschiedene Versionen
einer einzigen Texturo Direct3D wählt selbstständig passende Version aus
o 256 x 256 => 128 x 128 => 64 x 64 => 32 x 32 …
![Page 25: 3D- Spieleprogrammierung](https://reader036.vdokument.com/reader036/viewer/2022062501/56815ed4550346895dcd6a0f/html5/thumbnails/25.jpg)
Dank
e fü
r....die Aufmerksamkeit!