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

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von maxE
Thema: Zusammenspiel von Material- und Lichteigenschaften
Am im Forum: Grafik und Sound

Na ja, ich stütze mich vorallem auf diverse Publikationen aus dem Netz und Computergrafikbücher von Alan Watt z.B. oder schau mir einfach Open-Source Raytracer wie PovRay oder YafRay an.

Thema: Zusammenspiel von Material- und Lichteigenschaften
Am im Forum: Grafik und Sound

Ja, ich schreib den Raytracer komplett in C#. Einige werden vielleicht murren und sagen das ist ja sooo langsam. Aber ich muss da widersprechen. Die Performance einbußen sind durchaus akzeptabel (um die 20% würd ich sagen - aber in Zukunft darf man ja auch auf noch bessere JITs hoffen )

Hab das Dingen erst mal mit C++ geschrieben, dann aber aufgegeben, weil ich ihn komplett modular machen wollte und Plugin-Programmierung in C++ ziemlich nervig ist.

Wenn er mal ein gewisses Stadium erreicht hat, werde ich ihn vielleicht bei den Projekten hier vorstellen.

Thema: Zusammenspiel von Material- und Lichteigenschaften
Am im Forum: Grafik und Sound

Uff, ich hab schon lang nichts mehr mit Direct3D gemacht.

Ich arbeite zur Zeit an einer etwas umfangreicheren Raytracing-Software (mit Monte Carlo Raytracing, Cook-Torrance-Shading, HDRI ...).
Mit dem selbst berechneten Beleuchtungsmodellen meinte ich, dass ich das alles von Hand in Software programmiere ohne hardwarebeschleunigten Scanlinerasterizer.

Deswegen sind meine Direct3D Kenntnisse etwas eingerostet und ich kann dir vorallem mit der Beantwortung von prinzipiellen Fragen zur 3D-Grafikprogrammierung dienen. Wie das dann in HLSL aussieht, musst du dir dann irgendwie selbst aus den Fingern saugen

Thema: Zusammenspiel von Material- und Lichteigenschaften
Am im Forum: Grafik und Sound

Wie die diffusen, ambienten, specularen Eigenschaften mit mem Material interagieren weiß ich auch nicht 100%, da ich meine Beleuchtungsmodelle meist selbst programmiere. Ich glaube aber, dass diese Werte mit den jeweils korrespondierenden Parametern des Materials moduliert werden.

Ohne Pixelshader kannst du die Beleuchtung nur auf Vertexebene berechnen. Wenn es echtes Perpixel-Lightning sein soll (mit allem Schnickschnack wie Gloss- und Bumpmapping), musst du das schon selbst programmieren. Das geht ganz gut mit Normaleninterpolation wie beim Phong-Modell (Stichwort: Tangent-Space)

Thema: Zusammenspiel von Material- und Lichteigenschaften
Am im Forum: Grafik und Sound

Das Beleuchtungsmodell, welches Direct3D verwendet, ist dem von Phong nachempfunden (aber auf Vertexebene nicht auf Pixelebene).

Dieses Modell setzt sich aus den 3 Komponenten zusammen, die du hier schon aufgezählt hast:

Ambient: Eine gleichmäßige Farbaufhellung über das gesammte Objekt hinweg. Wird eigentlich nur verwendet um die diffuse Interreflektionen zu faken (Global Illumination)

Diffuse: Wird einfach nach Lambert berechnet (Normale*Lichtvektor). Je flacher das Licht auf eine Oberfläche eintrifft, desto dunkler ist sie. Schau dir mal z.B. ein Ei neben einer Lichtquelle an . Seine Oberfläche ist ein typischer diffuser Reflektor.

Specular: Das sind die Glanzpunkte auf den Objekten.

Wie das berechnet wir, kannst du dir hier anschauen:
http://de.wikipedia.org/wiki/Phong_Shading
Die Materialparameter von Direct3D manipulieren die Koeffizienten ks, kd, ka und n

Für deine Kugel bedeutet das (als RGB):
diffuse = (0.0,0.0,0.5) (Dunkelblau)
specular = (1.0,1.0,1.0) (Weiß)
Für kleine Glanzpunkte specularen Exponenten hoch setzen. (Heißt in D3D glaube ich Power)
Eventuell noch etwas Ambient, damit die Schattenseite nicht komplett schwarz ist.

Thema: Mp3 Stream abspielen
Am im Forum: Grafik und Sound

So der Artikel ist online.
Ich hoffe das Beispielprogramm demonstriert die Verwendung von MCI ganz gut.

Thema: [Tutorial] Audio- und Videowiedergabe mit MCI
Am im Forum: Artikel

Audio- und Videowiedergabe mit MCI

Einleitung

Da immer wieder die Frage auftaucht, wie man denn MP3s, WMAs, Videos und CDs am einfachsten abspielen kann, habe ich mich entschlossen diesen Artikel zu schreiben.
Windows bietet ein sehr leistungsfähiges Interface zur Wiedergabe von digitalen Medien.
Diese Library ist bei jeder Windowsinstallation vorhanden.

Benötigte DLL-Importe

Um die gesamte Schnittstelle anzusprechen, brauch man nur eine C-Funktion, die wir mit Hilfe von DllImport einbinden:


[DllImport("winmm.dll")]
private static extern int mciSendString(string cmd, StringBuilder ret, int retLen, IntPtr hwnd);

Parameter:
  • cmd : Kommandostring, welches an den MCI Treiber übergeben wird (Dazu später mehr).
  • ret: Enthält Rückgabewert des ausgeführten Kommandos. Vor allem für Statusabfragen wichtig.
  • retLen: Länge des Rückgabewertes.
  • hwnd: Fensterhandle. Einige Kommandos erzeugen Events für die Windows-Nachrichtenschleife, wenn ein notify-Flag an das Kommando gehängt wird. Man kann sich zum Beispiel benachrichtigen lassen, wenn ein Mp3-Stream beendet wurde.

Nun gut, ich habe etwas gelogen
Wir werden für die Fehlerbehandlung noch eine 2. Funktion benötigen:


[DllImport("winmm.dll")]
private static extern int mciGetErrorString(int errCode, StringBuilder errText, int errLen);

Diese gibt uns lokalisierte Fehlertexte für einen bestimmten Fehlercode zurück. Wie das funktioniert, kann man im Quelltext nachlesen.

Kommandostrings

Wie schon gesagt, basiert MCI auf Kommandostrings, die mit mciSendString(…) versand werden. Zu den wichtigsten Kommandos gehören:
open
play
stop
pause
close

All diesen Kommandos können noch zusätzliche Parameter übergeben werden, die das Verhalten des Befehls genauer spezifizieren.
Beim open Kommando sieht das dann so aus:
open “C:\Videos\test.avi“ type mpegvideo alias VideoStream

Dieser Befehl öffnet die Datei test.avi und macht sie unter dem Alias VideoStream verfügbar. Diese Aliase sind für die weitere Ansteuerung über Kommandos wichtig. So kann man die Wiedergabe mit
play VideoStream fullscreen

beginnen und mit
stop VideoStream

wieder anhalten.
close VideoStream

schließt unseren Stream.

Das schöne an der Sache ist, dass diese Syntax für fast alle Medientypen mehr oder minder identisch ist. Auch MP3s und CDs lassen sich damit abspielen (siehe Quellcode).

Der zusätzliche Parameter fullscreen im Play-Kommando ist optional und entscheidet nur darüber, ob das Video im Vollbildmodus abgespielt wird oder nicht.

Für Audio-CDs kann man auch die CD Klappe öffnen und schließen. Dazu sendet man einfach folgende Kommandos:
set cdaudio door open
und
set cdaudio door closed

Alle Befehlsstrings zu behandeln, würde hier wohl den Rahmen sprengen. Auf MSDN werden sie alle ausführlich beschrieben:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_mci_reference.asp

Beispielprogramm

Ich habe für diesen Artikel einen kleinen Multimedia-Player geschrieben, der die Verwendung der MCI-Bibliothek demonstriert:

// Update (18.06.05): Habe einen Bug im Programm entfernt. Der Player sollte jetzt besser mit aufretenden Fehlern umgehen (z.B. wenn keine CD eingelegt ist)

Thema: Mp3 Stream abspielen
Am im Forum: Grafik und Sound

Geduldet euch nur
Ich setze den Artikel heute Abend online.
Er wird auch erklären, wie man die aktuelle Abspielposition ermittelt.
Ein kleiner simpler Medien-Player, mit dem man Videos, MP3s, WMAs und CDs abspielen kann, werd ich mit zum Artikel packen.

Thema: XML Im-Export + Verwendung Wie?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Nur weil du XML verwendest, musst du nicht auf das getrennte Abspeichern von Profilen verzichten. Nicht ohne Grund hat jeder Anwender einen eigenen ApplicationData Order in seinem Homeverzeichnis.

Im Forum wurde das schon oft diskutiert:
Einstellungen in *.config ändern
Userdaten permanent sichern

Thema: Longhorn
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Die Entwicklerbibliotheken, .NET Framework Beta 2.0.

Diese WinFX/Longhorn Geschichte ist zur Zeit nur für Entwickler die mit dem neuen Framework herumspielen wollen. Es hat in Produktivanwendungen eigentlich nichts zu suchen.
Warte bis Longhorn releast wird, dann kannst du auch deine WinFX Anwendungen auch an andere verteilen.

Thema: Mp3 Stream abspielen
Am im Forum: Grafik und Sound

Ich schreib den Artikel trotzdem, da solche Fragen ja immer wieder auftauchen.
Die Wrapper Klasse werd ich noch um einige zusätzliche Features erweitern. CD-Audio, Video, usw. ...

Thema: Mp3 Stream abspielen
Am im Forum: Grafik und Sound

Hmm, könnte ich eigentlich machen
In Kürze werd ich da mal nen Artikel schreiben.

Thema: Mp3 Stream abspielen
Am im Forum: Grafik und Sound

Warum kompliziert, wenn es einfach geht:
Windows kann das auch mit Bordmitteln:

http://www.vbarchiv.net/archiv/tipp_499.html
http://www.gamedev.net/reference/articles/article2053.asp

Thema: Visualisierungen programmieren
Am im Forum: Grafik und Sound

Code hab ich leider nicht.

Aber wie gesagt:
1. Irgendwelche Geometrie synchron zur Musik in eine Back-Surface schreiben (Kreise, Linien, ...)
2. Neue Pixelposition aus alter Position anhand der Movelist bestimmen.
3. Blur, Median, ColorFade oder andere Filter drüber legen.
4. Anzeigen
5. Gehe zu Schritt 1.

Im DirectX SDK ist ein Beispiel für ein MediaPlayer Plugin. Basiert aber nicht auf Movelists, sondern ist eine Spektrumvisualisierung in 3D.

Thema: Fragen zu GDI+
Am im Forum: GUI: Windows-Forms

Zitat
Gibt es eine Möglichkeit, GDI+ Elemente anhand des Mittelpunktes und nicht des Randes zu positionieren?
Ja, du musst halt den Mittelpukt des Objekts von Hand bestimmen und dann dein Objekt danach ausrichtung.
Zitat
Kann man GDI+ Elemente in den Hintergrund oder Vordergrund stellen?
Leider hat GDI+ keinen Z-Buffer. (Avalon wird dieses Problem wohl irgendwann beheben). Aber es gibt andere Möglichkeiten: Ich sag nur Painters-Algorithm. Zeichne einfach die Objekte, die weiter hinten liegen zuerst und die weiter vorn sind zuletzt.
Zitat
Könnte man mit GDI+ auch in Polarkoordinaten arbeiten?
Ja, kann man. Du musst die Koordinaten nur von Polarkoordinaten in Kartesische umrechen:

http://de.wikipedia.org/wiki/Polarkoordinaten

Thema: Visualisierungen programmieren
Am im Forum: Grafik und Sound

Die Standardvisualisierung von MediaPlayer nutzt sogenannte Movelists und diverse Filter wie Blur.
Die Movelist is nix weiter als ein 2D Array, das Bewegundsvektoren enthält.
Nach jedem Frame wird das neue Bild aus der Position der alten Pixeln und den Bewegungsvektoren aufgebaut. Die MoveList kannst du mit diversen Funktionen wie sin und cos, ... vorberechnen.
Danach kannst du noch ein bissl Postprocessing machen: Weichzeichen mit dem Gaussfilter z.B.

Schau dir mal WinAmp an, da kannst du solche Visualisierungen sogar zusammenstellen.

Thema: Dokumente erstellen, geht das nur mit Crystal Reports?
Am im Forum: Datentechnologien

Soweit ich weiß kann Report.NET auch Tabellen mit dem TableLayoutManager generieren.
Ein Beispiel, wo aus einer Datenbank eine Tabelle erstellt wird, ist auch dabei (Siehe CHM-File).

Hier der Download von Source, Binary und Docu:

http://sourceforge.net/project/showfiles.php?group_id=58374&package_id=54212

Thema: dll's einsehen
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Shau mal nach nem Programm das PE Explorer oder Dll Viewer heißt.

Thema: Dokumente erstellen, geht das nur mit Crystal Reports?
Am im Forum: Datentechnologien

Wenn es nur darum geht Dokumente zu erstellen, dann kannst du Report.NET nehmen:
http://report.sourceforge.net/
Die Lib erzeugt dynamisch PDF-Dateien.

Thema: Sehr verwirrendes 3D Modell
Am im Forum: Grafik und Sound

Z-Buffer kannst du mit ClearFlags.ZBuffer löschen. ClearFlags.Target löscht nur den Pixelbuffer.

Thema: Sehr verwirrendes 3D Modell
Am im Forum: Grafik und Sound

Löschst du den ZBuffer auch nach jedem Frame?
Ist die Orientierung deiner Polygone OK (CCW vs. CC)?

Thema: [Fun] nette Bewerbung...
Am im Forum: Smalltalk

Ziemlich witzig...
Aber das mit dem Singen sollte er lassen

Thema: Vertex-Normale berechnen
Am im Forum: Grafik und Sound

Das Berechnen der Vertexnormalen läuft meist in drei Schritten ab:

1. Berechne die Oberflächennormale eines Dreiecks (nicht mit Vertexnormale verwechseln) und speichere sie in einer Liste. (Simples Kreuzprodukt)
2. Durchlaufe alle Vertices und addiere alle Dreiecksnormalen der anliegenden Dreicke, die sich den aktuellen Vertex teilen.
3. Alle Vertexnormalen normieren.

Den 2. und 3. Punkt brauchst du nur wenn es Gouraud Shading sein soll. Bei Flatshading reicht Punkt 1.

Thema: Startbildschirm
Am im Forum: GUI: Windows-Forms

Die deluxe Variante:

http://www.codeproject.com/csharp/PrettyGoodSplashScreen.asp

Thema: C++ DLL Aufruf in C#
Am im Forum: Rund um die Programmierung

Wenn du einen Funktionszeiger als Paramter für eine andere Funktion übergeben willst (Callback-Funktion), dann musst du einen Delegaten nutzen.
Wie sowas aussieht kannst du hier sehen:
http://www.dotnet247.com/247reference/msgs/55/276613.aspx

Im 2.0 Framework gibt es sogar die Möglichkeit einen nativen Function-Pointer direkt in einen Delegaten umzuwandeln.

Thema: C++ DLL Aufruf in C#
Am im Forum: Rund um die Programmierung

Für void* schreibt man IntPtr wenn es safe Code sein soll.
Wenn du deinen Code als unsafe markierst, kannst du auch ganz normal Pointer nehmen.

Wichtig ist nur, dass die Funktionen wenn sie mit nem C++ Compiler kompiliert wurden, als extern "C" deklariert werden. (Stichwort: Name Mangling)

tvar, app und Andere kannst du natürlich nicht nutzen. Du musst schon die Datentypen des CTS nehmen

Außerdem solltest du auch auf den richtigen Namen für die Funktion achten. In deinem Code unten heißt die Funktion die du lädst "VSetVariable". In deinem C#-Code schreibst du aber nur "SetVariable". (EntryPoint benutzen)

DllImport noch mal kurz erklärt:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcwlkSysimportAttributeTutorial.asp

Thema: Pflichtenheft
Am im Forum: Smalltalk

Frag doch einfach die Koogel

http://www.infosun.fmi.uni-passau.de/br/lehrstuhl/Kurse/sep_ws0405/samples/pflichtenheft.pdf

Thema: DirectSoun
Am im Forum: Grafik und Sound

Setz mal den CooperativeLevel von Exclusive auf Normal.

Thema: FYI: MonoDevelop ... GUI-Designer
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Golem? Du meinst wohl Gnome

Der Initiator von Mono heißt Miguel de Icaza. Er arbeitet bei Ximian (entwickeln vorallem Software für Linux: Ximian Evolution ...).
Früher hat er Gnome ins Leben gerufen, weil es damals noch keinen echten freien Desktop für Linux gab und die Qt-Bibliotheken von Trolltech noch unter einer kommerziellen Lizenz verteilt wurden.

Thema: Diese Community aufpolieren
Am im Forum: Wünsche und Kritik

Er meint sicherlich Tutorials als Artikel wie z.B auf Codeproject.
Die jetzigen Tutorials sind ja eigentlich nichts weiter als Forumseinträge.