GLBasic und 3D = Schwachsinn ?

Previous topic - Next topic

Trabant 500

Hi@All

Nachdem ich GLBasic mehr oder weniger den Rücken gekehrt hatte, wollte ich mal die 3D-Funktionalität und Benutzerfreundlichkeit verschiedener Basic-Dialekte vergleichen. Bis jetzt habe ich 3D Sachen immer mit Blitz3D gemacht.
Da ich es in GLBasic auch mal ausprobieren wollte, habe ich in 3D Studio eine Skybox erstellt (also einen Würfel mit 6 Bildern), sie exportiert, konvertiert, in GLBasic geladen, die Kamera in die Mitte gesetzt und die Skybox rotieren lassen.

Dabei sind mir folgende Sachen aufgefallen:
1. Die Textur wurde nicht mitgeladen
2. Der rotierende Würfel wird, trotz Ambientlight (ohne zusätzliche Lichter) ständig hell und dunkel, obwohl die Kamera stillsteht

Des Weiteren hab ich da mal ein paar Fragen was die 3D Sachen in GLBasic angeht:
1. Wieso wird die im 3D-Programm zugewiesene Texturenzugehörigkeit nicht mit konvertiert ?
2. Wieso kann man keine 3ds-Dateien direkt importieren ? Laut einem Thread von 2009 steht das auf der To-Do-Liste, aber das ist ja schon Jahre her !
3. Was stimmt mit dem Licht nicht ?
4. Als ich die Textur manuell zugewiesen habe (Es ging nur eine, nicht alle 6 !), wurde sie außen auf dem Würfel angezeigt, obwohl ich in 3DMax die Normalen geflippt hatte. Konvertierungsfehler ?
5. Wieso muss man dem jeweiligen Objekt JEDESMAL die Textur zur Laufzeit neu zuweisen ?
6. Wieso haben die Objekte keine ID über die man sie ansprechen kann ? Man kann also kein Objekt drehen, skalieren, bewegen etc. ohne es direkt danach zeichnen lassen zu müssen.

Ich kenne das Entitysystem, aber wieso ist sowas nicht von Anfang an integriert worden ? Mir ist schon klar, daß sowas zu programmieren viel Arbeit ist, aber wenn man sich schon die ganze Arbeit macht, wieso macht man es dann nicht gleich richtig ?

Hat jetzt nichts mit 3D zu tun, aber grundlegende Funktionen wie zum Beispiel unausgefüllte Rechtecke oder generell ein Ellipsenbefehl fehlen völlig und auch die Einbindung von DLLs entspricht ganz und gar nicht einem BASIC-Dialekt. Klar könnte man sich selber Funktionen dafür schreiben, aber wenn sowas nicht von Haus aus integriert ist, dürfte sich so eine Sprache nicht 'Basic' nennen, weil sie dem absolut nicht gerecht wird, finde ich.

Alles in Allem hätte GLBasic so eine tolle Sprache werden können, wieso hat man nur soviel falsch gemacht bzw. so wenig nachgedacht bei der Entwicklung ?  :blink:
IF was <> passt
   was = passt
ENDIF

Quentin

Ich würde sagen: Mach mal halb lang.

Was deine Probleme mit der 3D-Darstellung angeht, wäre ein wenig Coding hilfreich.

Das GL-Basis interne 3D-Format finde ich auch nicht sonderlich prickelend. Es wurden aber auch schon diverse Loader dafür vorgestellt (glaube 3DS und OBJ).

Wenn du die Entwicklung der Sprache in den letzten Jahren auch nur am Rande mitverfolgt hast, wird dir aufgefallen sein, dass das Hauptaugenmerk auf der Unterstützung von was weiss ich wie vielen unterschiedlichen Plattformen gelegen hat. Für ein Ein-Mann-Projekt beachtlich, wobei ich nicht genau weiss, wer bei dem HTML5-Kram noch geholfen hat.

Quotewieso hat man nur soviel falsch gemacht bzw. so wenig nachgedacht bei der Entwicklung ?
boah du Superheld. Dann steuer doch mal was Produktives dazu bei. Das Entity-System hast ja schon erwähnt. Arbeite doch daran weiter. Ansonsten empfehle in Unity3D.

Schranz0r

Hallo Trabant500, mal wieder :)
Wie wat wer? ... nenene mach mal langsam....



Um es kurz zu fassen:

GLB ist pure 2D Power, es hat zwar 3D, aber der Fokus liegt auf 2D!

3D:

3D in GLBasic ist mehr oder weniger ein OpenGL Wrapper... (grob gesehen)
Klar, schwäche ist das Objekte laden, dass sollte verbessert werden. Sonst ist GLB in 3D echt flott unterwegs!
Jeder programmiert sich eh seinen eigenen Bewegungsroutinen, Objektverwaltungen usw. Wieso für jeden "Mist" nen eigenen Befehl, wenn man es in 3 Zeilen meist selber machen kann?! 

Texturen mitladen: DDW-Format

Drehen der Objekte per ID:

Einen Type erstellen der sich Object schimpft und darin eine Funktion Rotate, Move und Draw. In Draw die Transformation durchführen und dann zeichen.
Das ganze kommt aus OpenGL und hat seine Vor- und Nachteile. Push- und Popmatrix ist pure Power, setze dich damit mal auseinander am besten mal mit OpenGL dann wirst du GLBasic verstehen!


Gernot hat sehrwohl nachgedacht bei seiner Entwicklung, dass kann ihn nun wirklich keiner Vorwerfen, ist ne FRECHHEIT sowas zu behaupten!
Machs besser, dann kannst den Mund so voll nehmen!
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

CptnRoughnight

Haha, hab mich schon gefragt wann so ein troll kommt!

Ich finde GLBasic für 2D, Net auch gut und effektiv... 3D hab ich mir jetzt noch nicht angeschaut, aber ich denke, wenn man eine Programmiersprache für sich auswählt dann fängt man sowieso an sich seine eigene Funktionssammlung zu erstellen, wäre ja langweilig wenns alles schon gäben täte.

Nochwas, das Crossplatform Konzept ist hervorragend.Ich kenne keine andere Sprache die mit so wenig zutun auf verschiedene Platformen kompilieren kann!

Edit: typos

Trabant 500

@Quentin
QuoteWas deine Probleme mit der 3D-Darstellung angeht, wäre ein wenig Coding hilfreich.
Code (glbasic) Select

X_LOADOBJ "skybox.ddd", 0
LOADSPRITE "skybox.png", 0

WHILE NOT KEY(1)
X_MAKE3D 1,3000, 45
X_CAMERA 0,0,0,0,0,100
X_AMBIENT_LT 0,RGB(255,255,255)

INC i,1
i=MOD(i+360,360)
X_ROTATION i,0,1,0
X_SETTEXTURE 0,-1
X_DRAWOBJ 0,0

X_MAKE2D

SHOWSCREEN
WEND
END


Quote...wird dir aufgefallen sein, dass das Hauptaugenmerk auf der Unterstützung von was weiss ich wie vielen unterschiedlichen Plattformen gelegen hat.
Ja das ist mir aufgefallen, aber was nützt weitestgehende Plattformunabhängigkeit, wenn grundlegende Befehle fehlen ? Die fehlen dann ja auch auf allen Plattformen. ;)

@Schranz0r
QuoteHallo Trabant500, mal wieder :)
Ja, ich mal wieder. :) Hallo Schranz0r.  :booze:

QuoteGLB ist pure 2D Power...
Wieso wirbt es dann aber mit der 'großartigen' 3D-Funktionalität ?

QuoteSonst ist GLB in 3D echt flott unterwegs!
Das will ich auch gar nicht bezweifeln. Die Geschwindigkeit stand erstmal außen vor.

QuoteWieso für jeden "Mist" nen eigenen Befehl, wenn man es in 3 Zeilen meist selber machen kann?! 
Vielleicht um sich 'BASIC'-Dialekt nennen zu dürfen !?
Mir ist schon klar, daß man sich eine Funktionssammlung zulegt. Das bezieht sich aber in meinem Fall eher auf eine Tileengine, eine Partikelengine und diverse Vektorfunktionen.
Klar kann man sich zu manchen Aufgaben in 3 Zeilen eine einfache Funktion selber schreiben, aber andere echte BASIC-Dialekte haben sowas in einem! Befehl integriert !

QuoteDrehen der Objekte per ID:
Mir ist bewusst, daß man auch das selber machen kann. Aber mir ging es nicht darum das es nicht möglich sei, sondern das sowas bei BASIC direkt implementiert sein müsste. Blitz3D und Purebasic zum Beispiel (um nur mal die 2 bekanntesten zu nennen) haben es ja auch.

QuotePush- und Popmatrix ist pure Power...
Das glaube ich Dir, aber auch da wird GLBasic einem echten BASIC-Dialekt absolut nicht gerecht !

QuoteGernot hat sehrwohl nachgedacht bei seiner Entwicklung...
Ja, sorry. Das war bissl unglücklich formuliert. Ich wollte damit nicht sagen das Gernot 'gar nicht' nachgedacht hat, sondern, meiner Meinung nach, einfach in die falsche Richtung.

QuoteMachs besser...
Ich kann es nicht besser und ich habe größten Respekt vor der ganzen Arbeit die da drinsteckt. Wenn ich es könnte, hätte ich es auch nicht besser, sondern anders gemacht.

@CptnRoughnight
QuoteHaha, hab mich schon gefragt wann so ein troll kommt!
Ich glaube Du hast die Definition eines Trolls nicht verstanden. Ich sagte ja nicht das ich es besser könnte und das jedes Vorschulkind eine eigene Programmiersprache hätte programmieren können !

Quote...dann fängt man sowieso an sich seine eigene Funktionssammlung zu erstellen...
Siehe weiter oben.

QuoteNochwas, das Crossplatform Konzept ist hervorragend.
Dem stimme ich absolut zu ! Allerdings sind 100 Plattformen natürlich auch sehr nützlich um auf allen das Gleiche NICHT machen zu können. ;)
IF was <> passt
   was = passt
ENDIF

Heiko

Auch wenn ich Gefahr laufe mich zu wiederholen...
Ein ordentliches natives Entity System was zu 100% läuft.
Eventuell noch Physik dazu....fertig ist der Schuh...
Und natives Laden von diversen Formaten wäre schön...

Aber auf mich hört ja keiner....

Schranz0r

#6
Wow, jetz bin ich komplett verwirrt :D
Jetzt ist auch wieder "Heiko in the building" :D


I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Trabant 500

Das seh ich auch so Heiko.
Wobei eine integrierte Physikengine wohl etwas Too-Much wäre für ein einfaches BASIC. Ein bissl will man ja noch selber zu tun haben, sonst könnte man ja gleich Gamemaker oder sowas nehmen. ;)
IF was <> passt
   was = passt
ENDIF

Heiko

Nein, ein wrapper von Newton o.ä. würde ja schon reichen...

Und @Schranz, ich schau jeden Tag hier rein, aber soviel los ist ja hier nicht mehr.
Ich baue grad mein C++ aus und arbeite mich in dx11 ein um vielleicht in ein paar Jahren selber eine kleine Engine zu haben.

Nichtsdestotrotz wäre ein besseres 3D System für GLB denke ich schon sinnvoll.
Vorallem wenn man die derzeitigen Engines teilweise betrachtet könnte man auf diese Weise massig User und demzufolge Käufer anlocken.

Aber ich hab derzeit schon immens Probleme mit der aktuellen Beta und hoffe dort läuft irgendwann alles glatt.
Vielleicht kann Gernot sich ja irgendwann mal erweichen und baut das ES nativ ein.

Das wäre der erste Schritt zu mehr Trubel hier im Board.


WPShadow

Aktuell finde ich es schade, dass hier so wenig los ist, da ich auch ein kleines (aber relativ komplexes) Projekt in GLBasic entwickle. Das jedoch leider nur in 2D.

Problem an 3D finde ich, ist, dass zwar die Basis da ist, sich leider das Ganze nicht weiter entwickelt und kleinere evtl. vorhandene Bugs zu lange bestehen bleiben... Dort liegt aber aktuell auch nicht die Priorität der Entwicklung von GLBasic. Also finde ich es zumindest schön, dass es 3D soweit beherrscht!  =D
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

kanonet

3D funktioniert genauso wie 2D. Du musst alles jedes Frame neu tun, nichts bleibt aus dem vorherigen Frame erhalten. Wenn du eine Sprite auf (0,0) haben willst musst du es jedes Frame zeichnen - wenn du ein Objekt auf (0,0,0) habe willst, musst du es jedes Frame zeichnen. - Ist doch ganz logisch? Verstehe immer nicht warum es bei 2D ok sein soll, aber man bei 3D um jeden Preis ein natives EntitySystem braucht und nicht mal in der Lage ist diese eine GBAS Datei einzubinden. Es gibt an GLBs 3D einiges zu kritisieren und zu verbesseren, aber ein Entity System um jeden Preis muss es nun wirklich nicht sein. Mittlerweile bin ich sogar sehr froh, dass es kein ES gibt, sondern alles sehr nahe an nativen OpenGL ist, so ist es sehr einfach die 3D Engine mit OpenGL-Calls aufzupolieren, gäbe es lediglich ein natives ES, wäre dies sicher nicht so leicht möglich, vom ganzen unnötigen Overhead des ES mal abgesehen.
Und Ja das Ambientlight ist Blödsinn, dieser Bug/Designfehler ist schon lange bekannt und auch Lösungen wurden präsentiert aber von Gernot nie übernommen. Und es gibt noch eine Menge anderer Bugs die teils schon seit Jahren ungefixt sind. Außerdem ist die ganze Engine Uralt da praktisch ausschließlich fixed pipline basiert. Das alles kann man kritisieren - Aber die generelle Ausrichtung halte ich für richtig, ein Zwang auf ein natives EntitySystem wäre falsch.

------
Eine Textur hat das Objekt erstmal nicht, die musst du selbst laden - und ja in OpenGL funktionieren Texturen nunmal anders als in DirectX (z.B. Blitz3D), hier nimmt man eine große Textur für das gesamte Objekt, nicht mehrere kleine für Teile des Objekts. Generell kann ich sehr empfehlen sich mit OpenGL zu befassen, dass ist dann zwar nicht mehr Basic aber dafür sehr mächtig - und das schöne an GLBasic ist, dass man beide Wege gehen kann, denn Basic und den mächtigen.
Lenovo Thinkpad T430u: Intel i5-3317U, 8GB DDR3, NVidia GeForce 620M, Micron RealSSD C400 @Win7 x64

Schranz0r

Sehr schön geschrieben ! :good:
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard