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, Jul 17, 2005 15:23
Antworten mit Zitat
Benutzer-Profile anzeigen
http://vertex.art-fx.org/dreide221.zip neues Fehlersystem wurd eingeführt und der Clampbug beseitigt. Weiterhin werde ich jetzt Versionsnummern dran hängen. 221 = Version 2.21

mfg olli

Edit: Nimmt mal bei example.bmx glEnable(GL_LIGHTING) raus, sieht gleich viel besser aus.
vertex.dreamfall.at | GitHub

YellowRider

Ehemaliger Admin

BeitragSo, Jul 17, 2005 16:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Großen Respekt! Hoffentlich wird das was und du wirst nicht mehr durch allzu vielen bugs aufgehalten Smile

cya YR

Jolinah

BeitragMo, Jul 18, 2005 0:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Funktioniert jetzt ohne Probleme Smile

Zum Fehlersystem (nur ein Vorschlag Wink):
Da gäbe es noch die Möglichkeit mit Throw "Message". Da wird dann automatisch eine Messagebox erzeugt, aber wem das nicht zusagt kann dann mit Try Catch den Fehler abfangen und eine eigene Fehlerbehandlung programmieren.

Bsp.:
In deiner Engine:
Code: [AUSKLAPPEN]

If etwas = nicht gut then
  Throw <String oder Objekt mit Informationen zum Fehler>
Endif


Benutzercode:
Code: [AUSKLAPPEN]

Try
  Texture.SetCubeFace(DDD_TEXTURE_POSX)
  Texture.SetPixmap(Pixmap)
  ...
  usw.
Catch exception:Object
  'Fehlerbehandlung vom Benutzer
  If String(exception) Then Notify(String(exception))

  'Oder wenn du dafür nen eigenen Exception Type gemacht hättest
  Local ex:CubeMapException = CubeMapException(exception)
  If ex <> Null
    Notify ("Fehler bei " + ex.Face + ", " + ex.ErrorMessage)
    'etc.
  Endif
End Try
 

Dreamora

BeitragMo, Jul 18, 2005 1:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Throw is eigentlich eher gedacht um "gescheite" Fehlermeldungen an Catch zu liefern, da sonst nur ein Standarderror dort angekommt, den man mit exception.tostring () dann ausgibt (in deinem Beispiel unten)

Hinzu kommt: wenn man schon weiss, dass ein Error da ist, warum dann "fatal kill" durchführen? Sprich wenn man mit "if" nen Error erkennen kann und ihn nicht ausbügelt sollte man proggen lassen Wink
So hat seit Win98/ME und MS glaub niemand mehr "Fehler" beseitigt ...
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Vertex

BeitragMo, Jul 18, 2005 1:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh man, mit Try und Catch habe ich mich nie beschäftigt, geschweige denn verstanden. Aber hört sich doch ganz gut an, muss ich halt mal ausprobieren. Event. logge ich gleich die Fehler in ner Liste mit.

Als nächstes wird denke ich ein 3DS Loader kommen. Habe mir schon mal in BlitzBasic ein kleinen Chunkviewer gemacht. Lässt sich recht gut umsetzen.

Ich mache heute in Urlaub für 2 Wochen. Also nicht wundern, wenn nix weiter geschieht.

mfg olli

Edit: Ich wollte ja noch nen Screenshot mit Spheremapping zeigen:
user posted image

Edit2: Hier der erste Ansatz des 3DS Loaders, funzt aber noch nicht!
Code: [AUSKLAPPEN]
Code ist unnötig


Habe keine Zeit mehr zum Debuggen. Hier mein Alter BlitzBasic Code der geht:
Code: [AUSKLAPPEN]
Code ist unnötig
vertex.dreamfall.at | GitHub
  • Zuletzt bearbeitet von Vertex am Mo, Jul 18, 2005 14:21, insgesamt einmal bearbeitet

Jolinah

BeitragMo, Jul 18, 2005 11:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreamora hat Folgendes geschrieben:
Throw is eigentlich eher gedacht um "gescheite" Fehlermeldungen an Catch zu liefern,


Stimmt, aber ohne Throw kommt ja gar kein Catch zu stande. Ausser natürlich die Memory Exception, weil das in BMax intern ausgelöst wird (Aber ist eigentlich auch nur ein Throw). Wenn da intern nirgends ein Throw wäre, würde man gar nie im Catch landen ausser man macht selber irgendwo ein Throw.

Mit den Fehlern beheben statt Kill stimm ich dir natürlich zu Smile . Wenn der Fehler in einer externen Funktion auftritt gibts daher nichts anderes als Try Catch wenn man das Programm nicht abstürzen lassen will. Da ja sonst die Memory Exception kommt und das Programm von alleine Abstürzt. Die Frage ist dann halt ob man den Fehler den Benutzern überlässt (mit Throw weiterleiten) oder ob man das intern in der Engine schon macht und die Benutzer davon nix mitbekommen.

Letzteres wär in diesem Fall wahrscheinlich schon besser Wink

Einige Fehlermeldungen jedoch möchte man vielleicht den Benutzern zugänglich machen damit sie unterschiedlich darauf reagieren können.
Das verlangt jedoch von den Benutzern dass sie Try Catch benutzen, weil das Programm sonst ja auch gleich wieder abstürzen würde bei einem Fehler. (Unhandled "Eigene Exception")

Aus diesem Grund wurde in Bmax möglichst auf Throw verzichtet und bei Funktionen mit Hilfe von Rückgabewerten gelöst weil das ja auch für Anfänger möglichst einfach sein soll, denke ich.

Bei .Net zum Beispiel wird aber für jeden Mist Throw benutzt. Wenn man eine Datei öffnen will und diese nicht existiert wird gleich eine FileNotFoundException ausgeworfen. Wenn man diese nicht mit Try Catch abfängt schmiert das Programm ab.

Hat halt seine Vor- und Nachteile Smile
  • Zuletzt bearbeitet von Jolinah am Mo, Jul 18, 2005 11:41, insgesamt 2-mal bearbeitet
 

Dreamora

BeitragMo, Jul 18, 2005 11:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja immerhin rennt .NET nicht in eine endlosloop wenn du mit loadimage ein bild versuchst zu laden, dass nicht existiert. Das tut BM nämlich, wenn man die fertige exe startet und nicht von der IDE aus ... -> try catch is nett aber das aktuelle Error Handling und Debugging System von BM lässt noch SEHR zu wünschen übrig ...
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Jolinah

BeitragMo, Jul 18, 2005 12:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber nur bei Debug build. Im Release beendet sich das Programm einfach wieder. Das Problem scheint auch nicht beim laden aufzutreten. Versuche ich ein Bild zu laden dass nicht existiert und zeichne dann ein Viereck mit Drawrect gehts ohne Probleme. Zeichne ich jedoch dieses Bild das ja Null ist weil es nicht geladen werden konnte kommt diese Endlos-Schleife.

So Dinge muss halt der Programmierer selbst abfangen.

Vertex

BeitragMo, Jul 18, 2005 14:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Super, habe jetzt noch schnell den Bug gefunden. (Einfach unglaublich, das ich noch zu meinem 18. Geburtstag vorn PC sitze. Heute muss ersteinmal viel gesoffen werden!)

Materialien werden noch nicht geladen, und Normals nicht berechnet. Dafür wird das Mesh erstellt mit samt Surfaces.

Code: [AUSKLAPPEN]
Strict

Import Brl.FileSystem
Import "Mesh.bmx"
Import "Surface.bmx"
Import "Material.bmx"
Import "Texture.bmx"

Const DDD_3DS_MAIN          = $4D4D
Const DDD_3DS_3DEDITOR      = $3D3D
Const DDD_3DS_OBJECTBLOCK   = $4000
Const DDD_3DS_TRIMESH       = $4100
Const DDD_3DS_VERTEXLIST    = $4110
Const DDD_3DS_FACELIST      = $4120
Const DDD_3DS_TEXCOORDS     = $4140
Const DDD_3DS_MATERIALBLOCK = $AFFF


Type T3DSLoader
   Field Stream        : TStream
   Field ChunkID       : Short
   Field ChunkSize     : Int
   Field Surface       : TSurface
   Field VertexCount   : Int
   Field TriangleCount : Int
   Field Mesh          : TMesh
   Field Materials     : TList
   
   Method ReadChunk()
      Self.ChunkID   = Self.Stream.ReadShort()
      Self.ChunkSize = Self.Stream.ReadInt()
   End Method
   
   Method ScipChunk()
      Self.Stream.Seek(Self.Stream.Pos()+ChunkSize-6)
   End Method
   
   Method ReadCString:String()
      Local Char:Byte, CString:String
      
      While Not Self.Stream.Eof()
         Char = Self.Stream.ReadByte()
         If Char = 0 Then Exit
         CString :+ Chr(Char)
      Wend
      
      Return CString
   End Method
   
   Method ReadVertexList()
      Local Index:Int, Position:Float[3]
      
      Self.VertexCount = Self.Stream.ReadShort()
      
      For Index = 0 To Self.VertexCount-1
         Position[0] = Self.Stream.ReadFloat()
         Position[1] = Self.Stream.ReadFloat()
         Position[2] = Self.Stream.ReadFloat()
         
         Self.Surface.CreateVertex(Position[0], Position[2], Position[1])
      Next
      
      Self.Surface.UpdateVertices()
   End Method
   
   Method ReadFaceList()
      Local Index:Int, Indices:Int[3], FaceListEnd:Int
      
      FaceListEnd = Self.Stream.Pos()+Self.ChunkSize
      
      Self.TriangleCount = Self.Stream.ReadShort()
      
      
      For Index = 0 To Self.TriangleCount-1
         Indices[0] = Self.Stream.ReadShort()
         Indices[1] = Self.Stream.ReadShort()
         Indices[2] = Self.Stream.ReadShort()
         Self.Stream.ReadShort()
         
         Self.Surface.CreateTriangle(Indices[2], Indices[1], Indices[0])
      Next
      
      Self.Surface.UpdateTriangles()
   End Method
   
   Method ReadTexCoords()
      Local Count:Int, Index:Int, U:Float, V:Float
      
      Count = Self.Stream.ReadShort()
      For Index = 0 To Count-1
         U = Self.Stream.ReadFloat()
         V = Self.Stream.ReadFloat()
         
         Self.Surface.SetVertexTexCoords(Index, U, V)
      Next
      
      Self.Surface.UpdateVertices(False, False, True, False, False)
   End Method
   
   Method ReadTriMesh()
      Self.Surface = Self.Mesh.CreateSurface()
   End Method
   
   Method ReadObjectBlock()
      DebugLog("3DS ObjectName: "+Self.ReadCString())
   End Method
   
   Method ReadMaterialBlock()
      Self.ScipChunk()
   End Method
   
   Method New()
      Self.Mesh      = Null
      Self.Materials = New TList
   End Method
   
   Function Load:TMesh(URL:Object)
      Local Loader:T3DSLoader, Size:Int
      
      Loader = New T3DSLoader
      
      Loader.Stream = ReadFile(URL)
      If Loader.Stream = Null Then Return Null
      
      Size = Loader.Stream.Size()
      
      ' Read MainChunk
      Loader.ReadChunk()
      If (Loader.ChunkID <> DDD_3DS_MAIN) Or (Loader.ChunkSize <> Size) Then
         Loader.Stream.Close()
         Return Null
      EndIf
      
      ' Find 3DEditor-Chunk
      While Not Loader.Stream.Eof()
         Loader.ReadChunk()
         If Loader.ChunkID = DDD_3DS_3DEDITOR Then
            Exit
         Else
            Loader.ScipChunk()
         EndIf
      Wend
      
      Loader.Mesh = New TMesh
      
      While Not Loader.Stream.Eof()
         Loader.ReadChunk()
         
         Select Loader.ChunkID
            Case DDD_3DS_OBJECTBLOCK
               Loader.ReadObjectBlock()
                              
            Case DDD_3DS_MATERIALBLOCK
               Loader.ReadMaterialBlock()
               
            Case DDD_3DS_TRIMESH
               Loader.ReadTriMesh()

            Case DDD_3DS_VERTEXLIST
               Loader.ReadVertexList()
               
            Case DDD_3DS_FACELIST
               Loader.ReadFaceList()
               
            Case DDD_3DS_TEXCOORDS
               Loader.ReadTexCoords()
               
            Default
               Loader.ScipChunk()
         End Select
      Wend
      
      Return Loader.Mesh
   End Function
End Type
vertex.dreamfall.at | GitHub

Jolinah

BeitragMo, Jul 18, 2005 14:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Gute Arbeit, und alles gute zum Geburtstag! Wink

Henry

BeitragMo, Jul 18, 2005 14:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Herzlichen Glückwunsch...zum Geburtstag und zum Mesh Loader!!! 8)
Aiya Eärendil Elenion Ancalima!

All you have to decide is what to do with the time that is given to you.

Robsite.de ist eine Anlaufstelle für Tutorials und Tools, die Noobs das Leben leichter machen!
Forensuche ist nicht nur als Lückenfüller in den oberen Links gedacht!

jungle

BeitragMo, Jul 18, 2005 17:20
Antworten mit Zitat
Benutzer-Profile anzeigen
@vertex
...dann auch mal einen herzlichen glückwunsch zum 18. Wink

seit der ersten dreide version für bmax bekomme ich die gleiche
fehlermeldung, hatte gehofft das es mit einer neueren version von
dreide klappt. Embarassed

ich drücke auf die f5 taste und es kommt folgende fehlermeldung.
Compile Error Can´t find interface for module 'pub.dreide'
ich nutzte bmx 1.10 inkl. aktueller modules.
...und ja, ich habe den ordner dreide.mod in den pub.mod folder
von bmax kopiert.
woran kann es liegen ?
danke für eine antwort
jGL
In der Realität ist die Wirklichkeit ganz anders.

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

Henry

BeitragMo, Jul 18, 2005 17:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Modul scheint nicht kompiliert zu sein. Führe ein "Build Modules" aus und es sollte gehen.
Aiya Eärendil Elenion Ancalima!

All you have to decide is what to do with the time that is given to you.

Robsite.de ist eine Anlaufstelle für Tutorials und Tools, die Noobs das Leben leichter machen!
Forensuche ist nicht nur als Lückenfüller in den oberen Links gedacht!

Suco-X

Betreff: .......

BeitragMo, Jul 18, 2005 17:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi
Auch meinen Glückwunsch zum immer besser werdenden 3D Modul und zum 18 en .
Freue mich schon auf den fertigen 3ds Loader und wollte eigentlich noch anmerken das du am besten immer eine fertig Kompilierte Version von DreiDe hochlädst. Mit fast 1.5 MB kann man diese Idee aber getrost in die Tonne kloppen. Also immer weiter, freue mich!
Übrigens jetzt alles Fehlerfrei
Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

grafbon

Betreff: ach shieet

BeitragDi, Jul 19, 2005 6:26
Antworten mit Zitat
Benutzer-Profile anzeigen
ich bin ja sooooo deprimiert...

da hab ich doch mit 17 oder so mal mit OpenGL rumgespielt.
was hab ich in der Zwischenzeit bloss gemacht?

Jetzt bin ich 23 und weiss von OpenGL immer noch nicht mehr, als
wie man eine textur ladet....oder so Wink

Und der da liefert gleich ne komplette engine.

Also ich liefere dann auch mal ne engine. hmm. aber ne game-engine, nicht nur ne 3dengine. hehe....keymap-modul ist schon mal fertig.
(dafuer wird wohl die 3d-engine crap sein Smile )

sorry fuer das geheule, aber langsam komm ich mir recht richtig sehr sehr unnütz vor in dieser welt. keine ausbildung, kein job, und das einzige was ich kann ist vorm komphuter hocken und dämlicher sein als alle anderen....so wies aussieht.

jungle

BeitragDi, Jul 19, 2005 10:10
Antworten mit Zitat
Benutzer-Profile anzeigen
@henry @all

hi,
also ich habe mir jetzt mal MinGW-3.1.0-1 installiert.
die umgebungsvariable 'mingw = c:\mingw' gesetzt
und versucht die 'build module' funktion zum laufen zu
kriegen. leider ohne erfolg Sad
wenn ich 'build modules' oder 'rebuild all modules' ausführe
ploppt sehr schnell das output tab mit dem inhalt:
--------
Building Modules
Compiling:blitz_app.c

Process complete
--------
auf.
das wie gesagt sehr schnell <1sek.
demensprechend wurde auch nicht re-builded.

was habe ich noch vergessen ?
danke nochmals.
jGL
In der Realität ist die Wirklichkeit ganz anders.

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

klepto2

BeitragDi, Jul 19, 2005 10:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Versuch mal :
bmk makemods -r pub.dreide
bmk makemods -d pub.dreide

in der DOS Eingabeaufforderung
 

Dreamora

BeitragDi, Jul 19, 2005 12:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast du bei path den pfad zum mingw\bin verzeichnis auch hinzugefügt?
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

jungle

BeitragDi, Jul 19, 2005 13:56
Antworten mit Zitat
Benutzer-Profile anzeigen
danke jetzt hat es geklappt
In der Realität ist die Wirklichkeit ganz anders.

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

jungle

BeitragDi, Jul 19, 2005 13:57
Antworten mit Zitat
Benutzer-Profile anzeigen
@dremora

ich habe nur 'mingw = c:\mingw' als umgebungsvarible
gesetzt.
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