myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grafik und Sound » DirectX: Tutorial
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Seiten (2): « vorherige 1 [2] geschlossen (weitere Infos)
Zum Ende der Seite springen  

DirectX: Tutorial 12 Bewertungen - Durchschnitt: 10,0012 Bewertungen - Durchschnitt: 10,0012 Bewertungen - Durchschnitt: 10,0012 Bewertungen - Durchschnitt: 10,0012 Bewertungen - Durchschnitt: 10,00

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
shady shady ist männlich
myCSharp.de-Mitglied

Dabei seit: 31.01.2005
Beiträge: 42
Entwicklungsumgebung: VS.NET 2003


shady ist offline Füge shady Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hier ist die Fehlermeldung:

Die Anwendung hat einen Ausnahmefehler verursacht, der nicht verarbeitet werden konnte.

Prozess-ID=0xf28 (3880), Thread-ID=0xcfc (3324)

Klicken Sie auf 'OK', um die Anwendung abzubrechen,
oder auf 'Abbrechen', um sie zu debuggen.

Wär nett wenn ihr mir helfen könntet.
Danke schonmal im voraus.
09.02.2005 17:41 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Fab96
myCSharp.de-Mitglied

Dabei seit: 20.10.2004
Beiträge: 66


Fab96 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wenn du debuggen lässt kommt dann eine FileNotFound Exception ?

wenn ja ist als references sicherlich irgendwas drin was nichtintalliert ist. jedenfalls war das mal bei mir so.
09.02.2005 19:20 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
KRambo KRambo ist männlich
myCSharp.de-Mitglied

Dabei seit: 29.08.2004
Beiträge: 355
Entwicklungsumgebung: Visual Studio 2010


KRambo ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Die Meldung hatte ich auch mal. War weil das Managed DirectX nicht "richtig" installiert war auf dem Rechner, danach gings...
10.02.2005 08:59 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
shady shady ist männlich
myCSharp.de-Mitglied

Dabei seit: 31.01.2005
Beiträge: 42
Entwicklungsumgebung: VS.NET 2003


shady ist offline Füge shady Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

was meinst du mit "nicht richtig installiert"?

was hast du denn gemacht damit es wieder weg ging?
10.02.2005 14:31 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
KRambo KRambo ist männlich
myCSharp.de-Mitglied

Dabei seit: 29.08.2004
Beiträge: 355
Entwicklungsumgebung: Visual Studio 2010


KRambo ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Im Ordner wo das Setup liegt, gibts nen eigenen Ordner, wo eine extra Setup-Datei für Managed liegt. Die hab ich installiert, dann gings auch. Die andere installiert glaub ich nur das "normale" DirectX...

Musste nur ein bischen Suchen da in den Ordnern die Bezeichnungen sind eh selbsterklärend. Weiss den Ordnernamen nicht auswendig...

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von KRambo am 10.02.2005 20:35.

10.02.2005 20:31 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Fab96
myCSharp.de-Mitglied

Dabei seit: 20.10.2004
Beiträge: 66


Fab96 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Die MDXREDIS.msi ? sprich manadged DirectX redistutable oderwie man das schreibt.
10.02.2005 21:21 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
shady shady ist männlich
myCSharp.de-Mitglied

Dabei seit: 31.01.2005
Beiträge: 42
Entwicklungsumgebung: VS.NET 2003


shady ist offline Füge shady Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

hm... meinst du mit dem Ordner in dem das Setup ist den ornder C:\Programme\directx oder so ähnlich?
oder bin ich völlig im falschen film?
In dem Ordner is bei mir nämlich gar nichts auser der Ordner setup und der is auch leer.
11.02.2005 13:19 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
shady shady ist männlich
myCSharp.de-Mitglied

Dabei seit: 31.01.2005
Beiträge: 42
Entwicklungsumgebung: VS.NET 2003


shady ist offline Füge shady Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

hat sich jetzt halbwegs erledigt. Ich habe mir VC# 2005 Express beta runtergeladen, jetzt tut es.
Wär aber trotzdem nett wenn ihr mir sagen könntet warum es in #develop nicht tat.
12.02.2005 18:45 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
KRambo KRambo ist männlich
myCSharp.de-Mitglied

Dabei seit: 29.08.2004
Beiträge: 355
Entwicklungsumgebung: Visual Studio 2010


KRambo ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hm wenn du DirectX installierst und die eine Setup hast, dann doppelklickst du und er fragt nach nem Ordner. Da wird dann alles entpackt. Dann hast du da mehrere Unterordner und das Setup wird automatisch gestartet. Nur bin ich draufgekommen, dass die Installation nich immer ganz funktioniert, und dann muss man das 2te Setup in dem betreffenden Ordner auch ausführen, dann gehts...ich glaub die Struktur geht so irgendwie \DirectX\Managed DirectX\Debug und da iss ne msi drin....
13.02.2005 14:11 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
shady shady ist männlich
myCSharp.de-Mitglied

Dabei seit: 31.01.2005
Beiträge: 42
Entwicklungsumgebung: VS.NET 2003


shady ist offline Füge shady Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

aber dann müste es dann doch auch mit VC# 2005 nicht funktionieren oder?
Ich mein, wenn es an DirectX liegt, dann sollte es doch jetzt auch nicht funktionieren.
17.02.2005 15:02 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
KRambo KRambo ist männlich
myCSharp.de-Mitglied

Dabei seit: 29.08.2004
Beiträge: 355
Entwicklungsumgebung: Visual Studio 2010


KRambo ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ka ich progge auch noch nich lange Managed DX smile
17.02.2005 20:45 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegt mehr als ein Monat.
hauptmann hauptmann ist männlich
myCSharp.de-Mitglied

Dabei seit: 19.07.2003
Beiträge: 704
Herkunft: Österreich/Kärnten

Themenstarter Thema begonnen von hauptmann

hauptmann ist offline Füge hauptmann Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Der Indexbuffer - Indizieren von Vertices

Diesmal sehen wir uns den sogenannten Indexbuffer an. Indexbuffer sind dazu da um Vertices zu reduzieren.
Bei einer Indizierung fallen nämlich doppelte Vertices weg und man kann so einen Vertexbuffer deutlich optimieren.
Nehmen wir an wir wollen zwei Dreiecke zeichnen. Grafisch würde das so aussehen:
1 2|4


0|3 5

Die Nummern geben dabei die einzelnen Vertices an. Für dieses Beispiel bräuchten wir also 6 Vertices in einem
Vertexbuffer. Jedoch fällt uns auf das zwei Vertices mit den selben Koordinaten zweimal im Vertexbuffer stehen.
Ist das nicht sinnloser Verbrauch von Speicherplatz? Deshalb erstellt man nun einen Indexbuffer in dem man
speichert, an welcher Position welcher Vertex ist. (sry, aber ihr solltet den Beitrag quoten oder die im zip beiliegende Tutorial.txt ansehen, dort wird die Tabelle richtig dargestellt -.- )
Index Wert Vertex
0 0 (x0,y0)
1 1 (x1,y1)
2 2 (x2,y2)
3 0 (x0,y0)
4 2 (x2,y2)
5 5 (x5,y5)

Wie wir in der Tabelle sehen müssen wir nur mehr 4 verschiedene Vertices speichern, nicht mehr 6 verschiedene.
In diesem Beispiel mag das nicht als viel erscheinen, aber wenn man große Objekte hat, kann man mit Indexbuffer
viel einsparen und sehr gut optimieren. Zu beachten ist aber, dass man jedoch 6 Indices braucht. In DirectX SDK
Hilfe wird übrigens empfohlen nur mit indizierten Vertices zu arbeiten. Und nun können wir bereits zu Praxis
kommen. Direct3D stellt uns die Klasse IndexBuffer zur Verfügung, um einen IndexBuffer zu erstellen. Wir werden
jedoch nicht direkt mit dem Indexbuffer arbeiten sondern verwenden ein Mesh Objekt. Ein Mesh Objekt ist einfach
eine Klasse die das Arbeiten mit Vertexdaten vereinfacht.

Code:
1:
Mesh Object;

Sehen wir uns nun die OnCreateDevice Funktion an. Hier erstellen wir zuerst 4 Vertices, danach 6 Indices und
speichern diese im Mesh Objekt:

Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
		public void OnCreateDevice(object sender, EventArgs e)
		{
			Device dev = (Device)sender;

			CustomVertex.PositionOnly[] verts = { 			
										new CustomVertex.PositionOnly(-1f,  0f, -1f),
										new CustomVertex.PositionOnly( 1f,  0f, -1f),
										new CustomVertex.PositionOnly( 1f,  0f,  1f),
										new CustomVertex.PositionOnly(-1f,  0f,  1f),
			};

			short[] indices = { 0,1,2,		// erstes Dreieck
								  0,2,3 };	// zweites Dreieck

Dieser Code bietet uns keine Probleme. Wir verwenden short Indices aus Speicherplatzgründen, da wird ja nur kleine
Werte brauchen(von 0 bis 3) und so müssen wir auf dem RAM der Grafikkarte pro Index nur 2 Bytes verwenden anstatt
4 Byte wie bei int. Die Zahlen im indices Array weisen auf die Vertices hin, die beim Zeichnen verwendet werden.
Für das erste Dreieck verwenden wir die Vertices 0, 1 und 2. Fürs zweite 0, 2 und 3.

Code:
1:
2:
3:
4:
5:
6:
7:
Object = new Mesh(indices.Length / 3,verts.Length,MeshFlags.WriteOnly,CustomVertex.PositionOnly.Format,
							  device);

			Object.VertexBuffer.SetData(verts,0,LockFlags.None);
			Object.IndexBuffer.SetData(indices,0,LockFlags.None);

		}

Hier erstellen wir ein neues Mesh Objekt und setzen die VertexBuffer und IndexBuffer Werte dafür. Die Parameter
des Mesh Konstruktors sind einfach:
Der erste Parameter gibt die Anzahl der Flächen eines Objektes an. Wir brauchen logischerweise 2 Flächen. Einmal
fürs erste Dreieck und einmal fürs Zweite.
Der zweite Paramter gibt dann die Anzahl der Vertices an. Der Dritte gibt sogenannte MeshFlags an. Diese können
dazu verwendet werden der Klasse gewisse Informationen zu geben, wie sie die Daten behandeln soll. Wir wollen nur
Daten in das Mesh Objekt schreiben, jedoch keine herauslesen. Dazu geben wir MeshFalgs.WriteOnly an. Das nächste
ist das Format der Vertexdaten. Der letzte Parameter gibt dann schließlich das Device an.
Danach greifen wir direkt auf den VertexBuffer und den IndexBuffer zu und setzen die Daten mit SetData.
Nun können wir auch schon zur Renderfunktion kommen.
Diese ist diesmal auch ganz einfach:

Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
			device.Clear(ClearFlags.Target , System.Drawing.Color.Blue, 1.0f, 0);
			
			device.BeginScene();

			device.Transform.View = Matrix.LookAtLH( new Vector3( 0.0f, 3.0f,-5.0f ), new Vector3( 0.0f, 0.0f, 0.0f ), new Vector3( 0.0f, 1.0f, 0.0f ) );
			device.Transform.Projection = Matrix.PerspectiveFovLH( (float)Math.PI / 4, 1.0f, 1.0f, 100.0f );

			device.Transform.World = Matrix.Identity;
			
			device.RenderState.CullMode = Cull.Clockwise;
			Object.DrawSubset(0);

			device.EndScene();
			device.Present();

Der Code bietet eigentlich nur vertraute Dinge -.-

Was ist jetzt jedoch wenn wir direkt aus einem VertexBuffer und einem IndexBuffer heraus rendern wollen? Dazu
können wir die Funktion DrawIndexedPrimitives verwenden (oder DrawIndexedUserPrimitives wenn wir ohne Vertexbuffer
arbeiten wollen). Doch um diese Funktion müssen wir uns erstmal nicht kümmern, da uns ja die Mesh Klasse die
meiste Arbeit abnimmt.

Wie immer gibt es das gesamte Visual Studio 2003 .net Projekt als zip zum Download.(achtung, ich verwende immer jeweils das neueste SDK dh für diese Version braucht ihr das April Update des SDKs, ich glaube aber das es mit älteren Ausgaben des SDK auch funktionieren sollte)


Dateianhang:
unknown MDXTutorial09.zip (9,40 KB, 262 mal heruntergeladen)
03.04.2005 21:35 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
SGT_BOB SGT_BOB ist männlich
myCSharp.de-Mitglied

Dabei seit: 10.03.2005
Beiträge: 125
Entwicklungsumgebung: SharpDevelop v2.2.0; MSVS2005
Herkunft: Aachen


SGT_BOB ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wow... alle Achtung für dieses Tut. Daumen hoch
Sowas hab ich schon lange gesucht. Mich würd mal interessieren wie lange du schon (C#) proggst und vor allem wie weit du das hier noch durchziehen möchtest. Ist doch ne ganze Menge Arbeit.
Hab mich mal vor die DX-Doku gesetzt, ist schon ziemlich viel was da drin steht großes Grinsen (alleine D3D betreffend). Respekt vor dem der sich da durch kämpft. verwundert

Wie gesagt, nur weiter so, bin gespannt...
04.04.2005 01:24 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
hauptmann hauptmann ist männlich
myCSharp.de-Mitglied

Dabei seit: 19.07.2003
Beiträge: 704
Herkunft: Österreich/Kärnten

Themenstarter Thema begonnen von hauptmann

hauptmann ist offline Füge hauptmann Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi!

Zitat:
Mich würd mal interessieren wie lange du schon (C#) proggst und vor allem wie weit du das hier noch durchziehen möchtest. Ist doch ne ganze Menge Arbeit.

So ca. 2.5 Jahre und schreiben will ich das halt solange ich Zeit und Lust habe -.-

Das Tutorial ist jetzt unter   Link verfügbar
11.04.2005 17:32 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Seiten (2): « vorherige 1 [2] Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 15 Jahre.
Der letzte Beitrag ist älter als 14 Jahre.
geschlossen (weitere Infos)


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 14.12.2019 00:32