Laden...

Managed Direct3D Tutorial - Diskussionsthread

Erstellt von hauptmann vor 16 Jahren Letzter Beitrag vor 10 Jahren 21.974 Views
Hinweis von herbivore vor 10 Jahren

Managed DirectX ist eine veraltete Technologie, die von Microsoft schon viele Jahre nicht mehr unterstützt wird. Hier gibt es eine Übersicht der Alternativen: [FAQ] Wie finde ich den Einstieg in die 3D-Programmierung mit C#?

H
hauptmann Themenstarter:in
704 Beiträge seit 2003
vor 16 Jahren
Managed Direct3D Tutorial - Diskussionsthread

Bitte ALLE Fragen und Diskussionen rund um das Managed Direct3D Tutorial in diesen Thread.

[last.fm](http://www.last.fm/user/hauptmanAlpha/)
A
28 Beiträge seit 2006
vor 16 Jahren
2D Sprites

Das Tutorial ist super, auch wenn ich es nur bis Kap 2 brauche 😉 (und die Textures)
vielleicht sollte man auch sagen das bei mit kein
CreateFlags.HardwareVertexProcessing
sondern nur der software processing geht ... 😉

jedenfalls meine frage:

gibt es eine ganz einfache art ein sprite auf dem bildschirm darzustellen?
(sprite-klasse? - wie funktioniert die) und wie funktioniert das dann mit ner mask

und gleich noch was 😉 ist bei DX auch eine kollisionserkennung dabei wenn man eine mask für das bild macht?
(erkennung ob sich die jpg/bmps überschneiden... aber nur der "ausgestanzte" teil)

MFG Thomas

Edit:

weis schon wie das anzeigen funktioniert:

zwischen dem begin und end:


m_Device.BeginScene();

Texture tex = TextureLoader.FromFile(m_Device,@"..\..\..\res\slime.bmp";);
Point pnt = new Point(1, 1);
Sprite spr = new Sprite(m_Device);

spr.Begin(SpriteFlags.None);
spr.Draw2D(tex, pnt, 0, pnt, Color.White);
spr.End();

m_Device.EndScene();

270 Beiträge seit 2005
vor 16 Jahren

Hallo hauptmann,

wollte mal fragen ob und wenn ja wann das Tutorial erweitert wird ?
Ist ein super Artikel!

mfg Hulk

148 Beiträge seit 2006
vor 16 Jahren

Hey Hauptmann 🙂

in deinem Artikel behandelst du leider noch nicht das speichern eines Mesh in ein .x-File. Ich hab auch schon hier im Forum gesucht und auch im Netz aber irgendwie scheinen da mehrere Probleme damit zu haben und keiner hat wirklich eine Lösung.. es kann doch nicht so schwer sein..

ich habs probiert mit Mesh.Save

und so sah mein Aufbau aus..


int [] adj = new int [itsMesh.NumberFaces * 3]; 

itsMesh.GenerateAdjacency(0, adj);

ExtendedMaterial[] em = new ExtendedMaterial[0];

itsMesh.Save(theFileName, adj, em, XFileFormat.Binary); 

ich krieg allerdings schon bei "GenerateAdjacency" eine "InvalidCallException" und hab keine Ahnung wieso.. in allen Beispielen die ich im Netz gefunden hab, wird das so gemacht.. vielleicht ne Ahnung / nen Tip?

greetz..

[Edit] ich muss dazu noch erwähnen, dass ich noch mit 1.1 arbeite.. hab sowas gelesen, dass in 2.0 Mesh.Save weg is und das nu anders gelöst wurde..

[Edit2] noch eine Feststellung.. wenn ich ein Mesh mit Mesh.Sphere erzeuge oder wenn ich ein Mesh aus einem bestehenden .x-File lade und dann das gleiche wie oben mache, dann funktionier das Speichern.. und liefert auch gewünschtes Ergebnis.. Nur mein selber erzeugtes Mesh mag nicht.. Das Mesh kann ich aber super darstellen und damit machen was ich will, funktioniert alles prima.. nur beim GenerateAdjacency eben nicht.. was kann denn da schief gegangen sein? (zu viele punkte werdens ja wohl nicht sein?)

I cna tpye 300 wrods pre mnuite!

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Mystique, hallo zusammen,

der einleitende Satz:

Bitte ALLE Fragen und Diskussionen rund um das Managed Direct3D Tutorial in diesen Thread.

ist so zu verstehen, dass dieser Thread für Fragen, Hinweise und Diskussionen zum Tutorial selbst gedacht ist. Also z.B. dass das Tutorial hinsichtlich des Speichern von Meshes erweitert werden sollte, oder das der Abschnitt xy zu schwer verständlich oder zu ungenau ist, o.ä ... und nicht zuletzt natürlich auch für Lob. 🙂

Wenn du/ihr ein konkretes Problem mit der Programmierung von DirectX habt und die Forensuche nicht hilft, öffnet bitte einen eigenen Thread in "Grafik und Sounds".

herbivore

148 Beiträge seit 2006
vor 16 Jahren

Hallo herbivore..

🙁 mein Fehler.. ich war mir zunächst auch unsicher ob ich das jetzt hier posten soll oder ob ich einen neuen Thread eröffnen soll.. war wohl die falsche Entscheidung.. sorry 🙁

Problem übrigens (wie es so meistens ist.. ich such mir nen Tag lang nen Ast ab, dann poste ich das Problem und 5 mins später find ich die Lösung X( ) mittlerweile gelöst..

Beim Erstellen des Meshes hab ich das falsche Flag übergeben..

mit MeshFlags.WriteOnly hat es nicht funktioniert.. umgeändert in MeshFlags.SimplifyFace funktioniert es jetzt.. falls mal jemand vor ähnlichem Problem steht..

greetz..

I cna tpye 300 wrods pre mnuite!

U
237 Beiträge seit 2007
vor 16 Jahren

hallo hauptmann,

bin grad dein Tutorial zu directx am durcharbeiten und erhalte eine BadImageFormatException in den Methoden InitGfx und Render. Da ich momentan Vista benutze und dort ja auch Directx10 vorhanden ist, weiß ich jetzt nicht ob es an mir liegt und ich die falsche DLL eingebunden habe, oder ob dir dieser "Anfängerfehler" bekannt ist und an der falschen Programmierung meinerseits liegt.

EDIT: hab grad dank der Hilfe von Hauptmann die Lösung gefunden. Das Problem ist die 64bit Version von Vista.

Hilfe

heute code ich, morgen debug ich und übermorgen cast ich die königin auf int

Q
53 Beiträge seit 2007
vor 16 Jahren

Hey.

also irgentwie kommt bei mir immer dieser Fehler:

C:\Dokumente und Einstellungen...\main.cs(4,8): error CS1518: Expected class, delegate, enum, interface, or struct

das ganze auf

public void InitGfx() {

bezogen.

Bin gerade auf VS .NET '05 umgestiegen, jmd. selbiges Problem ?

49.485 Beiträge seit 2005
vor 16 Jahren
Q
53 Beiträge seit 2007
vor 16 Jahren

Ja das stimmt wohl! 🙂

hab den Fehler auch schon gefunden.

Gruesse
quibb

467 Beiträge seit 2007
vor 15 Jahren

tut mir leid, aber ich verstehe diesen Aufruf nicht:

    while(example.Created)
    {
        example.Render();
        Application.DoEvents();
    }
    example.Shutdown();

wieso sollte man die Form(Kann man das noch so bezeichnen?) ständig neuzeichen, und warum verschwindet im 2. Bsp. das Dreieck, wenn man die größe ändert, wo das Teil doch ständig neugezeichet wird? Ich glaube ich habe irgendwas von Grundaus falsch verstanden.

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo ANSI_code,

in einem reinen Windows-Forms Programm, würde man so eine Schleife vermeiden. Stattdessen würde man als Haupt(nachrichtenverarbeitungs)schleife Application.Run verwenden. In DirectX-Programmen ist ein Aufbau mit einer Hauptschleife, die ständig neu zeichnet, das normale.

herbivore

467 Beiträge seit 2007
vor 15 Jahren

und warum verschwindet das Dreieck dann, wenn man die Größe ändert? (bei bsp. 2.)

edit: Wie ändert man die Windowed Eigenschaft? Einfach false zuweisen wirft eine Dirext3D.InvalidCallException im Device-Konstruktor.Aufruf.

D
1 Beiträge seit 2008
vor 15 Jahren

Hallo Community,
Ich bin neu hier, und bin gerade dabei das Tutorial durchzuarbeiten. Leider hab ich schon bei dem Ersten Programm einein Fehler den ich nicht lösen kann.

Fehler 1 Der Name "DXSampleApp_KeyPress" ist im aktuellen Kontext nicht vorhanden. E:\temp\tutorialDX\tutorialDX\MDXSampleApp.cs 20 59 tutorialDX

Ich mein es ist mir klar, dass er DXSampleApp_KeyPress nirgends findet, das hab ich auch nirgends definiert, aber ich find in dem Tutorial auch nichts, das ich ausgelassen habe..

Also was genau muss ich nun machen, um das Programm zum laufen zu bekommen?

//edit:
Wurde gelöst. Hab das mit den Eventhandler nicht gesehen, dass der weiter unten einen anderen Namen hat.

gruß d3mon

S
23 Beiträge seit 2008
vor 15 Jahren

Hallo,

beschäftige mich auch grad mit dem Tutorial leider tritt bei mir jedesmal ein System.OutOfMemoryException auf und zwar durch den Aufruf von box.DrawSubset(0)

Weiß jmd woran das liegen könnte?

Y
22 Beiträge seit 2009
vor 13 Jahren

Schönes Tutorial, auch wenn es hinsichtlich DirectX10/64-bit erweitern könnte.

Danke für die Arbeit und einen tollen Einblick in die Direct-X-Welt.

Wenn das nun OpenSource wäre... Ich schweife ab!

Noch kurz zum Schmunzeln:
In jedem 2. Absatz schreibst du "Bis hierhin wars ja langweilig" 😉 😃

Lg und da Ostern schon vorbeigerauscht ist im Voraus ein schönes Pfingstfest,

yamukud

Gelöschter Account
vor 13 Jahren

auch wenn es hinsichtlich DirectX10/64-bit erweitern könnte.

MDX wird schon seit direcX ?8? nciht mehr weiterentwickelt... alternativen bietet das XNA framework und viele andere .net grafikengines.

Y
22 Beiträge seit 2009
vor 13 Jahren

Oh, ich verstehe.

Danke,
yamukud

5.657 Beiträge seit 2006
vor 13 Jahren

Schönes Tutorial, auch wenn es hinsichtlich DirectX10/64-bit erweitern könnte.

Danke für die Arbeit und einen tollen Einblick in die Direct-X-Welt.

Wenn das nun OpenSource wäre...

Dann wäre evtl. SlimDX etwas für dich, da sind diese Features alle drin. Im Gegensatz zu XNA.

Weeks of programming can save you hours of planning

24 Beiträge seit 2010
vor 13 Jahren

Hallo,
ich habe beschlossen, nach etlichen Jahren wieder etwas für meine Programmierkenntnisse zu tun. Leider fällt das Anknüpfen etwas schwer.

Umso mehr freue ich mich, daß es hier so eine tolle Community gibt (bißchen Schleimen muß sein). Leider macht mir die Fehlersuche noch etwas Probleme. Und bei diesem Tutorial hab ich ein für mich "unlösbares" Problem.

Ich arbeite mit Win7 64bit und einer Zweikern-Graka. Ich habe das Problem, daß ich bei Schritt 2 des Tuts nur einen schwarzen Hintergrund, aber kein Dreieck sehe, wenn ich über den Grafik-RAM rendern will. Über den System-RAM funzt aber alles blendend.

Liegt es am System - oder an meinen mangelhaften Programmierkenntnissen?

Folgendes ist mir noch aufgefallen:
Bei beiden Rendermethoden wird das Resultat erst nach dem zweiten Durchlauf der Paint-Schleife angezeigt. Nach dem ersten Durchlauf hab ich nur ein Fenster mit grauem Hintergrund. Das auskommentierte "this.Invalidate(); " behebt das, aber dann wird ununterbrochen neu gezeichnet - auch ohne Änderung.
Beim Einzelschritt-Debuggen sehe ich, daß nach dem Befehl

stream.Write(verts);

in Zeile 66 direkt in die Paint-Methode gesprungen wird. Das

m_VertexBuffer.Unlock();

wird nie aufgerufen. (Klar, wir benutzen den Puffer ja während der ganzen Renderzeit - aber wofür brauchen wir dann den Befehl überhaupt?)

Ich mußte die Sache für VS 2010 Express etwas umstricken. Leider unterstützt .Net4 momentan noch nicht (voll) DirectX. Ich mußte auf .Net 3.5 zurückstellen, erhalte deshalb ein paar Warnungen - aber es läuft überhaupt.
Den Destruktor in Zeile 30 brauche ich glaub ich nichtmal - aber bin mir nicht sicher, deshalb bleibt er vorerst.

Das Projekt hab ich mal im Anhang hochgeladen...

Vorab schonmal vielen Dank

EDIT 20.06.2010: Das halte ich jetzt im Kopf nicht aus. Ich habe jetzt die Sache mal ignoriert und bin im Tutorial einfach mal weiter vorgegangen. Bei Schritt 3 geht es ja um die Transformationen. Diese werden dort aber ohne Stream erklärt - also dachte ich mir, ich bastel dort einfach mal die Infos aus dem Schritt 2 rein - und siehe da: Er rendert!!!
OK, so nicht - zumindest nicht mit mir! 🤔 Jetzt vergleiche ich den Schritt 2 und Schritt 3 1:1. Alles scheint genauso aufgebaut. Ich kommentiere mal die Transformationssachen aus Schritt 3 aus - jetzt habe ich quasi 2x das gleiche Programm. Nur, daß Schritt 2 IMMERNOCH nicht aus dem GrafikRAM rendert. ZEFIX. Also ändere ich den VertexType auf PositionColored (anstelle TransformedColored aus dem Tutorial). Und plötzlich erscheint doch auch tatsächlich das Dreieck auf dem Schirm.
Falls also jemand ein ähnliches Problem haben sollte, hier wäre eine Lösung. Ich weiß aber nicht, warum das so ist. Ich vermute, hier gibt es einfach ein Problem in der DX-Bibliothek.
Jetzt bin ich heiß - ich brauche mehr Wissen. Ich muß unbedingt weiterlesen!
Danke nochmal für das geniale Tutorial - und daß hier keiner geantwortet hat. So habe ich mich wenigstens selbst mit der Materie befaßt!

Die geringste Abweichung vom Zustand der Vollkommenheit ist schon Schuld.
(Franz Kafka)

F
1 Beiträge seit 2010
vor 13 Jahren
Super Tutorial....

Hallo,

ich bin eigendlich Entwickler für µCs. Zur Anzeige benutzen wir C#. Ich habe bereits viele habe das Tipps von hier (www.mycsharp.de) bekommen.
Derzeit sind wir dabei ein sehr einfaches Spiel für unseren Sensor zu basteln. Dafür habe ich mich für das DirectX entschieden. Das Tutorial ist echt gut. Ich habe es recht schnell geschafft mein Spiel für den Sensor zu basteln.

Jetzt haben wir ein Netbook gekauft auf dem Windows 7 (DirectX 11) läuft. Leider ist es mir bisher nicht gelungen, mein auf einem WinXP System (DirectX 9) laufenden Code dort einzusetzten.
Ich habe mir bereits das neueste SDK herunter geladen und bin aber nicht weiter gekommen. Hat schon mal wer einen Code auf Win7 erstellt??

Ich habe die Zeile:

device = new Device(0, DeviceType.Hardware, panalDrawing, CreateFlags.HardwareVertexProcessing, presentParams);

in einem try / catch block unter gebracht. Dabei bricht mir der Code an der Stelle ab!

Die Meldung lautet:

Error in the application.
-2005530516 (D3DERR_INVALIDCALL)
at Microsoft.DirectX.Direct3D.Device..ctor(Int32 adapter, DeviceType deviceType, Control renderWindow, CreateFlags behaviorFlags, PresentParameters[] presentationParameters)
at ProxdimmDX_Test.ProxDimmDX_Display.setDevice() in D:\proxdimmdx_tester\proxdimmdx_test code\ProxdimmDX_Test\ProxDimmDX_Display.cs:line 391

Hat da wer eine Idee?

Gruß,
fdsurfer

P
2 Beiträge seit 2012
vor 10 Jahren

Hi !

Ich hoffe, mein Post ist so in etwa richtig erstellt !

Eine wichtige Frage :

Wie schon oben einmal beschrieben, habe ich auch das Problem, dass ich bei

example.InitGfx();

eine Ausnahme erhalte in der steht :

Fehlermeldung:
BadImageFormatException wurde nicht behandelt.
ist keine zulässige Win32-Anwendung. (Ausnahme von HRESULT: 0x800700C1)

Gut, scheinbar läuft mein Programm auf 64bit, nur habe ich keinen Schimmer,
wie ich mein Projekt in 32bit laufen lassen kann.

Wäre schön, wenn mir da einer hilft !

Schöne Grüße, Stefan

5.657 Beiträge seit 2006
vor 10 Jahren

Hi Pureon,

im VisualStudio kannst du die Zielplattform zwischen x86 und x64 umstellen. Von Managed DirectX würde ich dir aber unbedingt abraten. Das ist eine veraltete Technologie, die von Microsoft schon viele Jahre nicht mehr unterstützt wird. Hier gibt es eine Übersicht der Alternativen: [FAQ] Wie finde ich den Einstieg in die 3D-Programmierung mit C#?

Christian

Weeks of programming can save you hours of planning

T
5 Beiträge seit 2014
vor 10 Jahren

Hallo Dieses Tutorial liegt ja weit zuruck, gibt es was Aktuelleres?

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo TorresDennis,

was MrSparkle im Beitrag über deinem gesagt hat, beantwortet deine Frage wohl hinreichend:

Von Managed DirectX würde ich dir aber unbedingt abraten. Das ist eine veraltete Technologie, die von Microsoft schon viele Jahre nicht mehr unterstützt wird. Hier gibt es eine Übersicht der Alternativen:
>

Wenn Tutorials du anderen Technologien benötigst, dann suche bitte im Netz zunächst selbst danach. Solltest du wider erwarten nicht fündig werden, kannst du in Buchempfehlungen (und nur dort) nach passenden Tutorials fragen.

herbivore