Deutsch
Quelltexte/ Codesnippets

OpenGL Multi Texture + aktueller Befehlssatz

 

Sven
Bader
Nach einer Idee von Heinz habe ich einen Weg gefunden, auf alle OpenGL Befehle zuzugreifen. Da je nach Treiber nicht zwangsläufig alle Erweiterungen vorhanden sind, muss man sich vorab die Speicheradresse der Funktion geben lassen.

In folgendem Beispiel verwende ich zwei "neuere" Befehle (OpenGL 1.3 von 2001 statt OpenGL 1.2 von 1998 ) , um Multitexturing, also zwei Texturen übereinander zu realisieren.

Leider kann man nicht die integrierten Objekte dafür verwenden, weshalb ich einen Würfel von Hand erstelle.

Hier ein Beispiel für einen herkömmlichen Aufruf, welcher bei Befehlen ab ca. OpenGL 1.3 nicht funktioniert:
oGL("glMultiTexCoord2f", GL_TEXTURE1&, 0.0, 0.0)

so geht es:
glMultiTexCoord2f& = oGL("wglGetProcAddress","glMultiTexCoord2f")
Call(glMultiTexCoord2f&,GL_TEXTURE1&, 0.0, 0.0)

Das Profan Icon gemischt mit dem Stein Icon:


declare tex&[5], xrot!, yrot!, zrot!, cuboid&, hPic&, GL_TEXTURE0&, GL_TEXTURE1&, glActiveTexture&
GL_TEXTURE0& = 33984;
GL_TEXTURE1& = GL_TEXTURE0& + 1;

Proc Cuboid

    parameters x!, y!, z!
    declare glMultiTexCoord2f&
    x! = x! * 0.5 : y! = y! * 0.5 : z! = z! * 0.5

    ifnot cuboid&

        cuboid& = ogl("StartList")
        glMultiTexCoord2f& = oGL("wglGetProcAddress","glMultiTexCoord2f")
        ogl("glBegin",~GL_QUADS)
        ' Front
        ogl("glNormal3f",0.0, 0.0, z!)
        Call(glMultiTexCoord2f&,GL_TEXTURE1&, 0.0, 0.0) : Call(glMultiTexCoord2f&,GL_TEXTURE0&, 0.0, 0.0) : ogl("glVertex3f",-x!, -y!, z!)
        Call(glMultiTexCoord2f&,GL_TEXTURE1&, 1.0, 0.0) : Call(glMultiTexCoord2f&,GL_TEXTURE0&, 1.0, 0.0) : ogl("glVertex3f",x!, -y!, z!)
        Call(glMultiTexCoord2f&,GL_TEXTURE1&, 1.0, 1.0) : Call(glMultiTexCoord2f&,GL_TEXTURE0&, 1.0, 1.0) : ogl("glVertex3f",x!, y!, z!)
        Call(glMultiTexCoord2f&,GL_TEXTURE1&, 0.0, 1.0) : Call(glMultiTexCoord2f&,GL_TEXTURE0&, 0.0, 1.0) : ogl("glVertex3f",-x!, y!, z!)
        ' Back
        ogl("glNormal3f",0.0, 0.0, -z!)
        Call(glMultiTexCoord2f&,GL_TEXTURE1&, 1.0, 0.0) : Call(glMultiTexCoord2f&,GL_TEXTURE0&, 1.0, 0.0) : ogl("glVertex3f",-x!, -y!, -z!)
        Call(glMultiTexCoord2f&,GL_TEXTURE1&, 1.0, 1.0) : Call(glMultiTexCoord2f&,GL_TEXTURE0&, 1.0, 1.0) : ogl("glVertex3f",-x!, y!, -z!)
        Call(glMultiTexCoord2f&,GL_TEXTURE1&, 0.0, 1.0) : Call(glMultiTexCoord2f&,GL_TEXTURE0&, 0.0, 1.0) : ogl("glVertex3f",x!, y!, -z!)
        Call(glMultiTexCoord2f&,GL_TEXTURE1&, 0.0, 0.0) : Call(glMultiTexCoord2f&,GL_TEXTURE0&, 0.0, 0.0) : ogl("glVertex3f",x!, -y!, -z!)
        ' Top
        ogl("glNormal3f",0.0, y!, 0.0)
        Call(glMultiTexCoord2f&,GL_TEXTURE1&, 0.0, 1.0) : Call(glMultiTexCoord2f&,GL_TEXTURE0&, 0.0, 1.0) : ogl("glVertex3f",-x!, y!, -z!)
        Call(glMultiTexCoord2f&,GL_TEXTURE1&, 0.0, 0.0) : Call(glMultiTexCoord2f&,GL_TEXTURE0&, 0.0, 0.0) : ogl("glVertex3f",-x!, y!, z!)
        Call(glMultiTexCoord2f&,GL_TEXTURE1&, 1.0, 0.0) : Call(glMultiTexCoord2f&,GL_TEXTURE0&, 1.0, 0.0) : ogl("glVertex3f",x!, y!, z!)
        Call(glMultiTexCoord2f&,GL_TEXTURE1&, 1.0, 1.0) : Call(glMultiTexCoord2f&,GL_TEXTURE0&, 1.0, 1.0) : ogl("glVertex3f",x!, y!, -z!)
        ' Bottom
        ogl("glNormal3f",0.0, -y!, 0.0)
        Call(glMultiTexCoord2f&,GL_TEXTURE1&, 1.0, 1.0) : Call(glMultiTexCoord2f&,GL_TEXTURE0&, 1.0, 1.0) : ogl("glVertex3f",-x!, -y!, -z!)
        Call(glMultiTexCoord2f&,GL_TEXTURE1&, 0.0, 1.0) : Call(glMultiTexCoord2f&,GL_TEXTURE0&, 0.0, 1.0) : ogl("glVertex3f",x!, -y!, -z!)
        Call(glMultiTexCoord2f&,GL_TEXTURE1&, 0.0, 0.0) : Call(glMultiTexCoord2f&,GL_TEXTURE0&, 0.0, 0.0) : ogl("glVertex3f",x!, -y!, z!)
        Call(glMultiTexCoord2f&,GL_TEXTURE1&, 1.0, 0.0) : Call(glMultiTexCoord2f&,GL_TEXTURE0&, 1.0, 0.0) : ogl("glVertex3f",-x!, -y!, z!)
        ' Right
        ogl("glNormal3f",x!, 0.0, 0.0)
        Call(glMultiTexCoord2f&,GL_TEXTURE1&, 1.0, 0.0) : Call(glMultiTexCoord2f&,GL_TEXTURE0&, 1.0, 0.0) : ogl("glVertex3f",x!, -y!, -z!)
        Call(glMultiTexCoord2f&,GL_TEXTURE1&, 1.0, 1.0) : Call(glMultiTexCoord2f&,GL_TEXTURE0&, 1.0, 1.0) : ogl("glVertex3f",x!, y!, -z!)
        Call(glMultiTexCoord2f&,GL_TEXTURE1&, 0.0, 1.0) : Call(glMultiTexCoord2f&,GL_TEXTURE0&, 0.0, 1.0) : ogl("glVertex3f",x!, y!, z!)
        Call(glMultiTexCoord2f&,GL_TEXTURE1&, 0.0, 0.0) : Call(glMultiTexCoord2f&,GL_TEXTURE0&, 0.0, 0.0) : ogl("glVertex3f",x!, -y!, z!)
        ' Left
        ogl("glNormal3f",-x!, 0.0, 0.0)
        Call(glMultiTexCoord2f&,GL_TEXTURE1&, 0.0, 0.0) : Call(glMultiTexCoord2f&,GL_TEXTURE0&, 0.0, 0.0) : ogl("glVertex3f",-x!, -y!, -z!)
        Call(glMultiTexCoord2f&,GL_TEXTURE1&, 1.0, 0.0) : Call(glMultiTexCoord2f&,GL_TEXTURE0&, 1.0, 0.0) : ogl("glVertex3f",-x!, -y!, z!)
        Call(glMultiTexCoord2f&,GL_TEXTURE1&, 1.0, 1.0) : Call(glMultiTexCoord2f&,GL_TEXTURE0&, 1.0, 1.0) : ogl("glVertex3f",-x!, y!, z!)
        Call(glMultiTexCoord2f&,GL_TEXTURE1&, 0.0, 1.0) : Call(glMultiTexCoord2f&,GL_TEXTURE0&, 0.0, 1.0) : ogl("glVertex3f",-x!, y!, -z!)
        ogl("glEnd")
        ogl("EndList")

    endif

    ogl("DrawList", cuboid&)

Endproc

Proc DrawGLScene

    oGL("Clear")
    oGL("Move", 0, 0, -3)
    oGL("Rotate", xrot!, yrot!, zrot!)
    oGL("glEnable", ~GL_TEXTURE_2D)
    Call(glActiveTexture&, GL_TEXTURE0&)
    oGL("glBindTexture", ~GL_TEXTURE_2D, tex&[1])
    Call(glActiveTexture&, GL_TEXTURE1&)
    oGL("glBindTexture", ~GL_TEXTURE_2D, tex&[0])
    Cuboid(1.0, 1.0, 1.0)
    oGL("Show")

Endproc

windowtitle "Multi Texture"
CLS
oGL("Init", %hWnd, 0.7,0.7,0.7,0)
oGL("Posmode", 1)
glActiveTexture& = oGL("wglGetProcAddress","glActiveTexture")
'Texture aus Icons
Mcls 32, 32 : startpaint -1 :  DrawIcon "A", 0,0 : endpaint
hPic&=create("hPic",0,"&MEMBMP")
tex&[0]=ogl("getTextureBmp",hPic&,1)
DeleteObject hPic&
'Texture aus Icons
Mcls 32, 32 : startpaint -1 : DrawIcon "STEIN", 0,0 : endpaint
hPic&=create("hPic",0,"&MEMBMP")
tex&[1]=ogl("getTextureBmp",hPic&,1)
DeleteObject hPic&
xrot! = 35
yrot! = 45

WhileNot iskey(27)

    sleep 5
    yrot! = yrot! + 0.1
    DrawGLScene()

EndWhile

End

69 kB
Hochgeladen:20.09.2021
Ladeanzahl75
Herunterladen
 
20.09.2021  
 



Zum Quelltext


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

1.562 Betrachtungen

Unbenanntvor 0 min.
Sven Bader17.02.2023
Ernst29.05.2022
p.specht21.11.2021
R.Schneider20.11.2021
Mehr...

Themeninformationen

Dieses Thema hat 1 Teilnehmer:

Sven Bader (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie