Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Grafik- programmierung GDI+, 3D

Ähnliche Präsentationen


Präsentation zum Thema: "Grafik- programmierung GDI+, 3D"—  Präsentation transkript:

1 Grafik- programmierung GDI+, 3D
Frank Lange Microsoft Deutschland GmbH .NET Strategy & Developer Group

2 Agenda GDI+ 3D-Grafik Schlußbemerkung

3 Agenda GDI+ 3D-Grafik Schlußbemerkung Historie auf Microsoft-Systemen
Unterschiede zu GDI Verwendung von GDI+ Vektorgrafik Building Blocks Koordinaten und Transformationen Printing Bilddateien und Metafiles 3D-Grafik Schlußbemerkung

4 Das Historische Erlebnis
DOS Welcher Grafikkartentyp, welcher Grafikmode, was sind Latchregister, reich‘ mir mal das Programmierhandbuch des Druckerherstellers, gibt es einen schnelleren Integer-Algorithmus, hat‘s einen 387 oder 287, Postscript!, Prescribe… Windows GDI HDC, SelectObject, ReleaseDC, SelectPalette,… Windows GDI+ Graphics g; g.DrawLine(..); g.RotateTransform(30) Gibt‘s ja auch noch: OpenGL, GAPI, Direct3D, DirectDraw,… Und sowieso - ist Grafik nicht etwas, das es zu beschreiben gilt, anstatt APIs und Methodenaufrufe zu initiieren?

5 GDI+ Verfügbarkeit Windows XP: ja.
Win98, WinME, NT4SP6, Win2K: als Add-On .NET Framework: kein Ausweg!

6 Agenda GDI+ 3D-Grafik Schlußbemerkung Historie auf Microsoft-Systemen
Unterschiede zu GDI Verwendung von GDI+ Vektorgrafik Building Blocks Koordinaten und Transformationen Printing Bilddateien und Metafiles 3D-Grafik Schlußbemerkung

7 Unterschiede zu GDI Graphics-Objekt statt DC
Pens, Brushes,… sind unabhängig vom Graphics-Objekt (Parameter statt selektiertes Objekt) Koordinatentransformationen (endlich nicht mehr selbst zu programmieren) Keine Current Position Alpha-Blending (Transparenz) Farbverläufe Imaging (JPEG etc.)

8 Agenda GDI+ 3D-Grafik Schlußbemerkung Historie auf Microsoft-Systemen
Unterschiede zu GDI Verwendung von GDI+ Vektorgrafik Building Blocks Koordinaten und Transformationen Printing Bilddateien und Metafiles 3D-Grafik Schlußbemerkung

9 Demo: Minimal Graphics-Objekt
private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; } // auch: Graphics g = this.button1.CreateGraphics();

10 GDI+ und PrgSprachen .NET WinForm-Projekte C++ Windows-Apps
#include <windows.h> #include <gdiplus.h> // link: GDIPLUS.LIB using namespace Gdiplus; VOID OnPaint(HDC hdc) { Graphics graphics(hdc); Pen pen(Color(255, 0, 0, 255)); graphics.DrawLine(&pen, 0, 0, 200, 100); }

11 Agenda GDI+ 3D-Grafik Schlußbemerkung Historie auf Microsoft-Systemen
Unterschiede zu GDI Verwendung von GDI+ Vektorgrafik Building Blocks Koordinaten und Transformationen Printing Bilddateien und Metafiles 3D-Grafik Schlußbemerkung

12 Demo: BuildingBlocks Lines Rectangles Ellipses Arcs Polygons
Cardinal Splines Wie mit biegsamem Linieal gezogene Linie Bézier splines Start-, Endpunkt und zwei „magnetische“ Punkte in der Ferne

13 Agenda GDI+ 3D-Grafik Schlußbemerkung Historie auf Microsoft-Systemen
Unterschiede zu GDI Verwendung von GDI+ Vektorgrafik Building Blocks Koordinaten und Transformationen Printing Bilddateien und Metafiles 3D-Grafik Schlußbemerkung

14 Koordinatensysteme World Page Device
Beliebig positionier-, rotier- und skalierbar Transfomationsmatrix speichert die Welttransformation Page Ursprung links oben Default: Pixel-Einheit, aber änderbar  PageUnits (z.B. auf „2,54 cm“ umstellbar, DpiX, DpiY sind abfragbar – Größe der Grafikkarte;-))  PageScale zusätzlich für andere Auflösungseinheiten Device Ursprung links oben Pixel als Einheit

15 Trafomatrix 3x3 – Matrix speichert gesamte Folge von Trafos (Translation, Rotation, Skalierung)  „Matrix Representation of Transformations“ ( .NET Framework Developer's Guide )

16 Demo: Trafo g.Transform  die Trafo-Matrix
z.B: immer 1000*1000-Koordinatensystem (Egalisieren von Fenster, Drucker,…) g.ScaleTransform (xMult, yMult) g.TranslateTransform (dx,dy) z.B: Ursprung in Mitte des Fensters setzen g.RotateTransform (30) z.B: y-Werte nach oben wachsend Pen-Breite ist in Weltkoordinaten z.B. Auflösung auf DINA4-mm stellen und dann Pen in mm

17 Demo: Bewegung Dito: Drawing ändert sich nicht, aber das Koordinatensystem („der Betrachter)

18 AllPaintingInWmPaint
Double Buffering Zappelfrei bei bewegter Darstellung DoubleBuffer Bild wird im Hintergrund aufgebaut WM_ERASEBKGND führt noch nicht zum Löschen des Fensters AllPaintingInWmPaint OS führt kein Caching des Inhalts aus. Bei schnellen Bewegungen wäre das unnötig. UserPaint private void FormMain_Load(…) { this.SetStyle( ControlStyles.DoubleBuffer | ControlStyles.AllPaintingInWmPaint, true ); }

19 Demo: ObjMover Objekte, rotierbar und verschiebbar
Anklicken eines Objekts erkennen Flicker-freie Darstellung

20 Demo: BenchLines In GDI+ wird jeder Punkt über die Koordinatentransformation geschickt Hier: Extrembeispiel Treppenstufen mit 3 Pixel langen Linien Das ist der Preis für den Komfort! Anmerkung: zeitaufwendige Grafik sollte den UI-Thread nicht blockieren…

21 Agenda GDI+ 3D-Grafik Schlußbemerkung Historie auf Microsoft-Systemen
Unterschiede zu GDI Verwendung von GDI+ Vektorgrafik Building Blocks Koordinaten und Transformationen Printing Bilddateien und Metafiles 3D-Grafik Schlußbemerkung

22 Standarddrucker (GDI)
GDI (ohne „+“) PRINTDLG pdlg; // Init memset( &pdlg, 0, sizeof( PRINTDLG ) ); pdlg.lStructSize = sizeof( PRINTDLG ); // Flag: ich möchte DC pdlg.Flags = PD_RETURNDEFAULT | PD_RETURNDC; // Kein Show! PrintDlg( &pdlg ); // Da ist er: DC pdlg.hDC; ..und nun gleich wieder vergessen!

23 MSDN TechTalk – <<Monat JJJJ>> <<Thema>> 23
Drucker wählen MSDN TechTalk – <<Monat JJJJ>> <<Thema>> 23 .NET: PrintDialog liefert Druckerinfos, kein Graphics-Objekt Standarddrucker PrintDialog dlg = new PrintDialog(); dlg.Document = new PrintDocument(); MessageBox.Show ( dlg.PrinterSettings.PrinterName ); Druckerwahl SDK: PRINTDLG pdlg; // Initialize the PRINTDLG structure. memset( &pdlg, 0, sizeof( PRINTDLG ) ); pdlg.lStructSize = sizeof( PRINTDLG ); // Set the flag to return printer DC. pdlg.Flags = PD_RETURNDEFAULT | PD_RETURNDC; // Invoke the printer dialog box. PrintDlg( &pdlg ); // hDC member of the PRINTDLG structure contains // the printer DC. return pdlg.hDC; PrintDialog dlg = new PrintDialog(); dlg.Document = new PrintDocument(); if( dlg.ShowDialog()==DialogResult.OK) MessageBox.Show ( dlg.PrinterSettings.PrinterName );

24 Standarddrucker (.NET)
PrintDocument, PrintPageEventHandler PrintDocument doc = new PrintDocument(); // Default Printer doc.PrintPage += new PrintPageEventHandler(MyPrintFunc); doc.Print(); // Empfehlenswert: try-catch-Szenario void MyPrintFunc (object sender, PrintPageEventArgs e) { // nutze e.Graphics e.HasMorePages = false; } PrintDocument PrintPageEventHandler

25 Print mit Druckerwahl PrintDialog, PrintDocument, MyFunc
PrintDocument doc = new PrintDocument(); doc.PrintPage += new PrintPageEventHandler( MyPrintFunc ); PrintDialog dlg = new PrintDialog(); dlg.Document = doc; if (dlg.ShowDialog() == DialogResult.OK) doc.Print(); // void MyPrintFunc (object sender, PrintPageEventArgs e) { //... }

26 Print Preview PrintPreviewDialog
PrintDocument doc = new PrintDocument(); doc.PrintPage += new PrintPageEventHandler( MyPrintFunc ); PrintPreviewDialog dlg = new PrintPreviewDialog(); dlg.Document = doc; dlg.ShowDialog(); // void MyPrintFunc (object sender, PrintPageEventArgs e) { //... }

27 Demo: Printing Print! Print… Print Preview

28 Agenda GDI+ 3D-Grafik Schlußbemerkung Historie auf Microsoft-Systemen
Unterschiede zu GDI Verwendung von GDI+ Vektorgrafik Building Blocks Koordinaten und Transformationen Printing Bilddateien und Metafiles 3D-Grafik Schlußbemerkung

29 Demo: Images Bitmaps (JPG, GIF, BMP) Metafiles (EMF) (Demo: ObjMover)
Bitmap bitmap = new Bitmap("Grapes.jpg"); e.Graphics.DrawImage(bitmap, 60, 10); Metafile metafile = new Metafile("SampleMetafile.emf"); e.Graphics.DrawImage(metafile, 60, 10);

30 Agenda GDI+ 3D-Grafik OpenGL Direct3D Schlußbemerkung

31 Hinter den Bergen… Programm Idee Verstehen der/einer Grafikbibliothek
Programmrahmen Einige grundlegende Features Programm Arbeit Funktionen Mathe Idee

32 OpenGL vs. Direct3D OpenGL Direct3D Ähnliche Features OpenGL, Direct3D
Von Hardware beschleunigt In .NET nutzbar OpenGL Standard von Silicon Graphics Das rote Buch: Addison-Wesley, „OpenGL Programming Guide“ © Silicon Graphics, Inc ) Gut sichtbare Grundfunktionalität SDK bringt neuen Projekttyp ins VS .NET derzeit nicht in Everette Beta;-( Objektklassen Schnell und gut für Spiele Nur Windows-Plattform Direct3D

33 Agenda GDI+ 3D-Grafik Schlußbemerkung OpenGL Direct3D Allgemeines
Koordinaten und Transformationen Licht und Material Bitmaps, Images und Texturen Display Lists und Fonts 3D-Objekte Kamera (Bewegung durch den Raum) Direct3D Schlußbemerkung

34 OpenGL als Standard OpenGL (TM) Plattformunabhängig “Echtzeitgrafik”
Architectural Review Board Plattformunabhängig Unix, NT, Win95... “Echtzeitgrafik” schnelle Algorithmen, kein Raytracing

35 Funktionsgruppen Präfix Core Set - Funktionen Wiggle - Funktionen (MS)
“wgl” Win32 - Funktionen (MS) ohne Utility - Funktionen “glu” Auxiliary - Funktionen “aux”

36 Datentypen OpenGL .NET Kennung GLbyte SByte b GLint Int32 i
GLenum UInt32 ui GLfloat Single f GLdouble Double d (Array) v ... .NET z.B. System.Int32 (unabh. Von Programmiersprache)

37 Funktionsnamen API-Präfix Name Parametertyp-Postfix
(falls versch. Versionen) Beispiel glVertex3dv Core Set API “Vertex”-Funktion 3 double-Werte als Array  void glVertex3dv( double[] v); --> Online Hilfe: z.B. glVertex, glGet

38 Einstellungen (Licht...)
Rendering Context 3D-Programmierung Einstellungen (Licht...) RENDERING CONTEXT Frame Buffer Color Buffer ( DC ) Depth Buffer (z-Buffer) sonstige Puffer x,y x,y x,y

39 OpenGL unter .NET Noch kein offizielles MS-Assembly
Verschiedenes im Internet: GLSharp ( CsGL ( Tatsächlich benötigt Deklarationen der OpenGL-Funktionen und Datentypen Aux-Funktionen über DLL statt statischer native Code Library Hilfe für RC-Benutzung „Altbekannte“ OpenGL-Programmierung in .NET-Apps – kaum Unterschied zu SDK-Apps

40 Agenda GDI+ 3D-Grafik Schlußbemerkung OpenGL Direct3D Allgemeines
Koordinaten und Transformationen Licht und Material Bitmaps, Images und Texturen Display Lists und Fonts 3D-Objekte Kamera (Bewegung durch den Raum) Direct3D Schlußbemerkung

41 Koordinatensystem Rechtssystem Y -Z X +z rechte Hand-Regel Zeigefinger
Daumen Mittelfinger

42 Welt-, Modellkoordinaten
Y Modellkoordinaten (Arbeitskoordinaten) MC 1 -Z 1 Y -Z X X 1 WC Weltkoordinatensystem (immer fix)

43 Transformationen MC für Objektausgabe vorbereiten
Translation (Verschieben) glTranslate Rotation (Drehen) glRotate Skalierung (Dehnen/Stauchen) glScale

44 „Aux“-Objekte auxSolidTeapot Teekessel auxWireTeapot -”- Drahtmodell
auxSolidCube Würfel auxWireCube -”- Drahtmodell ... Anmerkung: Aux-Funktionen heißen in GLSharp glut-Funktionen.

45 Demo: Transformations
.NET-Rahmen static void Paint () { glTranslated (0,0,-5); glRotated (30,0,0,1); glRotated (20,1,0,0); Aux.WireTeapot (1.0); } Form1.cs ShowThis.cs

46 Demo: MoveMC MoveMC Tastatur-Steuerung MoveMC.exe

47 Geräte-Ausgabebereich
Voreinstellungen Y X -Z Sichtbereich im WC glFrustum / gluPerspective Geräte-Ausgabebereich Window glViewport

48 Sichtbarer Bereich Sichtbereich im WC glFrustum / gluPerspective Oder:
Y X -Z Sichtbereich im WC glFrustum / gluPerspective glMatrixMode ( GL_PROJECTION); glFrustum ( links, rechts, unten, oben, zStart, zEnde ); Oder: glMatrixMode ( GL_PROJECTION); gluPerspective ( öffnungWinkel, y_zu_x_Aspect, zStart, zEnde );

49 Geräte-Ausgabebereich
Y X -Z glViewport glViewport ( 0,0, windowWidth, windowHeight); Window

50 Trafo-Pipeline 2 3 1 4 Window Y Eye Coordinates (WC) Modelview Trafo
X -Z Eye Coordinates (WC) Modelview Trafo Projection Trafo 2 3 MC 1 1 Object Coordinates (MC) Clip Coordinates (Fläche) Window 4 Viewport Trafo Windows Coordinates

51 Wo sind die Trafo-Infos?
Modelview Trafo Modelview Matrix Projection Trafo Projection Matrix Viewport Trafo x,y, width, height Matrix: mathematische Datenstruktur, die alle Tranformationenseinstellungen speichert

52 Zugriff auf Einstellungen
Modelview Trafo glMatrixMode (GL_MODELVIEW) glLoadIdentity, glTranslated, glRotated, glScaled,... Projection Trafo glMatrixMode (GL_PROJECTION) glLoadIdentity, glFrustum,... Viewport Trafo glViewport Abfrage über glGet GL_MODELVIEW_MATRIX, GL_PROJECTION_MATRIX, GL_VIEWPORT Zwischenspeichern glPushMatrix(), glPopMatrix() OpenGL als State Machine Aktuellen Einstellung zählen --> glLoadItentity wirkt im aktuellen Matrixmode

53 Demo: SDK_Minimal Create Size Paint Destroy CreateWindow DC bekommen
SetPixelFormat DC vorbereiten wglCreateContext RC erzeugen glViewport Ausgabebereich glFrustum Sichtbereich glClear Frame Buffer löschen glTranslated... MC transformieren auxSolidTeapot... Objekt ausgeben glFlush Ausgabe fertig wglDeleteContext RC zerstören Create Size Paint Destroy

54 Demo: NET_Minimal Load SizeChanged Paint Render Context erzeugen
Sichtbarkeitsbereich und Fensterbereich einstellen ClearBuffer() MC-Trafos Objekte ausgeben SwapBuffer() Load SizeChanged Paint

55 Demo: NET_Bewegt Bewegtes Bild Timer WinForm
Timer_Tick globale Paramter ändern Invalidate() Form_Load myForm.SetStyle( ControlStyles.Opaque, true ); Fensterbereich nicht löschen („Zappelei“), sondern nur OpenGL Buffer einblenden WinForm

56 Eigene Objekte OpenGL bisher: “aux”-Objekte Punkt Linie Polygon
(Dreieck, Viereck) OpenGL 3D Objekt Oberflächen- elemente

57 Fläche übergeben -1,1,1 1,1,1 -1,-1,1 1,-1,1 OpenGL Pipeline
Linksumlauf glBegin (GL_POLYGON); //Würfel vorne glVertex3d (+1,+1,+1); //r o glVertex3d (-1,+1,+1); //l o glVertex3d (-1,-1,+1); //l u glVertex3d (+1,-1,+1); //r u glEnd (); OpenGL Pipeline

58 Fläche & Normale Normalvektor * senkrecht von Oberfläche weg
* z.B. für Lichtabstrahlung wichtig -1,-1,1 1,-1,1 1,1,1 -1,1,1 Linksumlauf glBegin (GL_POLYGON); //Würfel vorne glNormal3d (0,0,1); glVertex3d (+1,+1,+1); //r o glVertex3d (-1,+1,+1); //l o glVertex3d (-1,-1,+1); //l u glVertex3d (+1,-1,+1); //r u glEnd ();

59 Demo: Wuerfel Würfel ohne Licht und Material

60 Agenda GDI+ 3D-Grafik Schlußbemerkung OpenGL Direct3D Allgemeines
Koordinaten und Transformationen Licht und Material Bitmaps, Images und Texturen Display Lists und Fonts 3D-Objekte Kamera (Bewegung durch den Raum) Direct3D Schlußbemerkung

61 Licht & Material ambientes Licht bis 8 Lichtquellen
glEnable ( GL_LIGHTING ) ambientes Licht bis 8 Lichtquellen glEnable ( GL_LIGHT0 )... Material-Eigenschaften Farbe im Color Buffer

62 Licht-Arten ambientes Licht diffuses Licht Spekulares Licht
keine Einfallsrichtung (im Raum verteilt) keine Abstrahlrichtung Einfallsrichtung (--> Schräge der Fläche) Ausfallsrichtung (--> Lage zum Betrachter) Unabhängige Materialfarbe ambientes Licht diffuses Licht Spekulares Licht “Emittiertes Licht”

63 Ambientes Licht (global)
glLightModelfv (GL_LIGHT_MODEL_AMBIENT, new float[] { 0.2f, 0.2f, 0.2f, 1.0f } ); Interne Berechnung Beispiel: Rot-Wert: RDarstellung = RGlobalAmbient * RMaterial RLight0 * Rmaterial

64 Lichtquellen 0..7 glLightfv ( GL_LIGHT0, GL_AMBIENT, new float[] { 0.2f, 0.2f, 0.2f, 1.0f } ); glLightfv ( GL_LIGHT0, GL_DIFFUSE, new float[] { 0.4f, 0.4f, 0.4f, 1.0f } ); glLightfv ( GL_LIGHT0, GL_SPECULAR, new float[] { 0.5f, 0.5f, 0.5f, 1.0f }); glLightfv ( GL_LIGHT0, GL_POSITION, new float[] { 0.0f, 0.0f, 1.0f, 1.0f } ); //1=nahes Licht //0=fernes Licht glEnable ( GL_LIGHT0 );

65 Material glMaterialfv ( GL_FRONT, GL_AMBIENT, new float[] { 0.4f, 0.4f, 0.0f, 1.0f } ); glMaterialfv ( GL_FRONT, GL_DIFFUSE, new float[] { 0.7f, 0.7f, 0.7f, 1.0f } ); // RGBA! glMaterialfv ( GL_FRONT, GL_SPECULAR, new float[] { 0.9f, 0.9f, 0.9f, 1.0f } ); glMaterial ( GL_FRONT, GL_SHININESS, 10.0 ); glMaterialfv ( GL_FRONT, GL_EMISSION, new float[] { 0.0f, 0.0f, 0.0f, 1.0f } ); auxSolidCube (1.0);

66 Demo: LichtMaterial (1)
Sample 1..15 Lichtquellen und Materialeigenschaften.

67 Nahe Lichtquelle als “Taschenlampe”
Spotlight Nahe Lichtquelle als “Taschenlampe” float fDirection[] = { 0.0f, 0.0f, -1.0f }; glLightfv ( GL_LIGHT0, GL_SPOT_DIRECTION, fDirection );//Richtung glLightf ( GL_LIGHT0, GL_SPOT_CUTOFF, 15.0f ); //Öffnungswinkel glLightf ( GL_LIGHT0, GL_SPOT_EXPONENT, 0.0f ); //Fokussierung Exponent =0 --> immer Faktor 1 sonst: je senkrechter Licht, desto stärker

68 entfernt weniger Licht
Nahe Lichtquelle als “Taschenlampe” glLightf ( GL_LIGHT0, GL_CONSTANT_ATTENUATION, 1.0f ); glLightf ( GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.0f ); glLightf ( GL_LIGHT0, GL_QUDRATIC_ATTENUATION, 0.0f ); Alles wirkt zusammen konstant unabhängig von Entfernung schwächeres Licht linear mit Entfernung gleichmäßige Lichtabnahme quadratisch mit Entfernung raschere Lichtabnahme

69 Nebel Näher --> Materialfarbe Ferner --> Nebelfarbe
float fRGB[] = { 0.1f, 0.1f, 0.1f }; glFogi ( GL_FOG_MODE, GL_EXP ); // exponentiell mit Entfernung glFogfv ( GL_FOG_COLOR, fRGB ); // Nebelfarbe glFogf ( GL_FOG_DENSITY, 0.15 ); // Nebeldichte glEnable ( GL_FOG );

70 Transparentes Material
RGBA A = Alpha-Wert Alpha Blending Vorhandene, weiter entfernte Pixel im Frame Buffer: * nicht überschreiben * “durchscheinen” lassen i.a.: Alpha = 1 --> undurchsichtig z.B. Alpha = > 80% von dahinterliegendender Pixelfarbe

71 ff transparentes Material
glEnable ( GL_BLEND ); glBlendFunc ( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); float fDiffuse[] = {0.9f, 0.9f, 0.9f, 0.7f ); // Alpha=0.7 glMaterialfv ( GL_FRONT, GL_DIFFUSE, fDiffuse ); auxSolidShere (1.0); // Überschreibt nicht gnadenlos // weiter entfernte Teile

72 Back Face Culling Back Face Culling
Rückseiten der Flächen werden nicht gezeichnet. Ausschalten glDisable ( GL_CULL_FACE ); //keine Anzeigeunterdrückung glLightModeli ( GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE ); //auch Lichtberechnungen

73 Demo: LichtMaterial (2)
Sample 17.. Alpha-Blending, Back Face Culling

74 Agenda GDI+ 3D-Grafik Schlußbemerkung OpenGL Direct3D Allgemeines
Koordinaten und Transformationen Licht und Material Bitmaps, Images und Texturen Display Lists und Fonts 3D-Objekte Kamera (Bewegung durch den Raum) Direct3D Schlußbemerkung

75 OpenGL Bitmaps Nix bunt! ( „Bit“-Map) 1er-Bits = aktuelle Farbe
Keine Trafo (Drehen…) glRasterPos Ausgabeposition im MC Darstellung Parameter: Adresse der Pixel,... glBitmap

76 Images Farbe (RGB) Farbauflösung mind. 1 Byte je R, G, B
Keine Trafo (Drehen…) glRasterPos Ausgabeposition im MC Darstellung Parameter: Adresse der Pixel,... glDrawPixels Win32 BMPs: Blue-Green-Red-Reihenfolge!

77 glEnable ( GL_TEXTURE_2D )
Texturen Farbe (RGB) Farbauflösung mind. 1 Byte je R, G, B Höhe, Breite: 2n-Wert Überzieht eine Objekt-Fläche Mit der Fläche transformiert (gedreht…) glEnable ( GL_TEXTURE_2D ) Texturen verwendbar glTexImage2D Pixelarray übergeben Win32 BMPs: Blue-Green-Red-Reihenfolge!

78 Textur auf Fläche t 1 1 s Rahmen: Ziel-Fläche eines 3D-Objekts
glBegin (GL_POLYGON); //Fläche glNormal3d (0,0,1); glTexCoord2d ( 0.6, 0.5); glVertex3d (1,1,0); //r o glTexCoord2d ( 0.2, 0.5); glVertex3d (-1,1,0); //l o glTexCoord2d ( 0.2, 0.1); glVertex3d (-1,-1,0); //l u glTexCoord2d ( 0.6, 0.1); glVertex3d (1,-1,0); //r u glEnd (); t 1 0.5 0.1 0.2 0.6 1 s Rahmen: Ziel-Fläche eines 3D-Objekts

79 Demo: BmpNFonts (1) BmpNFonts Bitmap Image Texture (Font kommt später)

80 Agenda GDI+ 3D-Grafik Schlußbemerkung OpenGL Direct3D Allgemeines
Koordinaten und Transformationen Licht und Material Bitmaps, Images und Texturen Display Lists und Fonts 3D-Objekte Kamera (Bewegung durch den Raum) Direct3D Schlußbemerkung

81 Display Lists Anweisungsfolgen  OpenGL-Verwaltung
Abruf mit Index (RC-lokal!) glNewList (inx,GL_COMPILE) // OpenGL-Anweisungen glEndList () glCallList (inx) glListBase ( inxOffset ) glCallLists ( nCount, GL_INT, inxArr ) glDeleteLists (inxFirst, nCount)

82 True Type Fonts wglUseFontOutlines
Erzeugt Display List für jeden Glyphen (Zeichendarstellung) glCallLists Anzeige eines String. String als Indexarray für die Display Lists der Glyphen

83 Demo: BmpNFonts (2) BmpNFonts Font

84 Agenda GDI+ 3D-Grafik Schlußbemerkung OpenGL Direct3D Allgemeines
Koordinaten und Transformationen Licht und Material Bitmaps, Images und Texturen Display Lists und Fonts 3D-Objekte Kamera (Bewegung durch den Raum) Direct3D Schlußbemerkung

85 Flächenelemente Nicht erlaubt Nein ! Einkerbung Nein ! Ausstanzung 1 2
Rechts-Umlaufsinn Nein ! 3 4

86 Einfache Elemente Flächen direkt programmierbar Würfel Pyramide

87 Berechnete Objekte Flächenelemente berechnen Kugel Rohr … oft
Punktegitter erzeugen Die benachbarten Punkte umschließen eine Fläche (vgl. auxWireSphere...)

88 Zusammensetzung aus elementaren Teilobjekten
Kombi-Objekte Zusammensetzung aus elementaren Teilobjekten

89 Objekte scannen Prinzip: Thomograf Punktegitter Textur Farben
Echoabstastung für Koordinaten + Kamera für Texturelemente Lichtreflexion messen für Material,Normalen Punktegitter Textur Farben

90 Demo: Objects Objects KombiObjects RobotMSJ RobotMSJ stammt vom MSDN.

91 Agenda GDI+ 3D-Grafik Schlußbemerkung OpenGL Direct3D Allgemeines
Koordinaten und Transformationen Licht und Material Bitmaps, Images und Texturen Display Lists und Fonts 3D-Objekte Kamera (Bewegung durch den Raum) Direct3D Schlußbemerkung

92 Demo: MoveCamera Implementierung Fall: Kamera schwenkt nach rechts
--> ganze Szene dreht sich nach links --> MC-System vor der Objektdarstellung nach links rotieren dito: sonstige Bewegung

93 Agenda GDI+ 3D-Grafik Schlußbemerkung OpenGL Direct3D Allgemeines
Koordinaten und Transformationen Licht und Material Bitmaps, Images und Texturen Display Lists und Fonts 3D-Objekte Kamera (Bewegung durch den Raum) Direct3D Schlußbemerkung

94 Direct3D Schnelle 3D-Grafik auf Windows-Systemen
Gerne für Spiele verwendet Rendering Engine mit Objektmodell Projekttyp im VS .NET

95 3D Beschreibungsformat
Z.B. 3D-Grafik über das Internet via 3D-Modell-Beschreibungsformat VRML, ISO Standard seit 1997 (Virtual Reality Modeling Language) Soll ersetzt werden, weil XML erwünscht Cosmo Player (Platinium) als IE-Plugin Beispiele, siehe X3D (eXtensible 3D) Wird als VRML-Nachfolger gesehen Siehe auch

96 Agenda GDI+ 3D-Grafik Schlußbemerkung

97 Zusammenfassung GDI+ wird in WinForms verwendet
GDI+ nutzt Transformationsmatrizen OpenGL und Direct3D ermöglichen 3D-Grafik Transformationen sind das A&O Objekte werden im durch Flächenelemente beschrieben Verschiedene Lichtquellen für plastische Darstellung

98 Fragen!? Uff...


Herunterladen ppt "Grafik- programmierung GDI+, 3D"

Ähnliche Präsentationen


Google-Anzeigen