 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Matz
Anmeldungsdatum: 04.07.2006 Beiträge: 13
|
Verfasst am: 16.09.2008, 18:12 Titel: Würfel mit Textur. |
|
|
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 |
|
 |
Eastler_dart

Anmeldungsdatum: 25.09.2005 Beiträge: 177 Wohnort: Baden-Würtemberg + Sachsen
|
Verfasst am: 16.09.2008, 21:25 Titel: |
|
|
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 |
|
 |
Matz
Anmeldungsdatum: 04.07.2006 Beiträge: 13
|
Verfasst am: 17.09.2008, 19:01 Titel: |
|
|
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.
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 |
|
 |
|
|
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.
|
|