Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Managed Direct3D Tutorial - Diskussionsthread

Moderationshinweis von herbivore (17.03.2014 - 15:46:19):

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#?

hauptmann
myCSharp.de - Member



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

Themenstarter:

Managed Direct3D Tutorial - Diskussionsthread

beantworten | zitieren | melden

Bitte ALLE Fragen und Diskussionen rund um das Managed Direct3D Tutorial in diesen Thread.
private Nachricht | Beiträge des Benutzers
anwesend
myCSharp.de - Member



Dabei seit:
Beiträge: 28
Herkunft: Österreich/NÖ

2D Sprites

beantworten | zitieren | melden

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();
Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von anwesend am .
private Nachricht | Beiträge des Benutzers
DerHulk
myCSharp.de - Member

Avatar #avatar-1789.png


Dabei seit:
Beiträge: 273
Herkunft: Koblenz

beantworten | zitieren | melden

Hallo hauptmann,

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

mfg Hulk
private Nachricht | Beiträge des Benutzers
Mystique
myCSharp.de - Member

Avatar #avatar-1933.png


Dabei seit:
Beiträge: 149
Herkunft: Stuttgart

beantworten | zitieren | melden

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?)
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Mystique am .
I cna tpye 300 wrods pre mnuite!
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Mystique, hallo zusammen,

der einleitende Satz:
Zitat
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
private Nachricht | Beiträge des Benutzers
Mystique
myCSharp.de - Member

Avatar #avatar-1933.png


Dabei seit:
Beiträge: 149
Herkunft: Stuttgart

beantworten | zitieren | melden

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!
private Nachricht | Beiträge des Benutzers
unclesam
myCSharp.de - Member



Dabei seit:
Beiträge: 238
Herkunft: Nassau

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von unclesam am .
heute code ich, morgen debug ich und übermorgen cast ich die königin auf int
private Nachricht | Beiträge des Benutzers
quibb
myCSharp.de - Member



Dabei seit:
Beiträge: 53
Herkunft: Wiesbaden

beantworten | zitieren | melden

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 ?
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo quibb,

[Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen)

herbivore
private Nachricht | Beiträge des Benutzers
quibb
myCSharp.de - Member



Dabei seit:
Beiträge: 53
Herkunft: Wiesbaden

beantworten | zitieren | melden

Ja das stimmt wohl!

hab den Fehler auch schon gefunden.

Gruesse
quibb
private Nachricht | Beiträge des Benutzers
ANSI_code
myCSharp.de - Member

Avatar #avatar-2839.jpg


Dabei seit:
Beiträge: 486
Herkunft: Bayern

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von ANSI_code am .
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
ANSI_code
myCSharp.de - Member

Avatar #avatar-2839.jpg


Dabei seit:
Beiträge: 486
Herkunft: Bayern

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von ANSI_code am .
private Nachricht | Beiträge des Benutzers
d3mon
myCSharp.de - Member



Dabei seit:
Beiträge: 1

beantworten | zitieren | melden

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.
Zitat
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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von d3mon am .
private Nachricht | Beiträge des Benutzers
shambl3r
myCSharp.de - Member



Dabei seit:
Beiträge: 23

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
yamukud
myCSharp.de - Member



Dabei seit:
Beiträge: 34

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

Zitat
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.
yamukud
myCSharp.de - Member



Dabei seit:
Beiträge: 34

beantworten | zitieren | melden

Oh, ich verstehe.

Danke,
yamukud
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5963
Herkunft: Leipzig

beantworten | zitieren | melden

Zitat von yamukud
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
private Nachricht | Beiträge des Benutzers
Versor
myCSharp.de - Member

Avatar #avatar-3129.gif


Dabei seit:
Beiträge: 24

beantworten | zitieren | melden

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!
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Versor am .
Attachments
Die geringste Abweichung vom Zustand der Vollkommenheit ist schon Schuld.
(Franz Kafka)
private Nachricht | Beiträge des Benutzers
fdsurfer
myCSharp.de - Member



Dabei seit:
Beiträge: 1
Herkunft: Karlsruhe

Super Tutorial....

beantworten | zitieren | melden

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:
Zitat
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
private Nachricht | Beiträge des Benutzers
Pureon
myCSharp.de - Member



Dabei seit:
Beiträge: 2
Herkunft: Emmerich am Rhein

beantworten | zitieren | melden

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 :
Fehler
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
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5963
Herkunft: Leipzig

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von MrSparkle am .
Weeks of programming can save you hours of planning
private Nachricht | Beiträge des Benutzers
TorresDennis
myCSharp.de - Member



Dabei seit:
Beiträge: 5

beantworten | zitieren | melden

Hallo Dieses Tutorial liegt ja weit zuruck, gibt es was Aktuelleres?
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo TorresDennis,

was MrSparkle im Beitrag über deinem gesagt hat, beantwortet deine Frage wohl hinreichend:
Zitat von MrSparkle
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#?

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
private Nachricht | Beiträge des Benutzers