3D- Spieleprogrammierung Softwaretechnologie II Dozent: Herr Prof. Dr. Manfred Thaller WS 13/14...

25
3D- Spieleprogrammierung Softwaretechnologie II Dozent: Herr Prof. Dr. Manfred Thalle WS 13/14 Referent: Christian Braun

Transcript of 3D- Spieleprogrammierung Softwaretechnologie II Dozent: Herr Prof. Dr. Manfred Thaller WS 13/14...

Page 1: 3D- Spieleprogrammierung Softwaretechnologie II Dozent: Herr Prof. Dr. Manfred Thaller WS 13/14 Referent: Christian Braun.

3D- Spieleprogrammierung

Softwaretechnologie IIDozent: Herr Prof. Dr. Manfred Thaller

WS 13/14Referent: Christian Braun

Page 2: 3D- Spieleprogrammierung Softwaretechnologie II Dozent: Herr Prof. Dr. Manfred Thaller WS 13/14 Referent: Christian Braun.

Das

1. D

reie

ck!

Text

uren

!

Page 3: 3D- Spieleprogrammierung Softwaretechnologie II Dozent: Herr Prof. Dr. Manfred Thaller WS 13/14 Referent: Christian Braun.

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. D

reie

ckWas brauchen wir dafür?

Page 4: 3D- Spieleprogrammierung Softwaretechnologie II Dozent: Herr Prof. Dr. Manfred Thaller WS 13/14 Referent: Christian Braun.

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

alis

ieru

ngVertex/ Vertizes

struct SVertex{tbVector3 vPosition; // Position des VertexDWORD dwColor; // Farbe des Vertexstatic const DWORD dwFVF; // Vertexformat (statisch)};

Vertexformat aktivieren

Page 5: 3D- Spieleprogrammierung Softwaretechnologie II Dozent: Herr Prof. Dr. Manfred Thaller WS 13/14 Referent: Christian Braun.

Initi

alis

ieru

ng 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 Softwaretechnologie II Dozent: Herr Prof. Dr. Manfred Thaller WS 13/14 Referent: Christian Braun.

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

alis

ieru

ngRender- States

Page 7: 3D- Spieleprogrammierung Softwaretechnologie II Dozent: Herr Prof. Dr. Manfred Thaller WS 13/14 Referent: Christian Braun.

DITHERINGIn

itial

isie

rung

Render- States

..fehlender Farbgenauigkeit..

..starker Verpixelung!

Geringe Anzahl verfügbarer Farben führt zu..

Page 8: 3D- Spieleprogrammierung Softwaretechnologie II Dozent: Herr Prof. Dr. Manfred Thaller WS 13/14 Referent: Christian Braun.

DITHERINGIn

itial

isie

rung

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 Softwaretechnologie II Dozent: Herr Prof. Dr. Manfred Thaller WS 13/14 Referent: Christian Braun.

300 Farben OHNE Dithering

DITHERINGIn

itial

isie

rung

RENDER-STATES

16 Farben MIT Dithering

Page 10: 3D- Spieleprogrammierung Softwaretechnologie II Dozent: Herr Prof. Dr. Manfred Thaller WS 13/14 Referent: Christian Braun.

Initi

alis

ieru

ngRENDER-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 Softwaretechnologie II Dozent: Herr Prof. Dr. Manfred Thaller WS 13/14 Referent: Christian Braun.

o Bestimmt, welcher Teil der Weltmatrix dargestellt wird

o erschafft den eigentlichen 3D Effekto weiter entfernte Objekte erscheinen kleiner, Nahe

wirken GroßIniti

alis

ieru

ngProjektionsmatrix

//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 Softwaretechnologie II Dozent: Herr Prof. Dr. Manfred Thaller WS 13/14 Referent: Christian Braun.

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 Softwaretechnologie II Dozent: Herr Prof. Dr. Manfred Thaller WS 13/14 Referent: Christian Braun.

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 Softwaretechnologie II Dozent: Herr Prof. Dr. Manfred Thaller WS 13/14 Referent: Christian Braun.

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 Softwaretechnologie II Dozent: Herr Prof. Dr. Manfred Thaller WS 13/14 Referent: Christian Braun.

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 Softwaretechnologie II Dozent: Herr Prof. Dr. Manfred Thaller WS 13/14 Referent: Christian Braun.

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 Softwaretechnologie II Dozent: Herr Prof. Dr. Manfred Thaller WS 13/14 Referent: Christian Braun.

Wie wird die Textur an das Objekt angelegt und

positioniert?

TexturenHmm..?

Page 18: 3D- Spieleprogrammierung Softwaretechnologie II Dozent: Herr Prof. Dr. Manfred Thaller WS 13/14 Referent: Christian Braun.

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 Softwaretechnologie II Dozent: Herr Prof. Dr. Manfred Thaller WS 13/14 Referent: Christian Braun.

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 Softwaretechnologie II Dozent: Herr Prof. Dr. Manfred Thaller WS 13/14 Referent: Christian Braun.

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 Softwaretechnologie II Dozent: Herr Prof. Dr. Manfred Thaller WS 13/14 Referent: Christian Braun.

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 Softwaretechnologie II Dozent: Herr Prof. Dr. Manfred Thaller WS 13/14 Referent: Christian Braun.

TexturenSo siehts aus!

Page 23: 3D- Spieleprogrammierung Softwaretechnologie II Dozent: Herr Prof. Dr. Manfred Thaller WS 13/14 Referent: Christian Braun.

Der bilineare Filter hat keinen Sinn bei weit entfernten, kleinen Objekten.

Was nun?

TexturenHmm..?

Page 24: 3D- Spieleprogrammierung Softwaretechnologie II Dozent: Herr Prof. Dr. Manfred Thaller WS 13/14 Referent: Christian Braun.

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 Softwaretechnologie II Dozent: Herr Prof. Dr. Manfred Thaller WS 13/14 Referent: Christian Braun.

Dan

ke fü

r....die Aufmerksamkeit!