Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Topics - Trabant 500

#1
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:
#2
Hi@All.

Kann es sein, daß in der neuen Version (9.040) irgendwas nicht stimmt ? Ich habe ein Programm geschrieben was auf dem PC wunderbar läuft, aber wenn ich es für den WIZ kompiliere und dort starte zeigt er nur kurz 'Loading' an und wechselt dann wieder zurück ins Hauptmenü.

Um den Fehler einzukreisen habe ich meinen Code auf das nötigste reduziert:
Code (glbasic) Select
WHILE NOT KEY(28)
SHOWSCREEN
WEND
END


Aber selbst das funktioniert nicht. Weiß jemand warum ? :blink:
#3
Hi@All.

Ich habe gerade versucht mein GLBasic upzudaten, aber es funktioniert leider nicht. Selbst eine Neuinstallation konnte das Problem nicht lösen.
Im Anhang findet Ihr einen Screenshot der Fehlermeldung die es mir anzeigt.

Hat jemand eine Ahnung woran das liegen könnte und wie ich das Problem beseitigen kann ?

[attachment deleted by admin]
#4
Hi liebe Community.

Ich versuche mich gerade mal wieder an Types und wieder sehe ich den Wald vor lauter Bäumen nicht.
Die normalen Types habe ich mittlerweile verstanden und kann mit diesen auch arbeiten, aber mit Arrays in Types komm ich grad nicht so wirklich zurecht und die Hilfe bzw. das Forum haben mich da bis jetzt leider nicht viel weiter gebracht.

Folgendes Problem:
Ich möchte einer Funktion Werte übergeben, diese irgendwie berechnen und in einem Array speichern.  Soweit kein Problem.
Allerdings möchte ich dann dieses Array zurückgeben und in einem Type-Array speichern.

Hier mal etwas Pseudocode:
Code (glbasic) Select
FUNCTION Berechnen: wert1, wert2, schritte
LOCAL wert1, wert2, schritte

    REDIM Ergebnis[schritte]
    FOR i=0 to schritte-1
        Ergebnis[i]=i*wert1+wert2
    NEXT

    RETURN Ergebnis[]
ENDFUNCTION


Aufgerufen werden soll das dann folgendermaßen zum Beispiel:
Code (glbasic) Select
W.BlaBla1[]=Berechnen(5, 3, 15)
W.BlaBla2[]=Berechnen(2, 13, 800)
DIMPUSH Werte[],W

X.BlaBla1[]=Berechnen(7, 5, 120)
X.BlaBla2[]=Berechnen(4, 37, 3587)
DIMPUSH XWerte[],X


Wie man hoffentlich sieht, möchte ich die Funktion nicht nur für eine bestimmte Typestruktur nutzen, sondern sie soll von mehreren, unabhängig voneinander, angesprochen werden können.
Kann mir da bitte jemand auf die Sprünge helfen, oder geht das gar nicht so wie ich mir das vorstelle ?
#5
Hi@All.

Ich hab das Problem das Polyvector das verwendete Sprite verzerrt, sobald die Kanten nicht parallel zueinander sind. Wieso ist das so und gibt es dafür eine Lösung ?
#6
Servus.

Ich sitze oft hinter meinem Schlagzeug und spiele einfach so vor mich hin. Dabei kommt es hin und wieder vor das mir ein Rhythmus gut gefällt und ich nichts zum Aufschreiben dabeihabe. Meinen WIZ habe ich allerdings immer einstecken und deswegen habe ich mir einen kleinen Drumcomputer programmiert.
Aus der aktuellen BPM-Zahl wird die Länge eines Ticks berechnet und wenn die vergangene Zeit gleich oder größer als diese Länge ist, wird einen Tick weitergezählt und die aktuellen Sounds ausgegeben.
Die vergangene Zeit wird mit GETTIMERALL() berechnet, aber irgendwie ist das zu ungenau. Wie man sich vorstellen kann muss sowas so exakt wir ein schweizer Uhrwerk laufen. Leider tut es das aber nicht, weil die vergangene Zeit immer größer ist als die benötigte. Dadurch holpert es manchmal und läuft auch absolut nicht im Metrum.
Hat jemand eine Idee wie man dieses Problem beheben und das Programm absolut exakt machen kann ?
#7
So...Ich mal wieder.  =D

Dieser Thread ist für ein paar Fragen gedacht die ich habe bzw. die mir noch einfallen könnten.
Ein paar weiß ich jetzt schon.  :D

1. Wird es einen 'DRAWCIRCLE'-Befehl geben ? Mir ist klar, daß man das ganz leicht mit Sin und Cos selber machen kann, aber es gibt ja auch die anderen 'DRAW'-Befehle und irgendwie fehlt der noch.
2. Wäre es möglich dem 'DRAWRECT'- und vielleicht einem möglichen 'DRAWCIRCLE'-Befehl eine Option hinzuzufügen ob diese Ausgefüllt oder nur umrandet angezeigt werden sollen ?
3. Kann man nicht die 'DRAWSPRITE'-Befehle einzeln aufrufen ? Also das 'ROTOSPRITE' zum Beispiel ein Sprite nur rotiert und nicht gleich anzeigt, sondern 'DRAWSPRITE' gesondert aufgerufen werden muss ?
4. Gibt es einen Befehl mit dem man den Bezugspunkt eines Sprites festlegen kann bzw. könnte dies dem Befehlssatz hinzufügen ?
5. Kann man im Forum umstellen das eine gesendete PN automatisch beim Absender gespeichert wird ?

So, das wars erstmal. Aber neue Fragen kommen bestimmt.  :nana:  =D

[Edit]
Hab gerade beim 2. Punkt 'DRAWSPRITE' korrigiert, da ich eigentlich 'DRAWCIRCLE' meinte.
#8
Hi.

Ich bin gerade dabei mich in die GLBasic-Typestrukturen einzuarbeiten und habe es auch soweit verstanden. Ein Problem habe ich allerdings noch, welches bissl schlecht zu erklären ist. Ich versuche es mal am beliebten Beispiel eines Weltraumshooters(Multiplayer).

Nehmen wir an wir haben eine Typestruktur namens 'Player'. Darin befinden sich die Daten für alle Spielerobjekte.
Code (glbasic) Select
Type Player
    PosX
    PosY
    usw...
End Type


Gehen wir weiterhin davon aus, daß wir 4 Spieler-Raumschiffe erstellt haben. Es sind also 4 Einträge vorhanden.
Jedem der zwei Teams sollen nun jeweils 2 Raumschiffe zugeteilt werden. Dafür gibt es eine weitere Typestruktur namens 'Teams'. Darin wird festgelegt welche Raumschiffe zu welchem Team gehören.
Es sollen zum Beispiel die Raumschiffe mit der Nummer 0 und 1 dem Team Rot und die Raumschiffe 2 und 3 dem Team Blau zugeteilt werden.
Wenn man jetzt in einer Schleife die Teams abfragt, aber nur die Blauen berechnen will, so müsste man in der Struktur 'Teams' abfragen welche 'Player'-Nummern zum blauen Team gehören und dessen PosX, PosY etc. aktualisieren. Wie kann man dies bewerkstelligen ? Also wie kann man von einer Typestruktur aus auf eine andere zugreifen ?

Es ist ein bissl blöd zu erklären, aber ich hoffe das es trotzdem halbwegs verständlich ist. ;)


PS:
Ich programmiere mittlerweile seit über 22 Jahren und eigentlich durchgängig im Basic-Dialekt (Html, PHP, etc. mal ausgenommen). Dadurch habe ich schon viele Typestrukturen kennengelernt und frage mich wieso das bei GLBasic so extrem kompliziert gemacht wurde !? Wenn man mal die Umsetzung bei Blitzbasic betrachtet, so erkennt man, daß es da um einiges einfacher, aber dennoch sehr effektiv ist. Wieso ist das bei GLBasic denn so umständlich mit den Types ?
#9
Hi@All

Bin neu hier im Forum und komme eigentlich aus der Blitzbasic-Ecke. Da ich allerdings nun auch etwas f?r den GP2X Wiz programmieren m?chte, habe ich mir mal die Demoversion runtergeladen und bin grad bissl am austesten. Die meisten Befehle gibt es ja auch in anderen Basic-Dialekten, aber ein paar Fragen tun sich mir dann doch auf.

Hier die erste: ;)
Ich wollte mir einfach nur eine Zahl zwischen 0 und 100 ausgeben lassen. Also schrieb ich folgendes Programm:
Code (glbasic) Select
PRINT RND(100)
SHOWSCREEN
KEYWAIT
END


Das funktioniert auch. Wenn man jetzt bei jedem eine neue Initialisierung starten will, kann man ja Seedrnd nutzen, aber genau diesen Befehl verstehe ich nicht ganz.
In der Hilfe steht, da? Seedrnd mit GetTimerAll() initialisiert wird. Diese Zeit ist doch aber immer diesselbe und somit bekommt Seedrnd doch immer den gleichen Wert und m?sste doch eigentlich immer die selben Zufallswerte liefern, was es aber nicht tut. Warum nicht ? Das Gleiche ist es wenn ich Seedrnd immer mit der gleichen Zahl initialisiere, also zum Beispiel 'Seedrnd 5'.

Bei Blitzbasic kann man mit dem Befehl 'Millisecs()' die Anzahl der vergangenen Sekunden seit 01.01.1970 ausgeben lassen. Gibt es sowas bei GLBasic auch ?
Man kann sich ja mit 'Platforminfo$' die aktuelle Zeit ausgeben lassen, aber wie wandelt man das in eine Zahl um ? 'Format$' kann ja nur von Zahlen in Strings umwandeln.

So...f?rs Erste wars das erstmal an Fragen, aber das reicht ja auch erstmal. ;)