Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Open GL Übung von Eastler + Würfel?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Bibliotheken
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Löwenherz



Anmeldungsdatum: 25.08.2008
Beiträge: 73
Wohnort: auf einer sonnigen Insel :)

BeitragVerfasst am: 27.08.2008, 22:20    Titel: Open GL Übung von Eastler + Würfel? Antworten mit Zitat

Hallo liebe OpenGL Freunde mit und von Freebasic, ich möchte in der Open GL Übung von "Eastler" (super gemacht!!!) einfach noch einen sich drehenden Würfel einbauen, bis Teil 4 habe ich mir das schon angeschaut...

Ich habe für einen Würfel nur das hier gefunden:

glLoadIdentity '' Reset The Current Modelview Matrix
glTranslatef 1.5, 0.0, -7.0 '' Move Right 1.5 Units And Into The Screen 7.0
glRotatef rquad,1.0, 1.0, 1.0 '' Rotate The Quad On The X axis ( NEW )

glBegin GL_QUADS '' Draw A Quad
glColor3f 0.0, 1.0, 0.0 '' Set The Color To Blue
glVertex3f 1.0, 1.0, -1.0 '' Top Right Of The Quad (Top)
glVertex3f -1.0, 1.0, -1.0 '' Top Left Of The Quad (Top)
glVertex3f -1.0, 1.0, 1.0 '' Bottom Left Of The Quad (Top)
glVertex3f 1.0, 1.0, 1.0 '' Bottom Right Of The Quad (Top)

glColor3f 1.0, 0.5, 0.0 '' Set The Color To Orange
glVertex3f 1.0, -1.0, 1.0 '' Top Right Of The Quad (Bottom)
glVertex3f -1.0, -1.0, 1.0 '' Top Left Of The Quad (Bottom)
glVertex3f -1.0, -1.0, -1.0 '' Bottom Left Of The Quad (Bottom)
glVertex3f 1.0, -1.0, -1.0 '' Bottom Right Of The Quad (Bottom)

glColor3f 1.0, 0.0, 0.0 '' Set The Color To Red
glVertex3f 1.0, 1.0, 1.0 '' Top Right Of The Quad (Front)
glVertex3f -1.0, 1.0, 1.0 '' Top Left Of The Quad (Front)
glVertex3f -1.0, -1.0, 1.0 '' Bottom Left Of The Quad (Front)
glVertex3f 1.0, -1.0, 1.0 '' Bottom Right Of The Quad (Front)

glColor3f 1.0, 1.0, 0.0 '' Set The Color To Yellow
glVertex3f 1.0, -1.0, -1.0 '' Top Right Of The Quad (Back)
glVertex3f -1.0, -1.0, -1.0 '' Top Left Of The Quad (Back)
glVertex3f -1.0, 1.0, -1.0 '' Bottom Left Of The Quad (Back)
glVertex3f 1.0, 1.0, -1.0 '' Bottom Right Of The Quad (Back)

glColor3f 0.0, 0.0, 1.0 '' Set The Color To Blue
glVertex3f -1.0, 1.0, 1.0 '' Top Right Of The Quad (Left)
glVertex3f -1.0, 1.0, -1.0 '' Top Left Of The Quad (Left)
glVertex3f -1.0, -1.0, -1.0 '' Bottom Left Of The Quad (Left)
glVertex3f -1.0, -1.0, 1.0 '' Bottom Right Of The Quad (Left)

glColor3f 1.0, 0.0, 1.0 '' Set The Color To Violet
glVertex3f 1.0, 1.0, -1.0 '' Top Right Of The Quad (Right)
glVertex3f 1.0, 1.0, 1.0 '' Top Left Of The Quad (Right)
glVertex3f 1.0, -1.0, 1.0 '' Bottom Left Of The Quad (Right)
glVertex3f 1.0, -1.0, -1.0 '' Bottom Right Of The Quad (Right)
glEnd

Soweit ich weiß als Neuling, muss ich das auch im Hauptteil ansteuern... Vielleicht kann jemand helfen:-)

2. Frage:

Kann ich im OpenGL Modus auch ganz normale Menüs einbauen wie bei einer Windows GUI mit Freebasic??? Ich bin noch recht ahnungslos, was mit Freebasic alles gemacht werden kann, aber ich lerne täglich dazu...


Beste Grüße und eigentlich auch schon Gute Nacht:-) Ciao, es grüßt mit müden Augen Löwenherz
_________________
Das Leben ist wie eine Pralinenschachtel, man weiß nie, was dort drinnen für tolle wie böse Überraschungen stecken
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
darkinsanity
aka sts


Anmeldungsdatum: 01.11.2006
Beiträge: 456

BeitragVerfasst am: 28.08.2008, 10:56    Titel: Antworten mit Zitat

hi
1. du kannst das auch in eine sub/function stecken und in der hauptschleife aufrufen, du brauchst aber nach deinen OpenGL-befehlen ein "flip". weiterhin musst du daran denken, "rquad" als GLfloat zu deklarieren.
2. Ein GUI im OpenGL-mode... das wird nicht einfach werden, selbst Textausgabe ist nicht einfach... siehe hier

Falls dir aber eine einfache Textausgabe genügt (sieht dann aber nicht soo gut aus), solltest du dir dieses Tut von Stormy ansehen: http://other.paul-grunewald.de/ogl/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Löwenherz



Anmeldungsdatum: 25.08.2008
Beiträge: 73
Wohnort: auf einer sonnigen Insel :)

BeitragVerfasst am: 29.08.2008, 00:23    Titel: Kann ein Quad nicht einbauen Antworten mit Zitat

hi zurück:-)

... wenn das alles so einfach wäre (haha)lächeln)) bekomme nicht viel hin mit "Quads", außer lauter Fehlermeldungen, wenn ich ein Rechteck in die Open GL 4 Übung einbauen will...

Was ist ein "Quad"? - Sechs Seiten... ok, wie wird "rquad" als GLfloat deklariert? Das ist mir noch eine Nummer zu hoch, ich dachte ich könnte aus der Übung lernen, aber wie schon erwähnt, ich bekomme zu viele Fehlermeldungen... kann nicht kompilieren... Nur ein kleiner Auszug...

'Declarationen
'-------------------------
DECLARE SUB Koordinatensystem(was AS STRING, TxtPara AS STRING, Para1 AS SINGLE, Para2 AS SINGLE, Para3 AS SINGLE)
DECLARE SUB Objekt1()
DECLARE SUB BewegtePunkte()
DECLARE SUB Schachbrettboden(was AS STRING, StrPara AS STRING, Para1 AS SINGLE, Para2 AS SINGLE, Para3 AS SINGLE)
DECLARE SUB Pyramide (was AS STRING, StrPara AS STRING, Para1 AS SINGLE, Para2 AS SINGLE, Para3 AS SINGLE)
Declare Sub Quadrat (was As STRING, StrPara AS STRING, Para1 AS SINGLE, Para2 AS SINGLE, Para3 AS SINGLE, Para4 AS SINGLE, Para5 AS SINGLE, Para6 AS SINGLE)
'-------------------------
' das Fenster öffnen
'-------------------------
screen 19, 16, , 2

'-------------------------
' Open-GL Init
'-------------------------
glViewport 0, 0, 800, 600 ' den Current Viewport auf eine Ausgangsposition setzen
glMatrixMode GL_PROJECTION ' Den Matrix-Modus Projection wählen
glLoadIdentity ' Diesen Modus auf Anfangswerte setzen
gluPerspective 45.0, 800.0/600.0, 0.1, 100.0 ' Grundeinstellungen des Anezeigefensters festlegen
glMatrixMode GL_MODELVIEW ' Auf den Matrix-Modus Modelview schalten
glLoadIdentity ' und auch diesen auf Anfangswerte setzen
glClearColor 0.5, 0.5, 0.50, 0.0 ' Setze Farbe für löschen auf Mittelgrau
glClearDepth 1.0 ' Depth-Buffer Löschen erlauben
glEnable GL_DEPTH_TEST ' den Tiefentest GL_DEPTH_TEST einschalten
glClear GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT 'Tiefen- und Farbpufferbits löschen
'---------------------------
'HAUPTTEIL
'---------------------------
Schachbrettboden("SetzKantenLaenge", "", 0.5, 0, 0)
Schachbrettboden("SetzQuadsZahl", "", 24, 24, 0) :'6 Einheiten +und- = 12Einheiten Koordiantensystem, bei 0.5 Quadgröße 24 Stück
Schachbrettboden("SetzFarbe1", "", 0, 0, 0.5) :'erste Farbe dunkleres blau
Schachbrettboden("SetzFarbe2", "", 0.25, 0.25, 0.25) :'erste Farbe dunkles grau
Schachbrettboden("SetzStartPos", "", -6, -6, -1) :'ganz vorne ganz links beginnen, Boden auf Hoehe(3.Para)-1 verlegen(Y)

Pyramide("SetzLaengen" , "", 1, 1, 1)
Pyramide("SetzFarbe1" , "", 1, 0, 0)
Pyramide("SetzFarbe2" , "", 0, 1, 0)
Pyramide("SetzFarbe3" , "", 0, 0, 1)
Pyramide("SetzFarbe4" , "", 1, 1, 0)
Pyramide("SetzFarbe5" , "", 1, 0, 1)

Quadrat("SetzLaengen" , "", 1, 1, 1, 1)
Quadrat("SetzFarbe1" , "", 1, 1, 1, 1)
Quadrat("SetzFarbe2" , "", 1, 0, 1, 1)
Quadrat("SetzFarbe3" , "", 1, 0, 0, 1)
Quadrat("SetzFarbe4" , "", 1, 0, 0, 1)
Quadrat("SetzFarbe5" , "", 1, 1, 0, 1)
Quadrat("SetzFarbe6" , "", 1, 0, 0, 1)

und hier:

Pyramide("BeschreibungsListe" , "", PyraXDrehw, PyraYDrehw, PyraZDrehw) :'und eine zweite Pyramide

Quadrat("BeschreibungsListe" , "", QuadsXDrehw, QuadsYDrehw, QuadsZDrehw) :'und dann geht das so weiter

also da sind zu viele Fragen offen... Wie wird ein Würfel in Freebasice deklariert???


2) GUI im OpenGL modus ist wirklich schwierig, habe mich umgehört und geschaut... ich bleibe bei WindowsGUI oder einer anderen Bibliothek für OpenGLer ..., die Textausgabe oder Message Boxes sind wirklich schwierig... (noch) zwinkern

Gebe erst einmal auf... puh, ich muss jetzt schlafen, grinse dabei...

Beste Grüße in die Nacht und ich übe weiter (gebe nicht so schnell auf, war ein Scherzo!) ;-D

PS ich baue kleinere Übungen, wo ich mehr lerne, Schritt für Schritt an die größeren Brocken heran, aber ich lerne das noch... bzw. "Eastler" hat Zeit und hilft mit:-))) wäre klasse... Ciao und Servus
_________________
Das Leben ist wie eine Pralinenschachtel, man weiß nie, was dort drinnen für tolle wie böse Überraschungen stecken
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
darkinsanity
aka sts


Anmeldungsdatum: 01.11.2006
Beiträge: 456

BeitragVerfasst am: 29.08.2008, 11:43    Titel: Antworten mit Zitat

ok, kleiner Hinweis: anstatt screen 19, 16 usw lieber screenres benutzen.
Code:
screenres 640, 480, 32, , 2

wenn du OpenGL im 16bit modus laufen lässt, ist es langsamer als mit 32bit, da die grafikkarte mit 32bit rendert.

ein quad ist, grob gesagt, ein viereck. das heißt, du musst, um ein quad zu zeichnen, glBegin GL_QUADS ausführen, und dann vier koordinaten angeben. danach dann ein glEnd.

als GLfloat deklarieren ist einfach:
Code:
dim rquad as GLfloat


hier ein Beispiel für die Hauptschleife:

Code:
dim rquad as GLfloat

do
   glTranslatef 1.0, 0.0, -7.0
   glRotatef rquad, 0.0, 1.0, 0.0
   glBegin GL_QUADS
      glColor3f 0.0, 0.0, 1.0
      glVertex3f 0.0, 0.0, 0.0
      glVertex3f 0.0, 1.0, 0.0
      glVertex3f 1.0, 1.0, 0.0
      glVertex3f 1.0, 0.0, 0.0
   glEnd
   
   flip
loop until multikey(&h01)


natürlich musst du vorher OpenGL initialisieren.

welche Fehlermeldungen bekommst du denn? welches Betriebssystem hast du? Welche Compiler-version?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 29.08.2008, 14:56    Titel: Antworten mit Zitat

Und ein Quadrat ist grob gesagt langsamer als GL_TRIANGLE_FAN o.ä., und Immediate Modus ist sowieso noch langsamer. (Der wird in OpenGL 3.1 wahrscheinlich eh raus fliegen...)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eastler_dart



Anmeldungsdatum: 24.09.2005
Beiträge: 177
Wohnort: Baden-Würtemberg + Sachsen

BeitragVerfasst am: 30.08.2008, 20:15    Titel: Antworten mit Zitat

Hallo Löwenherz,

Wenn du 3D-Objekte erstellen willst, mußt du diese aus einelnen 2D-Objekten zusammenbasteln. Soweit hast du das ja schon erkannt. Aber deine Namensgebungen stimmen noch nicht so richtig:
Würfel = cube , das gibts aber bei OpenGL nicht als fertiges Teil
Quadrad=Quad, kann in OpenGL durchaus als Viereck übersetzt werden.
Also wird dein Würfel am Schluß aus 6 Quads bestehen, die im 3D-Raum so passend angeordnet sind, daß diese 6 Vierecke wie ein Würfel aussehen.

Schau dir dazu im Tutorial nochmal an, wie eine Pyramide entsteht.
Ein Quad als Boden, vier Dreicke daraufgestellt. Jedoch beachte beim Pyramidendurchlesen die Positionsangaben der Eckpunkte des Vierecks und der vier Dreiecke. Versuche, dir jeden dieser Eckpunkte im dreidimensionalen Raum vorzustellen. Das ist die erste große Hürde, die man bei 3D-Projekten nehmen muß.
Nicht auf Papier in 2D denken, nur in 3D. Die Seitenwände(Dreiecke) der Pyramide stehen nicht senkrecht, sondern hängen schräg nach hinten zur Boden(Quad)mitte. Wenn Dir diese Positionsangaben auf allen 3 Achsen klar und einfach zu verstehen sind, dann kannst du dich an einen Würfel wagen.

Der Würfel besteht dann aus 6 Vierecken. Ob du die jetzt zu Anfang als Vierecke/Quadrate deffinierst, oder jedes Viereck nochmal aus Dreiecken zusammenbastelst, ist erst mal egal. Als Übung denke ich, sind die Vierecke besser zu verstehen.
Meine Vorredner haben trotzdem Recht, wenn dir das später mal alles geläufig ist, und du ein anspruchsvolleres Programm erstellen willst, dann sollten die Vierecke aus zwei Dreiecken zusammengestellt werden.

Mach dir über das richtigerweise gesagte zum "Immediate Modus" noch keine Gedanken, solange du noch übst, ist das kein Thema für dich - ich selbst mach auch noch Viel erst mal auf die "Einfache" und "tune" das später.

Im Moment häng ich noch bei den Texturen, dieses Tutorialthema ist eine harte Nuß. Wenn das mal fertig ist, kommt danach auch das erwähnte "Tunen" dran (wenn meine Zeit dafür reicht).

So, jetzt ein paar Tips zu dem drehenden Quad:
1 ) erstelle eine SUB dafür
2 ) Im Hauptteil nach dem "Zettel drauflegen" diese neue Sub aufrufen
(ungefähr dort, wo Koordinatensystem und Boden aufgerufen werden)
3 ) In der Sub eine Variable für den Rotierwert STATIC dimmen
bei jedem Aufruf der Sub, diese Variable erhöhen
(um 1 oder 5...probieren)
4 ) in der Sub einen "Zettel pushen"
5 ) ggf. Zeichenfarbe setzen
6 ) glRotate Rotierwert, 1,0,0 aufrufen, wenn um die X-Achse rotiert wird
bzw. glRotate Rotierwert, 0,1,0 bei Rotation um Y, um Z analog.
7 ) mit GL_Begin eine Beschreibungsliste eröffnen
8 ) die vier Punkte des Vierecks deffinieren
9 ) Gl_End für Listenende
10) mit Pop den "zusätzlichen Zettel" wieder wegschmeißen
So in etwa die Konstruktionsliste. Versuchs mal, denke du schaffst das, auch wenn der Kopf rauchen wird. Wenn du diese Nuß selber knackst, haste nicht einfach ein Viereck erstellt, sondern ein Stück OpenGL verstanden.
Achte dabei noch nicht soooo sehr auf "meine Subs" mit den Parametern "was" und den vielen Aufrufen. Erstelle deine eigene ohne Parameterübergaben, schreib in der Sub direkt Zahlen als Positionen rein ohne Variablen dafür zu benutzen, z.B glVertex3f 1.0, 1.0, 1.0, das versteht man am Anfang besser.
Die einzigste Variable die du in der SUB brauchst, ist der Rotierwert: "STATIC AS DOUBLE Rotierwert" - oder so ähnlicher Name. Jedenfalls Static anstelle Dim verwenden, damit der Inhalt der Variablen beim nächsten Aufruf der Sub noch drin steht.
Wenn als Double gedimmt, dann der Rotierbefehl glrotate mit einem "f" dahinter, "glRotatef Rotierwert....", dann erwartet glRotate eine Double-Variable.

Also summa sumarum als Tip: machs wie ich, nimms erst mal ganz einfach, mach ein paar Übungen. Erstelle zuerst ein einzelnes Quad und laß das rotieren. Das geht, und als Übung erst mal übersichtlicher.
die anderen Vierecke noch dazuschreiben (in die Beschreibungsliste), wenn sich das Quad mal dreht, kannst du dann immer noch.

zur 2.Frage - Menüsystem:
dafür gibts viele Wege, entweder über Texturen oder über direktes Schreiben auf den sogenannten Framebuffer. Du wirst es schon aus meiner Beschreibung entnehmen, nicht grad einfach.
Verwende als Textausgabe das Konsolenfenster, so wie im Tutorial die Positionswerte etc dort ausgegeben werden. Tastaturabfragen ist ja im Tutorial auch beschieben. Nimm diese Technik als vorläufige Notlösung.
Wenn das Textur-Tutorial mal fertig ist, kannst du damit schon "richtige" Bilder auf den OpenGL-Bildschirm zaubern, damit ist dieses Thema dann auch ein Stück einfacher. Klar steht noch ein Tutorial zur Textausgabe auf dem Plan, aber meine Zeit....

Hoffe es hilft

Eastler
_________________
Kaum macht mans richtig, schon geht's
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen Yahoo Messenger
Löwenherz



Anmeldungsdatum: 25.08.2008
Beiträge: 73
Wohnort: auf einer sonnigen Insel :)

BeitragVerfasst am: 31.08.2008, 18:58    Titel: kleine rechtecke übung mit farben Antworten mit Zitat

Hallo liebe Freebasic Freunde, danke erst einmal für die tollen Antworten... Ich war "zu schnell" und ich dachte, es wäre alles soooo "einfach"! lächeln))

Also zurück auf Start (wie bei Monopoly) und lerne die Felder, Straßen und Häuser einzeln kennen zwinkern

Fange von vorne an, kleine Übungen und kleine Schritte, bis ich das alles verstehe... habe kleine Übung angefügt mit Rechtecken und die Farben verändert... mehr nicht! lächeln muss lachen...

Ich will mich steigern!


'-------------------------
'DIMs
'-------------------------
DIM SHARED AS STRING Tastendruck

'-------------------------
'Includes
'-------------------------
#include "fbgfx.bi"
#include once "GL/gl.bi"
#include once "GL/glu.bi"

'-------------------------
'Declarationen
'-------------------------
DECLARE SUB Objekt1()

'-------------------------
' das Fenster öffnen
'-------------------------
screen 19, 16, , 2

'-------------------------
' Open-GL Init
'-------------------------
glViewport 0, 0, 800, 600 ' den Current Viewport auf eine Ausgangsposition setzen
glMatrixMode GL_PROJECTION ' Den Matrix-Modus Projection wählen
glLoadIdentity ' Diesen Modus auf Anfangswerte setzen
gluPerspective 45.0, 800.0/600.0, 0.1, 100.0 ' Grundeinstellungen des Anezeigefensters festlegen
glMatrixMode GL_MODELVIEW ' Auf den Matrix-Modus Modelview schalten
glLoadIdentity ' und auch diesen auf Anfangswerte setzen
glClearColor 0.5, 0.5, 0.50, 0.0 ' Setze Farbe für löschen auf Mittelgrau
glClearDepth 1.0 ' Depth-Buffer Löschen erlauben
glEnable GL_DEPTH_TEST ' den Tiefentest GL_DEPTH_TEST einschalten
glClear GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT 'Tiefen- und Farbpufferbits löschen
'---------------------------
'HAUPTTEIL
'---------------------------

DO UNTIL Tastendruck = CHR(27) :'die Schleife solange immer wiederholen, bis in der Variablen Tastendruck die Esc-Taste (chr(27) steht
'---------------------------
'ProgrammSchleife
'---------------------------
Tastendruck = INKEY 'Jeder Tastendruck wird sofort in die Variable Tastendruck gespeichert

Objekt1 '<<<<<<<<<<<<<<<<hier die neue Programmzeile rein

flip 'liebes OpenGL, zeig alles, was in der Schleife für dich vornedran steht, auf Monitor an
'---------------------------
'Ende der Schleife
'---------------------------
LOOP

END

'-------------------------
SUB Objekt1 ()
'hier kommen die Programmzeilen zum Anzeigen
'von dem Dreieck rein


glBegin GL_QUADS
glColor3f 1.0,0.60,0.0 :' Zeichenfarbe auf gelb
glVertex3f -1.5, 2.0, -6.0 :' der erste Punkt
glVertex3f -1.5, 1.0, -6.0 :' der zweite Punkt
glVertex3f -0.5, 1.0, -6.0 :' der dritte (vierte) Punkt
glVertex3f -0.5, 2.0, -6.0 :' der vierte (dritte) Punkt

glColor3f 1.0,0.0,0.0 :' Zeichenfarbe auf gelb
glVertex3f 0.5, 2.0, -6.0 :' der fünfte Punkt
glVertex3f 0.5, 1.0, -6.0 :' der sechste Punkt
glVertex3f 1.5, 1.0, -6.0 :' der siebente(achte) Punkt
glVertex3f 1.5, 2.0, -6.0 :' der achte(siebente) Punkt

glColor3f 1.0,0.80,0.0 :' Zeichenfarbe auf orange
glVertex3f -2.5, -1.5, -6.0 :' der neunte(siebente) Punkt
glVertex3f -2.5, -2.0, -6.0 :' der zehnte(siebente) Punkt
glVertex3f -2.0, -2.0, -6.0 :' der elfte(siebente) Punkt
glVertex3f -2.0, -1.5, -6.0 :' der zwölfte(siebente) Punkt

glColor3f 0.2,0.50,0.6 :' Zeichenfarbe auf bläulich
glVertex3f -1.5, -1.5, -6.0 :' der dreizehnte Punkt
glVertex3f -1.5, -2.0, -6.0 :' der vierzehnte Punkt
glVertex3f -1.0, -2.0, -6.0 :' der fünfzehnte Punkt
glVertex3f -1.0, -1.5, -6.0 :' der sechzehnte Punkt

glColor3f 0.3,0.45,0.75 :' Zeichenfarbe auf
glVertex3f -0.5, -1.5, -6.0 :' der siebzehnte Punkt
glVertex3f -0.5, -2.0, -6.0 :' der achtzehnte Punkt
glVertex3f -0.0, -2.0, -6.0 :' der neunzehnte Punkt
glVertex3f -0.0, -1.5, -6.0 :' der zwanzigste Punkt

glColor3f 0.4,0.65,0.85 :' Zeichenfarbe auf
glVertex3f 0.5, -1.5, -6.0 :' der einundzwanzigste Punkt
glVertex3f 0.5, -2.0, -6.0 :' der zweiundzwanzigste Punkt
glVertex3f 1.25, -2.0, -6.0 :' der dreiundzwanzigste Punkt
glVertex3f 1.25, -1.5, -6.0 :' der vierundzwanzigste Punkt

glColor3f 1.,1.0,1.0 :' Zeichenfarbe auf weiß
glVertex3f 1.75, -1.5, -6.0 :' der 25te Punkt
glVertex3f 1.75, -2.0, -6.0 :' der 26te Punkt
glVertex3f 2.25, -2.0, -6.0 :' der 27te Punkt
glVertex3f 2.25, -1.5, -6.0 :' der 28te Punkt

glEND
END SUB

das müßte bei allen laufen... Also lern ich erst mal die Befehle, um dann meine Ideen umzusetzen...

O.k. Ich möchte ganz gerne eine kleines 3d programm später gestalten, wo ich auf Befehl hin (create cube, primitives, sphere, sds, nurbs) usw... erstellen kann... Ob das überhaupt mit OpenGL sinnvoll ist, keine Ahnung... aber ich finds toll, dass bei Open GL so viel Leben im Spiel ist und es rotiert und fliegt durch die Luft und und und...

bis bald mal wieder und dann mehr... Es gibt ja auch noch ein Privatleben mit Freundin und Hund! grinsen

Ciao und vielen herzl. Dank an alle hier, wie gesagt, ich bin noch recht neu und frisch hier und freue mich über jede Antwort...

beste Grüße, Löwenherz
_________________
Das Leben ist wie eine Pralinenschachtel, man weiß nie, was dort drinnen für tolle wie böse Überraschungen stecken
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Eastler_dart



Anmeldungsdatum: 24.09.2005
Beiträge: 177
Wohnort: Baden-Würtemberg + Sachsen

BeitragVerfasst am: 31.08.2008, 19:30    Titel: Antworten mit Zitat

Hallo Alle, Hallo Löwenherz

freu, du bist auf dem richtigen Weg!
In deinem Beispiel sehe ich mich selbst vor einem halben Jahr - grins

Wenn man nicht jeden "einfachen" Befehl genau kennt, kann man nix Großes machen.

Für die Art und Weise, wie ich "verkompliziert" mit den Subs, deren Parametern und mehrfaches Sub-Aufrufen zum Daten setzen umgehe,
entschuldige ich mich hiermit.
Aber das war ein "Kunstgriff". Zum Erlernen von OpenGL ist es blöd, aber zum Wiederverwenden dieser Subs in anderen Programmen notwendig.
Nur, wenn man in einer solchen "verallgemeinerten" Sub die vielen Eckdaten auch ändern kann, hat man die Möglichkeit, diese Subs unter anderen Bedingungen wieder zu verwenden.
Und weil ich sowas schon länger so betreibe, ist mir nicht wirklich aufgefallen, wie kompiliziert das aussieht.
Das Grundprinzip ist ja einfach. Weil z.B. ein Würfel 8 Flächen hat, und die Möglichkeit besteht, daß man jeder Seite eine andere Farbe gibt, muß man der Sub entsprechend 8 parameter für die Farben übergeben. Jede Farbe braucht drei Angaben (R, G, B), macht 24 Parameter für die Farben, die Größe des Würfels in 3 Richtungen, die Position des Würfels.....
So eine Aufrufprogrammzeile mit derart vielen Parametern kann man nicht mehr lesen.
Und deshalb enthält die Sub immer mehrere verschiedene Aufgabenlösungen, und im ersten Parameter wird angegeben, welche Aufgabe zu lösen ist.
Durch diese unterschiedlichen Aufgaben kann man die unzähligen Parameter in entsprechend viele Variablen in der SUB setzen, sodaß beim eigentlichen Anzeigen-Aufruf alle Daten wie gewünscht vorhanden sind.

Hoffe es hilft

Eastler
_________________
Kaum macht mans richtig, schon geht's
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen Yahoo Messenger
Löwenherz



Anmeldungsdatum: 25.08.2008
Beiträge: 73
Wohnort: auf einer sonnigen Insel :)

BeitragVerfasst am: 01.09.2008, 20:44    Titel: Glut32.dll nicht finden??? Antworten mit Zitat

Hi liebe FB Freunde...

kleine Frage anbei, weil mir das öfters vorkommt in letzter Zeit grinsen

Habe ein Beispiel mit Freebasic und es mit FBEDIT kompiliert, da taucht dann so etwas auf...

#include "GL/glut.bi"

Beim Kompilieren gibts dann diesen Fehler, gibt keine Exe datei aus.

"Konnte glut32.dll nicht laden", Programm also nicht starten...

Wer kann mir in einfachen Worten erklären, was es damit auf sich hat???

Es geht wohl um Bibliotheken oder Dateien die mitgeladen werden müssen mit den Freebasic Beispielen???

Beste Grüße und ich arbeite mich jetzt weiter mit den OpenGL Übungen voran bzw. den einfachen Beispielen...

Danke bisher für die Tips, heute ist FreeBasic Ruhetag, haha...

Ciao und Servus, Löwenherz
_________________
Das Leben ist wie eine Pralinenschachtel, man weiß nie, was dort drinnen für tolle wie böse Überraschungen stecken
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Eastler_dart



Anmeldungsdatum: 24.09.2005
Beiträge: 177
Wohnort: Baden-Würtemberg + Sachsen

BeitragVerfasst am: 01.09.2008, 23:00    Titel: Antworten mit Zitat

hallo Alle, hallo Löwenherz

ja, du hast recht, es geht um Bibliotheken.

Also: Bibliotheken sind "Zusatzdateien" in denen Funktionen liegen, welche man von "seinem" Programm aus nutzen kann. Sowas gibts oft, und halt eben auch ein paar für FreeBasic.

Wenn man eine solche Bibliothek unter FreeBasic nutzen will, dann muß man zur Bibliothek noch eine sogenannte "*.bi"-Datei haben. In dieser Bi-Datei steht dann, an welche Stelle in der Bibliothek(*.dll) man sein Programm hinschicken muß, um eine ganz bestimmte Funktion aus der Bibliothek aufzurufen.

Bei dir ist das jetzt grad verkehrt rum. Du hast die Bi-Datei, jedoch die eigentliche, ursächliche Dll-Bibliothek fehlt dir. Eigentlich läuft das ja anders rum, man entdeckt im Internet ne tolle Bibliothek und sucht dann eine passende *.Bi Datei, um diese Bibliothek unter FreeBasic zu nutzen.

Diese Bi-Datei ist bei den Programmen, bei denen der Fehler auftritt, im Listing eingebunden, meißt ganz am Anfang. Also nutzt der Schreiber des Listings Funktionen aus der Glut-Bibliothek.
Die Glut-Bibliothek sind Zusatzroutinen zu OpenGL. Genau kenn ich diese jetzt nicht, aber du kannst das ungefähr so verstehen, daß in der Glut32.dll ganze OpenGL-Befehlskonstrukte drin stecken, die einen Würfel anzeigen. Also das gleiche, wie wir die Pyramide in einer Sub erstellen und nur noch die Sub aufrufen, damit eine Pyramide aufgebaut wird.

Diese Glut-Bibliothek ist nützlich, aber langsam. Durch das Auslagern der Befehlsgruppen in eine separate Datei und Einbinden per Bi-Datei ist das Ganze nicht soo schnell, wie wenn du eine Sub für die Funktion selber aus den OpenGL-Befehlen zusammenstellst.
Klar, beim selber Machen sind erst mal Fehler drin, mit der Bibliothek läufts (meißt) fehlerfrei - das ist auch so eine Bremse bei Bibliotheken, da werden Fehler der aufrufenden Programme abgefangen, beim selber Machen merzt man seine Fehler aus und ist am Ende schneller.

So, da die Glut zu OpenGL gehört, findest du die DLLs dazu auf der OpenGL-Seite http://www.opengl.org. Jedoch, du ahnst es bestimmt, an solchen aktuellen Bibliotheken wird ständig weiter gearbeitet - soll heißen, es gibt eine Menge Versionen davon. Es ist aber davon auszugehen, daß diese Bibliotheken abwärtskompatibel sind(ältere Befehlsaufrufe ausführen können), also eine ganz neue sollte gehen.

hoffe es hilft ein Stück

Eastler
_________________
Kaum macht mans richtig, schon geht's
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen Yahoo Messenger
Löwenherz



Anmeldungsdatum: 25.08.2008
Beiträge: 73
Wohnort: auf einer sonnigen Insel :)

BeitragVerfasst am: 04.09.2008, 13:39    Titel: Hintergrundfarbe für OpenGL einstellen? Antworten mit Zitat

Hi liebe Freebasic Freunde... danke erst einmal für die guten Antworten und Hilfen, aber habe schon wieder eine

... kleine Zwischenfrage... grinsen

1) Wie bekommen ich eine Hintergrundfarbe in Open GL hinein?

Irgendetwas, das so aussehen könnte

"GL_BACKCOLOR 0, 128, 0"

und

2) ... evtl. eine Message Box einbauen, die ein paar Infos vorab gibt zum OpenGL Fenster (Was der User alles damit anstellen kann, wie bei einem Spiel) wäre auch nicht schlecht... hab nichts gefunden. Mit dem WindowsGUI Button geht das ja angeblich nicht... ;-(

Habe gestern abend so etwas im weltweiten Netz gefunden...

Code:
' Create MessageBox
dim fullScreen as long
fullScreen = msgbox(0, "Would you like to Run in Fullscreen Mode?", %MB_YESNO or %MB_ICONINFORMATION, "Start FullScreen?")


Liebe Grüße, bin total erkältet und hab Kopfweh, Wetterumschwung!...

Ciao und Servus, Löwenherz, mach trotzdem weiter, haha...

PS: Die Sache mit der Glut dll habe ich geklärt soweit.. danke für die tolle Info, aber mit den Bibliotheken, das habe ich noch nicht ganz verstanden, wozu das alles so umständlich mit eingebunden werden muss...
_________________
Das Leben ist wie eine Pralinenschachtel, man weiß nie, was dort drinnen für tolle wie böse Überraschungen stecken
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Eastler_dart



Anmeldungsdatum: 24.09.2005
Beiträge: 177
Wohnort: Baden-Würtemberg + Sachsen

BeitragVerfasst am: 05.09.2008, 11:28    Titel: Antworten mit Zitat

Hallo Alle, hallo Löwenherz,

zu deiner Frage der Hintergrundfarbe:
ganz am Anfang unseres Beispiellistings findest du die Zeile:
glClearColor 0.5, 0.5, 0.50, 0.0
In dieser Zeile gibst du die Hintergrundfarbe an. Jedoch weichen die Parameterangaben von der gewohnten Art ab, die Farbwerte werden nicht als Ganz-Zahlen von 0(dunkel) bis 255(ganz hell) sondern als Kommazahlen von 0.0(dunkel) bis 1.0(ganz hell) angegeben.

Ansonsten läufts wie gewohnt, die ersten drei Parameter sind die Werte in Reihenfolge für Rot-Anteil, Grün-Anteil und Blau-Anteile.

Nehmen wir also an, der Hintergrund soll blau sein:
Das bedeutet, kein rot, kein grün nur volle kanne blau, in der OpenGL-version also:
glClearColor 0.0, 0.0, 1.0, 0.0

Sollte das blau nicht ganz so hell sein, kann man den Blau-Anteilswert vermindern, z.B. ein viertel wegnehmen:
glClearColor 0.0, 0.0, 0.75, 0.0

Soll das blau heller als der Maximalwert werden, mischen wir einfach zu gleichen Teilen rot und grün dazu, z.B:
glClearColor 0.2, 0.2, 1.0, 0.0

Für einen roten oder grünen Hintergrund gilt das Gesagte analog, jedoch in der Befehlszeile die Werte an der jeweiligen Position angeben, bei Rot also den Farbwert an erster statt dritter Stelle etc.

Oder du willst einen gelben Hintergrund. Wie die meißten Farben ist gelb nicht als "eigenständige" Farbe drin (is ja nur rot grün oder blau), dazu muß man aus der additiven Farblehre einfach wissen, für gelb mischt man rot und grün. Um also "volle Kanne gelber Hintergrund" zu bekommen, gibt man den Maximalwert an der Stelle für Rot(1.Para) und Grün(2.Para) an:
glClearColor 1.0, 1.0, 0.0, 0.0

Auch hier wieder, wenn das Gelb noch heller als der Maximalwert werden soll, einfach die restlichen Farbwerte (ist in dem Fall ja nur noch Blau) in gleichen Anteilen stückweise dazu, etwas helleres Gelb als maximal:
ClearColor 1.0, 1.0, 0.2, 0.0

ABER ACHTUNG: auch wenn der Befehl mit "Clear" anfängt, dieser Befehl löscht nicht den Bildschirm, sondern setzt nur den Farbwert für alle eventuell nachfolgenden Bildschirmlöschbefehle.

glClearColor kann an jeder beliebigen Stelle im Programm vorkommen, auch mehrfach mit unterschiedlichen Werten. Ab dem Vorkommen dieses Befehles werden sämtliche Bildschirmlöschbefehle mit dem darin enthaltenen Farbwert den Bildschirm löschen, bis evtl. ein neuer glClearColor-Befehl mit neuen Werten kommt.

Am besten mit diesen drei Farbwerten rumspielen, dann isses schnell klar.

Zu deiner Message-Box:
Da bin ich nicht sooo geübt drin, weil ich die Dinger nicht verwenden will. Ich habe mit mit FreeBasic als auch mit OpenGL angefreundet, weil beide sowohl unter Linux als auch unter Windows und teilweise unter Dos laufen können. Würde ich da jetzt Windows-Messgeboxes reinhauen, dann könnten meine Progs nicht mehr auf Linux oder Dos portiert werden.

Wirklich sicher weiß ich das jetzt nicht, aber soweit ich das blicke, kann in einem OpenGL-Fenster von FreeBasic aus keine solche Box angezeigt werden.

Es gibt aber für Abfragen, welche VOR oder ZWISCHEN OpenGL-Anzeigen erfolgen sollen eine Möglichkeit:

Es ist nicht Pflicht, unter FreeBasic ein Grafikfenster zu öffnen und bei diesem zu bleiben.
Sicher, FreeBasic und die Hardware werden ganz schön gefordert, aber man kann die Fenster wechseln.

In meinem Testprogramm im Forum hatte ich das ja gemacht, da werden nacheinander drei mal hin und her OpenGL und FreeBasic-Fenster geöffnet. Man muß nur beachten, wenn ich mit SCREEN oder SCREENRES ein Fenster öffne, obwohl bereits eins offen ist, dann wird das bisher offene komplett geschlossen und das gewünschte Neue erstellt.

So ist es möglich, z.B: erst ein "normales" FreeBasic-Fenster mit einem Hinweis für den Anwender zu öffnen, und danach erst ein OpenGL-Fenster:
Code:

DIM und andere zeilen
.
.
SCREEN 19, 32  :'(ein Grafikfenster 800x600 pixel mit 32-bit Farbtiefe öffnen)
PRINT "Das ist mein SuperDuperProgramm, Version 0.1 vom 5.Sept.2009"
PRINT
PRINT "viel Spaß wünsche ich"
PRINT
PRINT "(jegliche Taste = starten"
DO WHILE INKEY=""  : ' auf Tastendruck warten
LOOP

screen 19, 16, , 2

'-------------------------
' Open-GL Init
'-------------------------
glViewport 0, 0, 800, 600                      ' den Current Viewport auf eine Ausgangsposition setzen
glMatrixMode GL_PROJECTION                     ' Den Matrix-Modus Projection wählen
.
.
.
:'Listing einfach so erstellt und nicht getestet ! !

Natürlich kann man in diesem Beispiel auch die gedrückte Taste auswerten und je nachdem, unterschiedliche Fenster öffnen.

hoffe es hilft

Eastler
_________________
Kaum macht mans richtig, schon geht's
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen Yahoo Messenger
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 05.09.2008, 15:20    Titel: Antworten mit Zitat

http://www.freebasic-portal.de/index.php?s=code&id=17
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Bibliotheken Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz