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:

Würfel mit Textur.

 
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
Matz



Anmeldungsdatum: 04.07.2006
Beiträge: 13

BeitragVerfasst am: 16.09.2008, 18:12    Titel: Würfel mit Textur. Antworten mit Zitat

Hay. Seit vielen Jahren Programiere ich Blitz3D nun will ich aber OpenGL Lernen. In FreeBasic.

Als Versuchsobjekt will ich mir einen Würfel mit Textur machen.

Doch da fängt das Problem an. Ich schaffe es nichteinmal ein einfaches Viereck mit Textur zu belegen.

Habe auch schon ein Tut gefunden. Aber das ist nur für 2D. Ich brauche aber 3D.

Hier meine Versuche. Functioniert leider nicht.

Code:

DIM SHARED AS STRING Tastendruck

'-------------------------
'Includes
'-------------------------
#include "fbgfx.bi"
#include once "GL/gl.bi"
#include once "GL/glu.bi"
#include "LoadOGL/inc/2d_opengl.bi"

'Declare function
'   load_texture(filename AS STRING,
'       byref texture AS GFXType,
'       flags AS INTEGER = 0,
'       killdata AS INTEGER = 0)
'   AS INTEGER


Declare Sub Objekt1
DECLARE FUNCTION LoadImagee(dateiname As String) As gluint

Declare Sub InitOpenGL
Dim Bild1 As gluint

Dim TexID As Integer


'-------------------------
' das Fenster öffnen
'-------------------------
screen 19, 32, , 2
'SCREEN 19, 32, 2, &H00,0
'-------------------------
' Open-GL Init
'-------------------------
'
DIM Textur AS GFXType


call load_texture("MeinBild.bmp", Textur)

InitOpenGL
'




'Bild1=LoadImagee("MeinBild.bmp")
'glBindTexture GL_TEXTURE_2D,Bild1
'glGenTextures(1,Bild1)
'glBindTexture(GL_TEXTURE_2D,TexID)

'glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
'glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)

'glTexImage2D(GL_TEXTURE_2D, 0, 3,256,256,0, GL_RGB, GL_UNSIGNED_BYTE,65536)




'---------------------------
'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
'   Put (100,100),Bild1
   flip                  'liebes OpenGL, zeig alles, was in der Schleife für dich vornedran steht, auf Monitor an
   '---------------------------
   'Ende der Schleife
   '---------------------------
   
LOOP

End

function
   load_texture(filename AS STRING,
       byref texture AS GFXType,
       flags AS INTEGER = 0,
       killdata AS INTEGER = 0)
   AS INTEGER


Sub InitOpenGL()
   
   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
glEnable GL_TEXTURE_2D
   
   
   
   
End Sub

'-------------------------
SUB Objekt1 ()
   
    glBegin GL_QUADS
  glTexCoord2f(0,0): glVertex3f(-1,1,-6)  'lo
  glTexCoord2f(0,1): glVertex3f(-1,-1,-6) 'lu
  glTexCoord2f(1,1): glVertex3f(1,-1,-6)  'ru
  glTexCoord2f(1,0): glVertex3f(1,1,-6)   'ro
glEnd
 
END Sub


Function LoadImagee(dateiname As String) As gluint



Dim As Integer breit, hoch 'darin speichern wir die Werte ab
Dim As Integer ff = Freefile    'Anfrage welcher Übertragungsweg ist frei?
Open dateiname For Input As #ff 'öffne die Datei zum lesen
Get #ff, 19, breit              'Breite aus der BMP-Datei auslesen
Get #ff, 23, hoch               'Höhe aus der BMP-Datei auslesen
Close #ff 
           'Zeiger erstellen der die Bildadresse speichert
Dim bild As Any Ptr
Bild=ImageCreate(breit,hoch)  'reserviert und berechnet den erforderlichen Speicher
                      'und gibt an den Zeiger die Adresse des reservierten Speichers.
Bload dateiname,Bild 'lade das Bild in den Speicher, der Zeiger 'bild' hat die Adresse.
Return Bild
   
   

   
End Function 


Das kann doch garnicht sooo schwer sein.
Hoffe auf eure Hilfe.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eastler_dart



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

BeitragVerfasst am: 16.09.2008, 21:25    Titel: Antworten mit Zitat

hallo matz,

im FreeBasic-Portal bastle ich grad an einem Tutorial dazu.

unter http://www.freebasic-portal.de/index.php?s=tutorials&cat=3
findest du die ersten vier Teile dazu. Aber Texturieren ist (noch) nicht dabei.

Das Texturieren ist der nächste Teil der kommen soll, ein Anfang findest du dort auf meiner Nickseite unter: http://www.freebasic-portal.de/index.php?s=userpage&id=156.

Dort probier ich immer, ob ich mit den Anzeigeneinstellungen alles richtig mache, deshalb stehts dort drin.
Sind aber noch Fehler im Inhalt, das Grundprinzip ist aber klar.

In nächster Zeit wirds dann vollständig sein und zu den anderen Tutorials dazukommen.

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
Matz



Anmeldungsdatum: 04.07.2006
Beiträge: 13

BeitragVerfasst am: 17.09.2008, 19:01    Titel: Antworten mit Zitat

Dank dir vielmals hat so gut geholfen das ich mir daraus gleich ein paar häpchen gemacht habe, die ich hoffe überall einsetzen zu können.
lachen

Code:

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

Declare Sub Objekt1
Declare Sub InitOpenGL
Declare Sub LoadTextur(Datei As String)
Declare Sub SetOGLTextur(TName As String)

screen 19, 32, , 2
'SCREEN 19, 32, 2, &H00,0

Type TTextur
   
   TName As String
   As Integer Breite,Hohe,Status
   As Byte Ptr Handle
   As Byte Header 
End Type


DIM SHARED AS STRING Tastendruck
Dim Shared Textur(1000) As TTextur



LoadTextur("MeinBild.bmp")
LoadTextur("Sand.bmp")


SetOGLTextur("Sand.bmp")
InitOpenGL




'--------------Mainloop-----------------
DO UNTIL Tastendruck = CHR(27)
   Tastendruck = INKEY 
   Objekt1
 
   flip               
Loop:End
'-------------Ende Mainloop------------




Sub InitOpenGL()
   
   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
glEnable GL_TEXTURE_2D
End Sub

'-------------------------
SUB Objekt1 ()
   
    glBegin GL_QUADS
  glTexCoord2f(0,0): glVertex3f(-1,1,-6)  'lo
  glTexCoord2f(0,1): glVertex3f(-1,-1,-6) 'lu
  glTexCoord2f(1,1): glVertex3f(1,-1,-6)  'ru
  glTexCoord2f(1,0): glVertex3f(1,1,-6)   'ro
glEnd
 
END Sub




Sub LoadTextur(Datei As String)
   Dim As Integer FTex,ff=Freefile
   Dim As Integer MaxPix,I,G
   DIM AS Byte PTR Pix
   
   Do   
      Dim Tex As TTextur Ptr=@Textur(FTex)
      If Tex->Status=0 Then Exit DO
      FTex=FTex+1 
   Loop
   
   Open Datei For Input As #ff
   
   If Lof(ff)=0 Then Close #ff:return
   Dim Tex As TTextur Ptr=@Textur(FTex)
   Get #ff, 19,Tex->Breite         
   Get #ff, 23,Tex->Hohe     
   Close #ff 
   
   Tex->Status=1:Tex->TName=Datei

   Tex->Handle=IMAGECREATE(Tex->Breite,Tex->Breite,0,32)
   BLOAD(Datei,Tex->Handle)
   
   
   Tex->Header=Len(FB.Image)
   Pix=Tex->Handle+Tex->Header
   
   Tex->Handle=Pix
   MaxPix=Tex->Breite*Tex->Hohe-1

   For I=0 To MaxPix:swap Pix[0],Pix[2]:Pix=Pix+4:next   
   

   'ImageDestroy(DateiImRamPtr)
End Sub

Sub SetOGLTextur(TName As String)

   Dim As Integer T,S
   DIM AS UINTEGER TexturNummer
   
   Do   
      Dim Tex As TTextur Ptr=@Textur(T)
      If Tex->Status=0 Then Return
      If Tex->TName<>TName Then T=T+1:Else:Exit Do
   Loop

   Dim Tex As TTextur Ptr=@Textur(T)
   Dim H As Byte Ptr=Tex->Handle
   S=Tex->Breite:glGenTextures 1, @TexturNummer
   glBindTexture GL_TEXTURE_2D, TexturNummer
   glTexImage2D GL_TEXTURE_2D,0,GL_RGB,S,S,0,GL_RGBA,GL_UNSIGNED_BYTE,H
   glTexParameteri GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR
   glTexParameteri GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR
   
End Sub

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
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