myCSharp.de - DIE C# und .NET Community (https://www.mycsharp.de/wbb2/index.php)
- Entwicklung (https://www.mycsharp.de/wbb2/board.php?boardid=3)
-- Grafik und Sound (https://www.mycsharp.de/wbb2/board.php?boardid=25)
--- Managed Direct3D Tutorial - Diskussionsthread (https://www.mycsharp.de/wbb2/thread.php?threadid=35490)


Geschrieben von hauptmann am 18.04.2007 um 20:39:
  Managed Direct3D Tutorial - Diskussionsthread
Bitte ALLE Fragen und Diskussionen rund um das  Managed Direct3D Tutorial in diesen Thread.


Geschrieben von anwesend am 24.04.2007 um 19:21:
  2D Sprites
Das Tutorial ist super, auch wenn ich es nur bis Kap 2 brauche Augenzwinkern (und die Textures)
vielleicht sollte man auch sagen das bei mit kein
CreateFlags.HardwareVertexProcessing
sondern nur der software processing geht ... Augenzwinkern

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 Augenzwinkern 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:

C#-Code:
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();


Geschrieben von DerHulk am 30.04.2007 um 20:22:
 
Hallo hauptmann,

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

mfg Hulk


Geschrieben von Mystique am 24.05.2007 um 08:49:
 
Hey Hauptmann smile

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

C#-Code:
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?)


Geschrieben von herbivore am 24.05.2007 um 09:05:
 
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


Geschrieben von Mystique am 24.05.2007 um 09:17:
 
Hallo herbivore..

unglücklich 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 unglücklich

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 enttäuscht ) 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..


Geschrieben von unclesam am 03.07.2007 um 22:16:
 
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


Geschrieben von quibb am 11.07.2007 um 12:32:
 
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

C#-Code:
public void InitGfx() {

bezogen.

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


Geschrieben von herbivore am 11.07.2007 um 12:36:
 
Hallo quibb,

 [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen)

herbivore


Geschrieben von quibb am 11.07.2007 um 13:21:
 
Ja das stimmt wohl! smile

hab den Fehler auch schon gefunden.

Gruesse
quibb


Geschrieben von ANSI_code am 02.05.2008 um 21:24:
 
tut mir leid, aber ich verstehe diesen Aufruf nicht:

C#-Code:
    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.


Geschrieben von herbivore am 03.05.2008 um 08:06:
 
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


Geschrieben von ANSI_code am 03.05.2008 um 11:27:
 
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.


Geschrieben von d3mon am 01.06.2008 um 18:00:
 
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


Geschrieben von shambl3r am 08.01.2009 um 09:52:
 
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?


Geschrieben von yamukud am 07.04.2010 um 11:06:
 
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


Geschrieben von JAck30lena am 07.04.2010 um 11:10:
 
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.


Geschrieben von yamukud am 07.04.2010 um 11:17:
 
Oh, ich verstehe.

Danke,
yamukud


Geschrieben von MrSparkle am 07.04.2010 um 11:58:
 
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.


Geschrieben von Versor am 06.06.2010 um 12:53:
 
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 funktioniert 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

C#-Code:
stream.Write(verts);

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

C#-Code:
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! verwundert 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!


Geschrieben von fdsurfer am 14.06.2010 um 17:50:
  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:

C#-Code:
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


Geschrieben von Pureon am 08.10.2013 um 19:10:
 
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

C#-Code:
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


Geschrieben von MrSparkle am 08.10.2013 um 19:27:
 
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


Geschrieben von TorresDennis am 17.03.2014 um 08:33:
 
Hallo Dieses Tutorial liegt ja weit zuruck, gibt es was Aktuelleres?


Geschrieben von herbivore am 17.03.2014 um 15:45:
 
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


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 12.12.2019 17:40