PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 3D-Modellierung


BAGZZlash
2007-10-18, 22:29:20
Hi!

Ich bin nicht sicher, ob das hier das richtige Subforum ist, ggf. moven!

Also, es geht darum: Ich hab' 'ne kleine 3D-Engine zusammenprogrammiert, bei der ich natürlich auch Polygone (Dreiecke) als Datentyp instanziiert habe. Hier kann man dann für jeden der drei Eckpunkte jeweils die X-, Y- und Z-Koordinate eingeben. Hiermit will ich natürlich jetzt irgenwelche halbwegs sinnvollen 3D-Modelle anzeigen lassen. Leider hört mein Vorstellungsvermögen, wo die Koordinaten liegen müssen, schon bei einfachen Polyedern auf. Ein einfacher, stilisierter Vogel stellt mich da schon vor unlösbare Probleme. Daher suche ich in erster Linie ein möglichst einfach zu bedienendes Programm, in dem ich Drahtgittermodelle basteln kann, also mit drehbarer Ansicht am besten, so daß ich die Koordinaten dann einfach ablesen und in mein Programm eingeben kann. Wer weiß, was ich da am Besten nehme?

Bitte erschlagt mich nicht mit Fachbegriffen: Ich bin KEIN Informatiker, sondern nur ein kleiner Hobbyprogrammierer, d.h. ich mache das alles nur zum Spaß. :smile:

Ach so, noch 'ne zweite Frage am Rande: Gerade solche 3D-Modelle wie Ikosaeder oder so, die also mathematisch gesehen einfach, per Hand zu modellieren aber zeitaufwendig sind, muß man doch irgendwie effizient berechnen können. Kennt da jemand 'ne Funktion/'nen Algo, bei dem am Ende Koordinaten für sowas 'rauskommen?

Gast
2007-10-18, 22:39:18
Schau Dir als Tool mal AC3D auf

http://www.inivis.com/

an. Kann 14 Tage getestet werden und kostet nicht die Welt, falls es dir gefällt

Monger
2007-10-18, 22:39:37
Genau für den Zweck gibt es Programme wie Maya oder 3DS Max. Die darin gebastelten Modelle können dann über entsprechende Plugins in Datenformate transferiert werden, die deine Engine (hoffentlich) lesen kann.

Die passenden Import Plugins zu schreiben, und dann sinnvoll zu verknüpfen ist eigentlich der entscheidende Schritt bei einer Engine. Wenn du den Gedankengang bis zum bitteren Ende gehst, hast du irgendwann mal einen Leveleditor! ;)

ScottManDeath
2007-10-18, 23:11:53
Du kannst Dir auch mal das obj Datei format ansehen. Es ist ein einfaches Textbasiertes Format welches Vertices und Polygone speichert. Jetzt musst Du Dir noch eine Laderoutine dafuer schreiben und kannst dann z.b. mit DeepExploration viele Mesh formate nach .obj umwandeln oder .obj Meshes aus den Netz laden.

BAGZZlash
2007-10-18, 23:12:26
Schau Dir als Tool mal AC3D auf

http://www.inivis.com/

an. Kann 14 Tage getestet werden und kostet nicht die Welt, falls es dir gefällt


Alles klar, danke, ich schau' mal.


Genau für den Zweck gibt es Programme wie Maya oder 3DS Max. Die darin gebastelten Modelle können dann über entsprechende Plugins in Datenformate transferiert werden, die deine Engine (hoffentlich) lesen kann.

Die passenden Import Plugins zu schreiben, und dann sinnvoll zu verknüpfen ist eigentlich der entscheidende Schritt bei einer Engine. Wenn du den Gedankengang bis zum bitteren Ende gehst, hast du irgendwann mal einen Leveleditor! ;)


Gut, sowas zu bastlen ist an sich kein Problem. Ich hab' nur Respekt vor 3DS und Konsorten, da das so aufwändige Programme sind und ich von dem Programm eigentlich so wenig will. Trotzdem danke, ich schau' mir erstmal AC3D an und wenn das nix ist, muß ich wohl ernsthaft mal über Maya oder so nachdenken... :rolleyes:


Du kannst Dir auch mal das obj Datei format ansehen. Es ist ein einfaches Textbasiertes Format welches Vertices und Polygone speichert. Jetzt musst Du Dir noch eine Laderoutine dafuer schreiben und kannst dann z.b. mit DeepExploration viele Mesh formate nach .obj umwandeln oder .obj Meshes aus den Netz laden.

Cool, das wär' ja eigentlich ganz geil. Ich check' das mal! :smile:

Gnafoo
2007-10-18, 23:42:24
Möglicherweise lohnt sich für dich auch ein Blick auf Blender [1]. Das hat zwar eine sehr eigenwillige Bedienung, kostet aber im Gegensatz zu 3DS Max und Maya überhaupt nichts. Dabei ist es von den Features soweit ich das beurteilen kann gar nicht so übel.

Mit ein paar Tutorials dürftest du denke ich in der Lage sein, einfache Modelle zu erstellen und in ein einfaches Format zu exportieren, welches du dann einlesen kannst. Es muss ja Anfangs nichts besonderes sein. Oder du probierst einfach erst einmal mit fertigen Blender-Models herum. (Da lässt sich sicher was brauchbares finden im Internet.) Exportieren kannst du auch in eine ganze Reihe von Formaten (.obj ist auch dabei ;)).

[1] http://www.blender.org

del_4901
2007-10-19, 00:37:59
Du kannst Dir auch mal das obj Datei format ansehen. Es ist ein einfaches Textbasiertes Format welches Vertices und Polygone speichert. Jetzt musst Du Dir noch eine Laderoutine dafuer schreiben und kannst dann z.b. mit DeepExploration viele Mesh formate nach .obj umwandeln oder .obj Meshes aus den Netz laden.

Dazu musst du aber sagen das *.obj zwar einfach zu implementieren ist, aber eine Sackgasse darstellt. Ich würde lieber gleich auf *.dae setzen. Mit dem Collada SDK und diesem Buch, ( http://www.amazon.de/Collada-Sailing-Digital-Content-Creation/dp/1568812876/ ) ist das auch nicht sonderlich schwer.
Gut, sowas zu bastlen ist an sich kein Problem. Ich hab' nur Respekt vor 3DS und Konsorten, da das so aufwändige Programme sind und ich von dem Programm eigentlich so wenig will. Trotzdem danke, ich schau' mir erstmal AC3D an und wenn das nix ist, muß ich wohl ernsthaft mal über Maya oder so nachdenken... :rolleyes: Ich hab die erfahrung gemacht, das man nur eines kann, entweder 3d-programmiern, oder 3d-modelliern ... willkommen in der Welt der Game entwicklung!

tokugawa
2007-10-19, 02:00:43
Dazu musst du aber sagen das *.obj zwar einfach zu implementieren ist, aber eine Sackgasse darstellt.


In der Spieleindustrie wird .obj durchaus noch als sinnvolles Datenaustauschprogramm benutzt. Vor allem bei uns, da bei uns von Maya, über Max über Lightwave bis Softimage alles mögliche genutzt wird - und .obj ist bei uns zumindest produktiv erfolgreich als Austauschformat in Verwendung.


Ich würde lieber gleich auf *.dae setzen. Mit dem Collada SDK und diesem Buch, ( http://www.amazon.de/Collada-Sailing-Digital-Content-Creation/dp/1568812876/ ) ist das auch nicht sonderlich schwer.


Ich halte Collada für etwas überbewertet, vor allem was den produktiven Einsatz in der (kommerziellen) Spieleindustrie betrifft.

Aber dank diversen SDKs dürfte es für Hobbyisten durchaus einen Blick wert sein. Dasselbe gilt aber auch für das FBX-Format (sh. Google).


Ich hab die erfahrung gemacht, das man nur eines kann, entweder 3d-programmiern, oder 3d-modelliern ... willkommen in der Welt der Game entwicklung!

Das trifft vielleicht für einen nicht-so-kleinen Teil der Menschen zu, aber sicher nicht für alle.

Ich habe die Erfahrung gemacht dass jene Menschen die beides können, etwas besonderes sind und Respekt verdienen.

Und es ist gar nicht mal so abwegig. Ich persönlich komm eher aus der Kreativ/Kunst-Ecke (zumindest in der Schulzeit), wollte dann Spiele designen, wußte aber nicht wie. Da ich mich von solchen Hindernissen nicht aufhalten lasse, hab ich Programmieren gelernt, da es die direkteste Variante ist, Ideen umzusetzen (ohne von einem anderen, der programmieren kann, abhängig zu sein - Not macht erfinderisch!).

Was stimmt ist dass man oft nicht gleichzeitig grafisch/künstlerisch tätig sein kann und programmieren kann (da verschiedene Gehirnhälften). Aber selbst hintereinander bringt es einiges, mal die eine Gehirnhälfte ruhen zu lassen und die andere zu stimulieren - meistens bringt das für die ruhende Hälfte nämlich auch was!

Ich empfehle also jedem Programmierer sich ein Hobby anzulegen wo er "die andere" Gehirnhälfte beansprucht (malen, zeichnen, musizieren, oder eben content-creation), und jedem Artist, auch mal mathematisch-analytisch tätig zus ein. Zuviel Einseitigkeit ist schlecht, sowohl für's Hirn als auch generell fürn Horizont! Ist zumindest meine Meinung.

ScottManDeath
2007-10-19, 02:36:24
Aeeehm, .dae ist im Vergleich zu .obj so wie das Kamasutra zur Missionarstellung. Beides fuehren zum Ziel, wenn man aber am Anfang schnell zum Schuss kommen will, reicht .obj aus, man hat sich schnell "reingefunden" und das ROI ist fix da. .dae ist dann eher was fuer die "Professionellen" :D

Ich kann ein bischen (http://developer.download.nvidia.com/SDK/10/direct3d/Source/Lightning/doc/lightning_large.png) modellieren, aber sehe das nur als mittel zum Zweck. Nun stecke als Ausgleich kleine Plastebausteine zusammen ;)


Du kannst z.b. mit sin und cos die Koordinaten auf einer Kugel berechnen und Dir dann daraus dieselbige zusammenbauen.

Hier (http://en.wikipedia.org/wiki/Icosahedron) stehen die Daten drinne um den Icosahedron selbst zusammenzu bauen.

BAGZZlash
2007-10-19, 07:42:37
Dazu musst du aber sagen das *.obj zwar einfach zu implementieren ist, aber eine Sackgasse darstellt.

Warum?


Ich hab die erfahrung gemacht, das man nur eines kann, entweder 3d-programmiern, oder 3d-modelliern ... willkommen in der Welt der Game entwicklung!

Haha, ja, da wirste wohl recht haben... :smile:

del_4901
2007-10-19, 17:01:02
Warum?

Kein 2tes, 3tes ... Texturkoordinatenset, keine Tangenten/Binormalen, keine Animation, keine Materialbeschreibung (mal abgesehen von einigen wenigen nicht *.obj standardkonformen "Abwandlungen"), keine Effekte, keine Partikel, kein Postprocessing etc. ... .

tokugawa
2007-10-19, 19:00:51
Aeeehm, .dae ist im Vergleich zu .obj so wie das Kamasutra zur Missionarstellung. Beides fuehren zum Ziel, wenn man aber am Anfang schnell zum Schuss kommen will, reicht .obj aus, man hat sich schnell "reingefunden" und das ROI ist fix da. .dae ist dann eher was fuer die "Professionellen" :D


Würd ich so nicht sagen. Collada ist "akademischer", aber unter Professionellen in der kommerziellen Welt nocht nicht so etabliert, da es noch einige Nachteile hat (unter anderem im Bereich Exporter).

Wavefront OBJ funktioniert halt einfach, zumindest als Austauschformat zwischen verschiedenen Modellern. Auch wenn keine neuesten Features unterstützt werden, aber das ist für einfachen Geometrie-Austausch auch nicht so wichtig.

del_4901
2007-10-19, 19:58:49
Wavefront OBJ funktioniert halt einfach, zumindest als Austauschformat zwischen verschiedenen Modellern. Auch wenn keine neuesten Features unterstützt werden, aber das ist für einfachen Geometrie-Austausch auch nicht so wichtig.
Naja den einfachen Geometrie Austausch bekommst du auch mit Collada hin. Bei DAE hast au aber wenigstens noch die Chance, das deine Texturkoordinaten etc. mit übernommen werden.

ScottManDeath
2007-10-19, 20:49:11
Das geht auch mit .obj

del_4901
2007-10-19, 21:03:21
Das geht auch mit .obj
Mehrere Texturcoordinatensets, sowie Materialbeschreibungen, sind bei obj nicht Standardkonform!

Bietchiebatchie
2007-10-19, 22:26:30
Lag...

Bietchiebatchie
2007-10-19, 22:28:01
Ne dumme Frage, die mir auch schon vor längerem kam, als ich auch eine .obj - Datei einlesen wollte:
Was spricht eigentlich gegen eine Xml-Definition von sowas? Klar sind die Dateien dann u.U. vier oder fünfmal so groß; aber wenn man sie verschicken muss, kann man sie ja immer noch zippen und hat einen Overhead von vielleicht 30% (im Vergleich zur Binärvariante).

Hätte zwei Riesenvorteile:
- Erweiterung der Sprache ist Kindergarten.
- Integrierung des Formats in ein Proramm beansprucht deutlich weniger Zeit.

Chris Lux
2007-10-20, 13:50:24
Ne dumme Frage, die mir auch schon vor längerem kam, als ich auch eine .obj - Datei einlesen wollte:
Was spricht eigentlich gegen eine Xml-Definition von sowas? Klar sind die Dateien dann u.U. vier oder fünfmal so groß; aber wenn man sie verschicken muss, kann man sie ja immer noch zippen und hat einen Overhead von vielleicht 30% (im Vergleich zur Binärvariante).

Hätte zwei Riesenvorteile:
- Erweiterung der Sprache ist Kindergarten.
- Integrierung des Formats in ein Proramm beansprucht deutlich weniger Zeit.
dann schau mal was COLLADA macht ;)

tokugawa
2007-10-20, 14:42:08
Naja den einfachen Geometrie Austausch bekommst du auch mit Collada hin. Bei DAE hast au aber wenigstens noch die Chance, das deine Texturkoordinaten etc. mit übernommen werden.

Eben das funktioniert in der Praxis mit Collada leider deutlich weniger gut als es sein sollte. Zumindest vor einem Jahr war das noch so, kann sein dass es mittlerweile etwas besser aussieht was Exporter betrifft.

DaBrain
2007-10-20, 16:22:30
Das einfachste 3d Modellierungstool das ich kenne ist Wings3d. (www.wings3d.com)

Man kann damit wirklich schnell einfache Modelle erstellen und die Oberfläche ist sauber und einfach gehalten.

In den Händen eines guten Grafikers ist es ein mächtiges Tool, dass alle wichtigen Grundfunktionen hat.

Es ist Freeware und kann nur beim Erstellen einfacher Low-Poly Modelle mit 3ds Max, oder Maya mithalten.

BAGZZlash
2007-10-21, 14:55:12
Um Euch informiert zu halten:

Hab' mir AC3D 'runtergeladen, finde das Programm ganz gut.
Gerade habe ich den Loader für .OBJ-Dateien fertig gestellt, der aktuelle Stand der Engine ist dieser hier:

http://www.people.freenet.de/BAGZZlash/3D-Engine.jpg

Die Performance ist absolut mies! :redface:
Die nächsten Schritte werden also sein:

1.) Performance verbessern.
Die Verbindungen zwischen den Vertices werden im Moment mit 'ner einfach Line-Prozedur von VB gezeichnet. Da ich sowieso später an die einzelnen Pixel 'ran muß, aus denen diese Linien bestehen, werde ich als nächstes den Bresenham-Algo implementieren (das hab' ich schonmal für was anderes gemacht) und dann über's API die Pixel setzen. Gut möglich, daß das dann sogar noch langsamer ist, dann muß ich auf DirectDraw ausweichen... :rolleyes: Wenigstens ist das dann hardwarebeschleunigt.

2.) Hidden surface removal.
Mal schauen, was der Maleralgorithmus so kann. Dafür muß ich doch nur die Polygone nach ihrem Z-Wert sortieren und dann in dieser Reihenfolge zeichnen, oder?
Kann mir jemand erklären, wie Z-Buffering bei Grafikkarten funktioniert? Aber bitte die Version für Dreijährige. :smile:

3.) Polygone einfärben.
Damit man von dem overdraw überhaupt was bemerkt, müssen die Polygone gefärbt werden.

Ich meld' mich wieder...

Coda
2007-10-21, 15:06:08
DirectDraw ist nicht unbedingt nötig. Du solltest halt in einen Offscreen-Buffer rendern und den dann auf einmal anzeigen, dann ist die Performance okay.

Z-Buffering speichert einfach pro Pixel noch einen Tiefenwert. Das ist alles. Dann spielt die Reihenfolge der Polygone wenn du renderst keine Rolle mehr (außer bei der Performance) weil du nur zeichnest wenn der neue Z-Wert näher liegt.

BAGZZlash
2007-10-23, 00:10:59
Update:

So, habe Bresenham nun implementiert und habe eine Version, die das Zeichnen der Linien mit der API-Funktion SetPixel übernimmt. - Unfassbar langsam! :comfort2: Liegt wohl am Overhead, da diese Funktion pro Frame zigtausende Male aufgerufen werden muss. Oder an der Umsetzung des Bresenham-Algo, da ginge sicher noch einiges.

Da hab' ich's mir erstmal leichter gemacht und das Zeichnen auf DirectDraw umgestellt. Das geht etwas fixer als die ursprüngliche Methode, aber auch nicht so superschnell. Naja, meine Prozeduren sind wohl auch nicht so super-optimal, ist ja auch nur zum Lernen. Dank DirectDraw und BackBuffering gibt's nun wenigstens kein Tearing mehr.

Da ich mich in DirectDraw erstmal ein Bißchen einlesen musste, habe ich auch kurz mal bei Direct3D 'reingeschnuppert. Zum Einen ist es toll, wie sehr mein selbst geschriebener Code dem gleicht, was da so gemacht wird - irgendwas muß ich wohl richtig gemacht haben.
Andererseits ist's auch ein Bißchen niederschmetternd: Dort ist alles nicht viel anders, aber viel schneller. Und solche Fragen wie hidden surface removal und Polygonfärbung/shading/texturing treten da gar nicht hervor, das wird einfach gemacht und gut ist. Wenn ich das alles selbst implementieren würde, wär's einfach grottenlahm, dann könnte ich die Sekunden pro Frame zählen... :rolleyes:
Deswegen hab' ich da im Moment auch ein Bißchen die Motivation verloren.

Hach ja, ich glaub' ich hab' nur grad' 'ne postprojektale Depression... :( Vielleicht sieht die Welt ja morgen schon wieder anders aus. :comfort:

Wie auch immer, ich hab' den Kram mal geuppt, könnt Ihr Euch ja mal ansehen. Und vielleicht posten, auf wie viele Frames Ihr so kommt, würde mich mal interessieren. Paar .obj-Files sind auch dabei.

3D.zip (http://www.people.freenet.de/BAGZZlash/3D.zip)

Aber nich auf die Idee kommen, nach dem Start des Renderings das Fenster verschieben zu wollen - Bug!

Coda
2007-10-23, 00:38:49
Ein Software-Renderer geht ohne Probleme mit FPS und nicht SPF auf heutigen CPUs für dein Popelraumschiff da ;)

Ich bekomm nen "Run-time error '429': ActiveX component can't create object"

BAGZZlash
2007-10-23, 00:50:41
Ein Software-Renderer geht ohne Probleme mit FPS und nicht SPF auf heutigen CPUs für dein Popelraumschiff da ;)


Ja richtig, immer schön die treten, die sowieso schon am Boden sind... :wink:


Ich bekomm nen "Run-time error '429': ActiveX component can't create object"


Hm, ob da wohl noch 'ne Datei fehlte? Hab' das Paket geupdatet, kannst jetzt nochmal versuchen.

Coda
2007-10-23, 01:00:16
Ja richtig, immer schön die treten, die sowieso schon am Boden sind... :wink:
Ich wollte dir eher Mut machen :ulol:

Hm, ob da wohl noch 'ne Datei fehlte? Hab' das Paket geupdatet, kannst jetzt nochmal versuchen.
Hilft leider nichts :usad:

BAGZZlash
2007-10-23, 09:35:11
Hilft leider nichts :usad:


In der Tat, ich konnte das Problem in meiner Test-virtuellen-Maschine reproduzieren. :redface: Hab' jetzt einfach ein Setup mit dem Weitergabeassistenten erzeugt, damit klappt es. Also, bitte ein letztes Mal versuchen. :cool:


Und vielleicht posten, auf wie viele Frames Ihr so kommt, würde mich mal interessieren.


Ich hab' übrigens mit den Ausgangssettings so ca. 50 fps.

Sven77
2007-10-23, 10:10:00
sind die polys alle trianguliert?

BAGZZlash
2007-10-23, 15:46:30
sind die polys alle trianguliert?


Hm. Da ich nicht mal weiß, was das bedeutet, würde ich eher sagen: Nein, sind sie nicht. :rolleyes:

Coda
2007-10-23, 18:29:08
In der Tat, ich konnte das Problem in meiner Test-virtuellen-Maschine reproduzieren. :redface: Hab' jetzt einfach ein Setup mit dem Weitergabeassistenten erzeugt, damit klappt es. Also, bitte ein letztes Mal versuchen. :cool:
Die von Ihnen aufgerufene Seite wurde nicht gefunden ...

BAGZZlash
2007-10-23, 19:47:02
Die von Ihnen aufgerufene Seite wurde nicht gefunden ...


Beim Setup oder bei Programmausführung?
Also, in 'ner frisch installierten XP-virtuellen-maschine klappt's. Mehr kann ich auch nicht tun, glaub' ich.
Hat's denn bei irgendwem funktioniert? Sven?

Mdk
2007-10-23, 19:50:24
Beim Setup oder bei Programmausführung?

Beim Anklicken von http://www.people.freenet.de/BAGZZlash/3D.zip :-)

mfg
mdk

BAGZZlash
2007-10-24, 00:59:31
Beim Anklicken von http://www.people.freenet.de/BAGZZlash/3D.zip :-)

mfg
mdk


Tja, da war ich wohl zu blöd, den Kram hochzuladen. Probiert diesen Link: 3D.zip (http://www.diskokugel.net/webdrive/3D.zip)

BAGZZlash
2007-10-24, 10:07:45
Jetzt hab' ich aber auch nochmal 'ne Frage an die 3D-Freaks:

Ich muß zugeben, statt an meinem Software-renderer weiterzubasteln, hab' ich mich in den letzten Tagen mal ein Bißchen in Direct3D eingelesen, weil das ähnlich funktioniert wie das, was ich geschrieben habe, nur viel schneller und mit mehr Features.
Nun ist es so, daß in Direct3D Polygone stets und ausschließlich Dreiecke sein müssen. Das .OBJ-Format erlaubt aber auch Vielecke, meine Enterprise zum Beispiel besteht fast nur aus Vierecken. Wie geht das zusammen? Muß ich manuell die Vielecke in Dreiecke zerlegen? Wenn ja, wie? Oder geht das irgendwie automatisch, vielleicht über den Vertexshader?

Mdk
2007-10-24, 10:12:57
Tja, da war ich wohl zu blöd, den Kram hochzuladen. Probiert diesen Link: 3D.zip (http://www.diskokugel.net/webdrive/3D.zip)

Ja, das geht. Lastet nach anwählen der obj Datei einen Core zu 100% aus, und hängt dann...

Core 2 Duo, Vista, GF8800GTX.

mfg
mdk

Monger
2007-10-24, 10:48:50
Nun ist es so, daß in Direct3D Polygone stets und ausschließlich Dreiecke sein müssen. Das .OBJ-Format erlaubt aber auch Vielecke, meine Enterprise zum Beispiel besteht fast nur aus Vierecken. Wie geht das zusammen? Muß ich manuell die Vielecke in Dreiecke zerlegen? Wenn ja, wie? Oder geht das irgendwie automatisch, vielleicht über den Vertexshader?
Es gibt wohl mehrere Varianten, eine Triangulation mehr oder minder gut zu machen. Sowas macht man nicht "von Hand", dafür sucht man sich ein passendes Programm oder eine passende Methode. Ich weiß, dass in Java3D ein Standard "Triangulator" (nennt man das so?!?) verfügbar ist, und ich gehe mal davon aus dass sich ähnliches für jede Programmiersprache kostenlos finden lassen müsste.

BAGZZlash
2007-10-24, 11:30:39
Es gibt wohl mehrere Varianten, eine Triangulation mehr oder minder gut zu machen. Sowas macht man nicht "von Hand", dafür sucht man sich ein passendes Programm oder eine passende Methode. Ich weiß, dass in Java3D ein Standard "Triangulator" (nennt man das so?!?) verfügbar ist, und ich gehe mal davon aus dass sich ähnliches für jede Programmiersprache kostenlos finden lassen müsste.


Aha. Cool, das war genau das Stichwort, das ich brauchte: Triangulation. Jetzt weiß ich auch, was das bedeutet (siehe Post #29 :redface:). Naja, AC3D bietet das sogar an, d.h. ich kann einfach 'ne triangulierte Version meiner Enterprise speichern und dafür dann 'nen D3D-Renderer schreiben bzw. meine jetzige Version auf D3D portieren. Dürfte jetzt nicht mehr so viel Aufwand sein.
Zwischendurch möchte ich mich mal bedanken für Eure Hilfe, ohne Euch wäre ich nicht ansatzweise so weit gekommen. :love2:
Weitere Fragen werden sicher folgen... :rolleyes:

BAGZZlash
2007-11-19, 22:34:05
Hi!

Okay, heute ist mein Direct3D-Renderer fertig geworden. Hab' lange nichts daran gemacht, da ich zuanfangs Probleme mit dem Initialisieren des ganzen D3D-Krams hatte. Hab' heute auf der Arbeit nochmal 'n Bißchen was dazu gelesen und anschließend zuhause programmiert. Tja, fast der ganze Code war vorher schon fertig, musste eben nur in D3D eingepasst werden. Ist schon krass: Z-Buffering? Einfach anmachen. Eine Zeile Code, das war's. Füllen und Beleuchten der Polygone? Nichts leichter als das. Wenn ich das selbst implementiert hätte (falls ich es geschafft hätte), hätte das bestimmt kacke ausgesehen und wäre ultralahm gewesen. Auch Antialiasing ist bei D3D auch einfach an, wenn's im Treiber an ist. Man sieht: We've come a long way, baby!
So sieht's jetzt aus:

http://freenet-homepage.de/BAGZZlash/DX8.jpg

Neomi
2007-11-19, 23:03:06
Gratulation dazu! Es ist zwar noch ein weiter Weg zu gehen, aber die ersten Schritte (also quasi die schwierigsten) sind schonmal geschafft. :up:

Meine Empfehlung ist, das Rendering als nächstes auf Direct3D 9 umzurüsten. Direct3D 8 zu kennen, ist zwar nicht falsch, aber heutzutage schränkt man sich mit der API zu sehr ein. Und noch ein Ratschlag: schau dir das Fixed Function Setup ruhig zwecks Verständnis an, beschränke dich bei der ernsthaften Nutzung aber lieber auf eine konsequente Nutzung von Shadern, auch für die simpelsten Dinge wie z.B. Gouraud-Shading.

Edit:
63 Frames/s? Zeichnest du jedes Dreieck in einem eigenen Drawcall?

BAGZZlash
2007-11-19, 23:23:19
Danke! :smile:
Ehrlich gesagt weiß ich nicht, warum die Framerate so niedrig ist. :redface: Ich verwende VSync, sollte also eigentlich 85 FPS haben. In der Tat ist es aber (fast) egal, wie viele Polys gerendert werden (es geht also auch mit viel mehr, hab' ich extra ausprobiert), die Rate ist immer auf diesem Niveau (knapp unter 70 FPS). Der Rendercall wird jedenfalls nur einmal pro Frame aufgerufen.

Neomi
2007-11-19, 23:48:23
Wie schnell wird es denn, wenn du VSync deaktivierst? Das ist zwar ein nettes Feature für ein ruhigeres Bild, versperrt aber leider den Blick auf Engpässe während der Entwicklung.

BAGZZlash
2007-11-20, 00:14:56
Wie schnell wird es denn, wenn du VSync deaktivierst?


Gute Frage. Hab's gerade ausprobiert: Über 300 Frames. Man sollte zwar eigentlich noch mehr erwarten, aber mein Code ist auch alles andere als optimiert.
Also: Die niedrige Framerate hat auf jeden Fall was mit dem VSync zu tun. Aber warum dann keine 85 FPS?

Coda
2007-11-20, 00:23:15
Mein Tipp wäre, dass du gar keine 85Hz eingestellt hast ;)

Neomi
2007-11-20, 00:34:10
Oder die Zeitmessung ist irgendwie krumm... ohne Code kann man da eigentlich nur raten. Von der Komplexität der Szene her sollte man die Framerate jedenfalls bis weit in den vierstelligen Bereich hochjagen können.

Kommt denn ein seltsame Ressourcenmanagement pro Frame zum Zug? Oder noch eine andere Idee: wieviel kommt denn raus, wenn du dich pro Frame auf ein Clear() gefolgt von Present() beschränkst, also nur leere Frames raushaust? Wenn das nicht deutlich schneller ist, ist ein Problem mit der umgebenden Anwendung nicht unwahrscheinlich.

BAGZZlash
2007-11-20, 00:34:24
Mein Tipp wäre, dass du gar keine 85Hz eingestellt hast ;)


Hältste mich für blöd? :cool::rolleyes:


Oder die Zeitmessung ist irgendwie krumm... ohne Code kann man da eigentlich nur raten. Von der Komplexität der Szene her sollte man die Framerate jedenfalls bis weit in den vierstelligen Bereich hochjagen können.

Kommt denn ein seltsame Ressourcenmanagement pro Frame zum Zug? Oder noch eine andere Idee: wieviel kommt denn raus, wenn du dich pro Frame auf ein Clear() gefolgt von Present() beschränkst, also nur leere Frames raushaust? Wenn das nicht deutlich schneller ist, ist ein Problem mit der umgebenden Anwendung nicht unwahrscheinlich.


Hmm, beim Durchlaufenlassen der Renderingschleife ganz ohne Content kommen so etwa 2300 FPS 'raus.

Neomi
2007-11-20, 02:17:07
Hmm, beim Durchlaufenlassen der Renderingschleife ganz ohne Content kommen so etwa 2300 FPS 'raus.

Das läßt sich wohl durch den Fenstermodus begründen, im Vollbild sollte da mehr rauskommen. Aber wenn das Rendering von diesem Minimesh so viel Geschwindigkeit kostet, muß irgendwas falsch sein. Kannst du vielleicht mal deinen Rendercode posten und am besten auch noch den Initialisierungsteil für deine Ressourcen? Dann sollte sich der Haken eigentlich recht schnell finden lassen.

BAGZZlash
2007-11-20, 09:21:42
Das läßt sich wohl durch den Fenstermodus begründen, im Vollbild sollte da mehr rauskommen. Aber wenn das Rendering von diesem Minimesh so viel Geschwindigkeit kostet, muß irgendwas falsch sein. Kannst du vielleicht mal deinen Rendercode posten und am besten auch noch den Initialisierungsteil für deine Ressourcen? Dann sollte sich der Haken eigentlich recht schnell finden lassen.


Okay, danke für das Angebot, das mach' ich. Allerdings ist der Code noch 'ne ziemlich unordentliche Baustelle, da muß ich erstmal aufräumen, sonst ist mir das peinlich.
Allerdings ist das VB 6, kein C++ oder so. Da werd' ich bestimmt sowieso für ausgelacht... :rolleyes:

BAGZZlash
2007-11-21, 21:48:17
Okay, hab' den Fehler gefunden: Hatte noch aus der Entwicklungszeit Software-Vertexbuffering an. Auf Hardware umgestellt und zack! Über 1.600 Frames.
Aber aufgeräumt hab' ich den Code immer noch nicht. Schon komisch, was es noch alles zu machen gibt, nachdem man schon an sich fertige Ergebnisse erzielt hat... :|