DreiDe - 3D Engine basierend auf OpenGL

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu Seite Zurück  1, 2, 3, 4, 5, 6, 7, 8, 9  Weiter

Neue Antwort erstellen

Vertex

BeitragSo, Aug 21, 2005 14:37
Antworten mit Zitat
Benutzer-Profile anzeigen
So, der 100ste Post in diesem Thread Smile

http://vertex.art-fx.org/dreide257.zip

Mit Unterstützung von komprimierten Texturen und neugeschriebenen DDS Loader.

Komprimierte Texturen lassen sich mit:
MyTexture.AddRenderMode(DDD_TEXTURE_COMPRESSED)
MyTexture.SetPixmap(MyPixmap)
MyTexture.SetFilter(..., ...)
laden.

Der DDS Loader ist genauso einfach zu handeln:
MyTexture = DDSLoader.Load("test.dds")
MyTexture.SetFilter(..., ...)

Übrigens ist SetFilter essentiell! Wenn OpenGL kein Filterparameter besitzt, so wird die Textur ohne Fehlermeldung einfach nicht angezeigt. Das hat mich fast mehrere Stunden gekostet.

Was kann der DDS Loader?
- Komprimierte Texturen mit DXT1, DXT3 und DXT5 komprimierung
- Unkomprimierte Tetxuren(RGBA8888, RGBA5551, RGBA4444, RGB888, RGB565)
- MIPMaps
- Cubemaps

Er ist aber noch Beta, weil a) bei mir manche Seiten von einer Cubemaps textur falsch geladen wurden, b) manchmal dennoch ein paar Farbkanäle vertauscht sind. Das Problem ist, das die DDS Dateien, die ich von NVIDIA's Cg Tutorial habe, scheinbar falsche Farbkanalmasken beinhalten.

http://developer.nvidia.com/ob...ities.html
http://developer.nvidia.com/ob...ugins.html

Weiterhin gefällt mir mein Entitysystem nicht. Die Transformationen scheinen ein großer Falschenhals zu sein. Problem ist, OpenGL arbeitet mit transponierten Matrizen. A^T x B^T = (B x A)^T (das ^T steht für transponiert). Folglich muss ich alle Matrizen andersherum multiplizieren da A x B != B x A. Das führt dazu, das ich alle Parents eines Entitys in einer Liste laden muss, und diese dann umkehren mit MyList.Reverse. Das ist alles Verschwendung von Performance. Zumal Lists alles andere als performant programmiert wurden.

Gibt es zur Transformationen irgendwelche Verbesserungsvorschläge?

mfg olli
vertex.dreamfall.at | GitHub
 

fliege

BeitragMo, Aug 22, 2005 19:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Unterstüzt es denn auch Animationen an Meshes? Denn das wäre ja der Oberhammer Laughing
Würde mich freuen, wenns schon drinn ist...
Fliege
Wer weiß was kommt.. ?
 

Dreamora

BeitragMo, Aug 22, 2005 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Vertex

BeitragDi, Aug 23, 2005 0:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Die erste Animation mit DreiDe wird sicher nur ein MD2 Model sein Smile Ferien sind bald vorbei, letzte Zeit war ich viel Unterwegs, also fehlt es sicher bald wieder an Zeit. Naja mal schauen. Sooo schwer wäre Animation ja garnicht, Problem ist mal wieder die Performance. Gibt noch so viele Dinge, Licht, Terrain, Schatten, Kollisionserkennung usw.

Naja habe mir ersteinmal jetzt ein Buch bestellt zum Thema. Ich hoffe, da kann ich noch nützliches entnehmen.

mfg olli
vertex.dreamfall.at | GitHub

Vertex

BeitragDo, Aug 25, 2005 22:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, es soll doch ein MD3 Model sein Razz

Das buch geht sicherlich wieder zurück Smile

Ich komme langsam nichtmehr weiter mit dem MD3 Format:
Code: [AUSKLAPPEN]
editiert


Code: [AUSKLAPPEN]
editiert

(MAX_QPATH ist z. Z. 64 Byte)

Was läuft schief?

Ich habe zum Test in Milkshape ein einfaches Triangle erstellt.
Code: [AUSKLAPPEN]
VertexNum  X      Y      Z
00         0.00   9.75   41.75
01         0.00   3.50  -23.75
02         0.00  28.00   -1.75


Heraus kam dann:
Code: [AUSKLAPPEN]
00 1014.25 0.0 41.75
01 3.5     0.0 1000.25
02 28.0    0.0 1022.25


Die Texturkoordinaten sowie die VertexIndices liest er korrekt.

Einige Koordinaten scheinen ja richtig zu sein, bloß falsch plaziert.

Bloß warum?

Code: [AUSKLAPPEN]
typedef struct {
   short      xyz[3];
   short      normal;
} md3XyzNormal_t;


vs.

Code: [AUSKLAPPEN]
         Stream.Seek(Offset+MD3Surface.OffsetVertices)
         For Vertex = 1 To MD3Surface.NumVertices
            Surface.SetVertexPosition(Vertex-1, Float(Stream.ReadShort())/64.0, ..
                                                Float(Stream.ReadShort())/64.0, ..
                                                Float(Stream.ReadShort())/64.0)
            Stream.ReadShort()
         Next


Der lange Code wird nach Erfolg dann entfernt.

Danke schonmal für die Hilfe!

mfg olli
vertex.dreamfall.at | GitHub
  • Zuletzt bearbeitet von Vertex am Do, Aug 25, 2005 23:17, insgesamt 2-mal bearbeitet

Justus

BeitragDo, Aug 25, 2005 22:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab zwar keinerlei Ahnung von dem Zeug, aber ich muss dir an dieser Stelle mal meinen fetten Respekt zollen:

Das ist echt fett Shocked

Vertex

BeitragDo, Aug 25, 2005 23:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Justus, danke Smile

Sooo, der blödeste Fehler der überhaupt auftreten kann ist geschehen(und gefixed).

Die Vertexkoordinaten waren Signed Shorts, mit Stream.ReadShort liest man jedoch nur Unsigned Shorts. Meine Fresse, soetwas muss mal wieder mir passieren.

Naja hier der Alphatest:
user posted image

Textur und Animation event. sogar morgen schon.

mfg olli
vertex.dreamfall.at | GitHub

Vertex

BeitragSa, Aug 27, 2005 16:49
Antworten mit Zitat
Benutzer-Profile anzeigen
So, wie versprochen habe ich nun Quake 3 MD3 Model Support drin:

http://vertex.art-fx.org/dreide258.zip
http://vertex.art-fx.org/dreide_examples258.zip
http://vertex.art-fx.org/dreide_examples258bin.zip

user posted image

Also die MD3 Models unterstützen Animation und Skins. In Gegensatz zu anderen Loadern nutze ich nicht SMoothNormals (bzw. UpdateNormals in B3D) sondern berechne die Normals aus dem ersten Frame. Normalerweise müsste man sie für jeden Frame neu berechnen, bringt aber nicht viel denke ich.

md3demo.bmx in den exmaples zeigt, wie man die Models laden kann.

MyModel = TMD3Model.Load("MyModel.md3", "MyModel.skin") der Skin ist optional. Es gibt auch keine Fehler, wenn er mal eine Textur nicht laden konnte.

Die Anzahl der Frames bekommt man mit MyModel.CountFrames() heraus. Einen Frame setzt man mit MyModel.SetFrame(). Zwischen den Frames wird linear interpoliert. Gibt ihr also 3.8 so bezieht er Frame 3 und 4 ein, wobei mehr Gewichtung auf Frame 4 liegt.

mfg olli
vertex.dreamfall.at | GitHub
 

Black

BeitragSa, Aug 27, 2005 18:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, wenn du nur die Normalen der ersten Frame benutzt, kann es zu falschen Belichtung kommen, wenn sich während der Animation ein Triangle dreht. (Wenn du jetzt zum Beispiel ein Model hast, dass sich dreht kann es passieren, dass es so aussieht als würde sich die Lichtquelle mitdrehen.)

Vertex

BeitragSa, Aug 27, 2005 18:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja mal schauen, wenn es keine großen FPS-Einbusen gibt, dann werden noch die Normals interpoliert.

mfg olli
vertex.dreamfall.at | GitHub

Vincent

BeitragSa, Aug 27, 2005 18:36
Antworten mit Zitat
Benutzer-Profile anzeigen
kannst du ja optional machen, das die normalvektoren aktualisiert werden.
Gott ist nicht mit uns ... weil er mit Idioten keine Gnade kennt !

Vertex

BeitragSo, Sep 11, 2005 13:29
Antworten mit Zitat
Benutzer-Profile anzeigen
So, das Mathmodule wird langsam fertig. Ich konnte z. B. bei den Transformationen den Rechenaufwand auf 6% extreme verringern. Das hat jetzt auch die meiste Zeit gekostet, denn nicht alles was auf dem Blatt Papier gut aussieht, lässt sich Problemlos umsetzen.

Aufgrund, das ich genau andersherum zu OpenGL arbeite sind jetzt auch Parent/Child Transformationen sehr viel schneller. Die Child Position lässt sich nun mit der lokalen Parent Matrix und der lokalen Child Matrix einfach verrechnen. Früher musste man eine Transformationsliste aus den ganzen Parents aufbauen.

Weil man nun auch schneller die globale Position eines Entitys berechnen kann, kann ich nun auch Depthsorting(wichtig für die korrekte Darstellung von transparenten Entitys) einbauen.

Ich arbeite nun noch an einem Frustumtype, der prüfen kann, ob Bounding Volumes in einem Frustum liegen. Bounding Volumes sollen auch Parent/Child sein, das heißt, man kann eine große Bounding Box um ein großes Level legen, und dann die Levelräume wiederum in Bounding Boxen unterteilen. Ist das Level nicht im Frustum, braucht man auch nicht die Levelräume auf sichtbarkeit zu prüfen. Das ganze erspart unheimlich an Rechenzeit.

mfg olli
vertex.dreamfall.at | GitHub

Vertex

BeitragMo, Sep 19, 2005 23:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Wird bald ein neues Update kommen. Es gab z. B. Fehler unter Mac weil hier Big statts Little Endian Byte Order(hoch lebe Motorola!) verwendet wird.

TPrimitive.CreateQuad, TPrimitive.CreateDisc(Segmente), TPrimitive.CreateCube(SubSurfaces), TPrimitive.CreateCylinder(Segmente, Caps), TPrimitive.CreateSphere(Segmente) geht schon TPrimitive.CreateCone(Segmente) fehlt noch.

user posted image

user posted image

Naja mal schauen, werde noch ein paar Sachen optimieren und debuggen bevor ein neues Update hochgeht. Das größte war jetzt ersteinmal das Mathmodule.

mfg olli
vertex.dreamfall.at | GitHub

tft

BeitragDi, Sep 20, 2005 7:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi...

cool...... binn gespannt auf mer.
TFT
https://www.sourcemagic.ch
Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!!
 

Gombolo

BeitragMi, Sep 21, 2005 21:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Weiss jemand warum Bmax mir einen Compilerfehler meldet bei der Funktion GetUniformLocation ?

BMax Version 1.09
Heute ist der erste Tag vom Rest deines Lebens
http://gombolo.go.funpic.de/

bruZard

BeitragDo, Sep 22, 2005 8:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Schonmal versucht auf 1.10 zu updaten?
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image
 

Gombolo

BeitragDo, Sep 22, 2005 15:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab ich gerade gemacht. Geht trotzdem nicht. Question
Heute ist der erste Tag vom Rest deines Lebens
http://gombolo.go.funpic.de/

Vertex

BeitragDo, Sep 22, 2005 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Bitte Syncmods durchführen, da nur im neuen GLEW-Module die Funktion glGetUniformLocation deklariert ist.

Arbeite z. Z. am Frustum, mal schauen ob ich das heute noch fertig bekomme...

mfg olli
vertex.dreamfall.at | GitHub

Vertex

BeitragSo, Sep 25, 2005 16:16
Antworten mit Zitat
Benutzer-Profile anzeigen
OK, Frustumclipping ging doch nicht auf Anhieb, wie ich es mir erwünscht habe Sad Naja das schiebe ich mal noch ein bischen vor mir weg.

Die ersten Schritte zum QUake3 BSP Levelloader:
user posted image
(q3dm17.bsp sieht ihr hier) Lightmaps und Texturen konnte er schon laden. Ich weiß noch nicht, ob ich die Levels mit DreiDe Sachen aufbaue(Leafs = Meshs, Faces = Surfaces) oder das ganze etwas optmierter umsetze ...
mfg olli
vertex.dreamfall.at | GitHub

jungle

BeitragMo, Sep 26, 2005 9:07
Antworten mit Zitat
Benutzer-Profile anzeigen
@vertex:

an dieser stelle möchte auch ich dir meinen respekt zollen Exclamation
....wirklich fett das......

hast du nicht lust wieder eine neue version zum downloaden
online zu stellen Rolling Eyes

jGL
In der Realität ist die Wirklichkeit ganz anders.

| P3 550Mhz | P90Mhz | AMD 1Ghz | XP 2600@3200Mhz l P2 400Mhz | Dual XP 2000Mhz |

Gehe zu Seite Zurück  1, 2, 3, 4, 5, 6, 7, 8, 9  Weiter

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group