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:

Problem mit OpenGL-Programm
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
King-01
gesperrt


Anmeldungsdatum: 26.02.2007
Beiträge: 351

BeitragVerfasst am: 27.08.2007, 18:51    Titel: Problem mit OpenGL-Programm Antworten mit Zitat

Hi,

bin gerade dabei OpenGL zu lernen (bin noch nicht weit) und hab da ein kleines problem, wenn ich in der Hauptschleife das kommando sleep benutze.

Hier ist der Quellcode:

Code:

#include once "GL/gl.bi"
#include once "GL/glu.bi"

const X = 1280
const Y = 1024
const depth = 32
const fullscreen = &h1

screenres X,Y,depth,,&h2 OR fullscreen


glMatrixMode(GL_PROJECTION)
glLoadIdentity
glViewport(0,0,X,Y)
glOrtho(0,X,Y,0,-128,128)
glMatrixMode(GL_MODELVIEW)
glEnable(GL_CULL_FACE)
glCullFace(GL_BACK)
glEnable GL_TEXTURE_2D
glLoadIdentity
glEnable(GL_DEPTH_TEST)
glDepthFunc(GL_LESS)
glEnable(GL_ALPHA_TEST)
glAlphaFunc(GL_GREATER, 0.1)

dim x1 as integer
dim y1 as integer
dim x2 as integer
dim y2 as integer
dim x3 as integer
dim y3 as integer
dim x4 as integer
dim y4 as integer
dim xyz as integer

x1=0: y1=50
x2=50: y2=50
x3=50: y3=0
x4=0: y4=0

for xyz=1 to 30
   
    x1=x1+50
    y1=y1+50
    x2=x2+50
    y2=y2+50
    x3=x3+50
    y3=y3+50
    x4=x4+50
    y4=y4+50
   
   glClear GL_DEPTH_BUFFER_BIT
   
   glBegin GL_QUADS
        glVertex2i x1, y1
        glVertex2i x2, y2
        glVertex2i x3, y3
        glVertex2i x4, y4
    glEnd
   
   glFlush                   'Verarbeitung der Befehle
   flip
   'sreensync (funktioniert irgentwie nicht)
    sleep 300
next


screensync funktioniert auch nicht (fehlermeldung), und wenn ich bei glClear noch GL_COLOR BUFFER_BIT angebe, kommt auch eine Fehlermdeldung.

Aber nun zum Hauptproblem: Wenn ich sleep 300 da eingebe, dann wird die reihe mit den quadraten erst normal hingezeichnet, aber dann nach paar quadraten, wird immer ein quadrat ausgelassen, bzw. schwarz.
wenn ich sleep 3000 eingebe, wird gleich nach dem 1. quadrat immer eins ausgelassen.
schauts euch am besten mal an.

und kanns eigentlich sein, dass man in der neuen FB-Version die Variablen deklarieren muss? weil ich muss das bei mir immer.
_________________
[quote="IRC"](22:41:56)<PMedia>Jojo, hats nen Grund warum wir chatten obwohl du grad neben mir sitzt?
...
(23:00:59)<PMedia>USB war erst als Waffe geplant[/quote]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 27.08.2007, 19:05    Titel: Antworten mit Zitat

1) Es wird in einer OGL-Schleife nicht gewartet. Erst recht nicht rumgeSLEEPt. zwinkern
2) Dass man alles Deklarieren muss ist bereits seit 0.17 normal, und gehört auch einfach zur besseren Lesbarkeit & zum besseren Stil.
3) DIMs kann man zusammenfassen:
Code:
dim as integer x1,y1,x2,y2,x3,y3,x4,y4,xyz

4)
Code:
glClear  GL_COLOR_BUFFER_BIT OR GL_DEPTH_BUFFER_BIT

5) ScreenSync geht nicht? - Was für eine FB Version hast du?
6) Man zeichnet in einer Do...Loop schleife, und malt nur neu, was auch neu gezeichnet wird (If Hintergrund_Anders then Malen()!)
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
King-01
gesperrt


Anmeldungsdatum: 26.02.2007
Beiträge: 351

BeitragVerfasst am: 27.08.2007, 19:18    Titel: Antworten mit Zitat

Ich hab version 0.18b oder so. kp.

Zitat:
Code:
glClear  GL_COLOR_BUFFER_BIT OR GL_DEPTH_BUFFER_BIT

so hab ichs ja gemeint.
Aber das geht irgentwie jetzt wieder mit den Augen rollen

na egal. sreensync geht aber nicht. da steht: variable not declared, screensync in 'screensync'.

wenn ich das gl_color_buffer_bit hinzufüge wirds normal angezeigt, auser, dass die alten quadrate jetzt verschwinden.
_________________
[quote="IRC"](22:41:56)<PMedia>Jojo, hats nen Grund warum wir chatten obwohl du grad neben mir sitzt?
...
(23:00:59)<PMedia>USB war erst als Waffe geplant[/quote]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 27.08.2007, 19:19    Titel: Antworten mit Zitat

Bei mir gibbts ScreenSync. mit den Augen rollen
mach erstmal alles was ich oben geschrieben habe. zwinkern
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
King-01
gesperrt


Anmeldungsdatum: 26.02.2007
Beiträge: 351

BeitragVerfasst am: 27.08.2007, 19:38    Titel: Antworten mit Zitat

Ups. Bei mir hieß das Sreensync verlegen mit den Augen rollen

Zitat:
Man zeichnet in einer Do...Loop schleife, und malt nur neu, was auch neu gezeichnet wird (If Hintergrund_Anders then Malen()!)


wie meinst du das?

mein code sieht jetzt so aus:

Code:
#include once "GL/gl.bi"
#include once "GL/glu.bi"

const X = 1280
const Y = 1024
const depth = 32
const fullscreen = &h1

screenres X,Y,depth,,&h2 OR fullscreen


glMatrixMode(GL_PROJECTION)
glLoadIdentity
glViewport(0,0,X,Y)
glOrtho(0,X,Y,0,-128,128)
glMatrixMode(GL_MODELVIEW)
glEnable(GL_CULL_FACE)
glCullFace(GL_BACK)
glEnable GL_TEXTURE_2D
glLoadIdentity
glEnable(GL_DEPTH_TEST)
glDepthFunc(GL_LESS)
glEnable(GL_ALPHA_TEST)
glAlphaFunc(GL_GREATER, 0.1)

DIM AS INTEGER x1,y1,x2,y2,x3,y3,x4,y4,xyz

x1=0: y1=50
x2=50: y2=50
x3=50: y3=0
x4=0: y4=0

do
    x1=x1+50
    y1=y1+50
    x2=x2+50
    y2=y2+50
    x3=x3+50
    y3=y3+50
    x4=x4+50
    y4=y4+50
   
   glClear GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT
   
   glBegin GL_QUADS
        glVertex2i x1, y1
        glVertex2i x2, y2
        glVertex2i x3, y3
        glVertex2i x4, y4
    glEnd
   
   glFlush
   flip
   screensync

loop until inkey$="q"


wie soll ichs da machen?
_________________
[quote="IRC"](22:41:56)<PMedia>Jojo, hats nen Grund warum wir chatten obwohl du grad neben mir sitzt?
...
(23:00:59)<PMedia>USB war erst als Waffe geplant[/quote]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
atari
gesperrt


Anmeldungsdatum: 26.08.2007
Beiträge: 144

BeitragVerfasst am: 27.08.2007, 21:27    Titel: Antworten mit Zitat

glTranslatef
glRotatef

sind ganz wichtig , ohne dem geht die beziehung zum raumpunkt verloren.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
King-01
gesperrt


Anmeldungsdatum: 26.02.2007
Beiträge: 351

BeitragVerfasst am: 27.08.2007, 21:29    Titel: Antworten mit Zitat

Ok. Ich werds mal versuchen.
Danke für die Antwort.
_________________
[quote="IRC"](22:41:56)<PMedia>Jojo, hats nen Grund warum wir chatten obwohl du grad neben mir sitzt?
...
(23:00:59)<PMedia>USB war erst als Waffe geplant[/quote]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 27.08.2007, 21:36    Titel: Antworten mit Zitat

Code:
#INCLUDE ONCE "GL/gl.bi"
#INCLUDE ONCE "GL/glu.bi"

CONST X = 1024
CONST Y = 768
CONST depth = 32
CONST fullscreen = &h0

SCREENRES X,Y,depth,,&h2' OR fullscreen


glMatrixMode(GL_PROJECTION)
glLoadIdentity
glViewport(0,0,X,Y)
glOrtho(0,X,Y,0,-128,128)
glMatrixMode(GL_MODELVIEW)
glEnable(GL_CULL_FACE)
glCullFace(GL_BACK)
glEnable GL_TEXTURE_2D
glLoadIdentity
glEnable(GL_DEPTH_TEST)
glDepthFunc(GL_LESS)
glEnable(GL_ALPHA_TEST)
glAlphaFunc(GL_GREATER, 0.1)

DIM AS INTEGER x1,y1,x2,y2,x3,y3,x4,y4,xyz

x1=0: y1=50
x2=50: y2=50
x3=50: y3=0
x4=0: y4=0

DO   
   glClear GL_COLOR_BUFFER_BIT OR GL_DEPTH_BUFFER_BIT
   for xyz = 1 to 30
            x1+=50
            y1+=50
            x2+=50
            y2+=50
            x3+=50
            y3+=50
            x4+=50
            y4+=50
            glBegin GL_QUADS
                glVertex2i x1, y1
                glVertex2i x2, y2
                glVertex2i x3, y3
                glVertex2i x4, y4
            glEnd
    next xyz
   
   glFlush
   FLIP
   SCREENSYNC

LOOP UNTIL INKEY$=!"\27"
mit den Augen rollen

glTranslatef XBezugspunkt, YBezugspunkt, ZBezugspunkt
VOR glRotatef/glScalef schreiben, ansonsten haben die keine Gültigkeit mehr!
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
King-01
gesperrt


Anmeldungsdatum: 26.02.2007
Beiträge: 351

BeitragVerfasst am: 27.08.2007, 21:41    Titel: Antworten mit Zitat

Und wie kann ich diesen würfel in 3D malen?
Und kanns sein, dass man da eine "Kamera" braucht? Wie platziert man die dann?
_________________
[quote="IRC"](22:41:56)<PMedia>Jojo, hats nen Grund warum wir chatten obwohl du grad neben mir sitzt?
...
(23:00:59)<PMedia>USB war erst als Waffe geplant[/quote]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 27.08.2007, 21:42    Titel: Antworten mit Zitat

OMG.

OGL tut nichts wissen 3D Körper alles du selber macha zwinkern
OGL beherrscht von sich aus nichts 3D-Körper mäßiges.
Rotierender Würfel siehe XGR-Src (=>hier)
(Ab Zeile 600, bis 653)
Code:
For Rot As Integer = 1 To 1024
      glClear  GL_COLOR_BUFFER_BIT OR GL_DEPTH_BUFFER_BIT
      glTranslatef (iResX/2),(iResY/2),1
      glscalef 200, 200, 1
      glRotatef Rot, (iResX/2), (iResY/2), 0
         
         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                                                   '' Done Drawing The Quad
      
      glLoadIdentity
      glFlush
      Flip
   Next

_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 27.08.2007, 22:01    Titel: Antworten mit Zitat

[OT]
Zu deinen Kommentaren:
Nicht jedes Wort wird immer wieder groß geschrieben, eigentlich nur ein Satzanfang sowie Eigennamen. Zudem meinst du wohl eher "Cube" statt "Quad". zwinkern
[/OT]

@King01:
Hast du dir schonmal konkret Tutorials zur OpenGL-Programmierung angeschaut?
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
King-01
gesperrt


Anmeldungsdatum: 26.02.2007
Beiträge: 351

BeitragVerfasst am: 27.08.2007, 22:05    Titel: Antworten mit Zitat

ja das von stormy. aber das ist für 2d-programmierung.
_________________
[quote="IRC"](22:41:56)<PMedia>Jojo, hats nen Grund warum wir chatten obwohl du grad neben mir sitzt?
...
(23:00:59)<PMedia>USB war erst als Waffe geplant[/quote]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 27.08.2007, 22:07    Titel: Antworten mit Zitat

Mao hat Folgendes geschrieben:
[OT]
Zu deinen Kommentaren:
Nicht jedes Wort wird immer wieder groß geschrieben, eigentlich nur ein Satzanfang sowie Eigennamen. Zudem meinst du wohl eher "Cube" statt "Quad". zwinkern
[/OT]

Die kommentare sind nicht von mir zwinkern
Das ist ein übersetzter c-src aus den nehe tuts zwinkern
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 27.08.2007, 22:08    Titel: Antworten mit Zitat

Dann will ich Dir mal im Examples Ordner die 'OG' Beispiele ans Herz legen und ganz besonders den Unterordner 'NeHe' !!!
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 27.08.2007, 22:09    Titel: Antworten mit Zitat

[ot]
Davon weis ich zwinkern
Daher ist er ja auch zwinkern
kap. 06 Z. 77
[/ot]
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 27.08.2007, 22:13    Titel: Antworten mit Zitat

Du warst net gemeint. zwinkern

Ich bin jedoch weiterhin der Meinung, dass ich mit den Kommentaren richtig liege. grinsen
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
atari
gesperrt


Anmeldungsdatum: 26.08.2007
Beiträge: 144

BeitragVerfasst am: 28.08.2007, 13:44    Titel: Antworten mit Zitat

Zitat:

VOR glRotatef/glScalef schreiben, ansonsten haben die keine Gültigkeit mehr!


doch......mit "glPushMatrix und glPopMatrix", sind auch sehr wichtig für die unabhängigkeit untereinander.

ohne wird beim neuen zeichnen für das gesamte bild der raumpunkt verschoben, mit wird nur der raumpunkt vom einzelnen objekt angesprochen.

wenn du das nicht gelernt hast, wirst du in der bewegung und drehung ein chaos erleben.

die camera musst du mit sinus und cosinus selber hinbuchssieren. die kamera ist nichts weiter als der augpunkt.


mfg
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 28.08.2007, 14:28    Titel: Antworten mit Zitat

Jaa, jedoch verwirren die einen Anfänger mehr als das sie nützlich sind! Ich habe schon ein paar Sachen mit OGL gemacht, diese Befehle habe ich bis jetzt jedoch nie gebraucht!

Die Kamera habe ich bis jetzt auch noch nie verschoben! Immer nur die Matrix zwinkern
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
atari
gesperrt


Anmeldungsdatum: 26.08.2007
Beiträge: 144

BeitragVerfasst am: 28.08.2007, 16:19    Titel: Antworten mit Zitat

Zitat:

Jaa, jedoch verwirren die einen Anfänger mehr als das sie nützlich sind!


kann man alles lernen. dieses grundwerkzeug braucht man , sonst kann man die unabhängige bewegung vergessen !

mfg
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
atari
gesperrt


Anmeldungsdatum: 26.08.2007
Beiträge: 144

BeitragVerfasst am: 28.08.2007, 16:23    Titel: Antworten mit Zitat

Zitat:

Die Kamera habe ich bis jetzt auch noch nie verschoben! Immer nur die Matrix


die kamera gibt es ja auch nicht, das verändern(bewegen) der matrix ist das verändern des blickwinkels.

mfg
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 -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
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