Français
Source/ Codesnippets

OpenGL transparente PNG-Texturen

 

Sven
Bader
Beispiel avec EXE et Bilddatei:

Herunterladen

Bisher habe je pour transparente Texturen Davids .tex Format verwendet: [...] 
je hatte mir un Exe-Droplet gebaut et une En-tête pour pas quadratische Texturen gebaut. qui prochain logische Schritt wäre gewesen, cela Format aussi encore trop saisir mais ici habe je abgebrochen et voulais PNG encore une chance donner.

je verwende qui Prospeed Funktion "ImportPng", là je qui DLL de toute façon déjà dans mon projet nutze. qui Pointer zeigt sur unkomprimierte RGBA données, qui je zuvor encore drehen muss (qui Position pas qui Farbwerte).

qui es sans Prospeed essayer voudrais, sollte la fois ici im Forum regarder: [...] 

vois hilfreich pour qui Formatbestimmung de Bilddaten ist incidemment aussi cet Website rawpixels.net:  [...] 

indépendant vom Texturformat braucht es aussi et avec ca travail, là sich Depth-Test et Alphatransparenz ici quelque chose bekriegen. Im Prinzip devrait on alles seulement Z-Sortieren. chez Kompletter Transparenz hat on mais aucun Probleme, sofern on cet per Schwellenwert dans qui glAlphaFunc erzwingt

sans Fix, je pour Sortierung sommes manche Seiten korrekt et manche manquer:



avec Fix (mais abgeschnittener Semi-Transparenz):
oGL("glAlphaFunc", ~GL_GREATER, 0.90)
oGL("glEnable",~GL_ALPHA_TEST)



très geholfen hat mir dabei cette Beitrag: [...] 

pas transparente PNGs peux XProfan selbst avec einem Zweizeiler erstellen:
hPic& = Créer(«PCSI»,-1,"firefox.png")
textureHandle& = oGL("GetTextureBMP", hPic&, 2)

ici mon Funktion avec Beispielcode tambour herum. Nachholfbedarf steckt ici encore im Fehlerhandling et il y a meinerseits Unsicherheiten quoi cela Freigeben de Bereichen angeht, dessen Adresse modifié wurde.
declare prospeed&
declare texture%[5]
declare xrot!, yrot!, zrot!
declare xpos!, xspeed!, ypos!, yspeed!, zpos!, zspeed!
prospeed&=usedll("ProSpeed.dll")
DEF ImportPng(4) !"ProSpeed","ImportPng"
DEF FreePng(1) !"ProSpeed","FreePng"

Proc FlipImage

    Paramètres mem&, bytes&, w&, bytesperpixel&
    Déclarer source#,dest#,bytes2&,step&
    step& = bytesperpixel& * w&
    Faible source#, bytes&
    Faible dest#, bytes&
    source# = mem&
    bytes& = bytes& -step&

    Tandis que (bytes& > -1)

        Char dest#, bytes2& = Char$(source#, bytes&, step&)
        bytes&  = bytes& - step&
        bytes2& = bytes2& + step&

    Endwhile

    Dispose source#
    return addr(dest#)

ENDPROC

Proc oGL_LoadPng

    Paramètres textureName$
    Déclarer fSiz&, bytesRead&,iWidth&,iHeight&,txID&,mem#, return%,array&,maskarray&
    Déclarer pnghandle&,bytes&,test#,bytesperpixel&,temp&,temp#
    oGL("Color",1,1,1,0.5)
    textureName$ = textureName$
    return% = fileexists(textureName$)

    Si (return%)

        pnghandle&=ImportPng(addr(textureName$),addr(iWidth&),addr(iHeight&),addr(fSiz&))

        Si (pnghandle&)

            Faible mem#, fSiz&
            temp& =  mem#'nötig?
            mem# = pnghandle&
            temp# = temp&'nötig?
            Dispose temp#'nötig?
            bytesperpixel& = fSiz& / (iWidth& * iHeight&)
            'malheureusement nötig ou bien on speichert sur dem tête:
            mem# = FlipImage(mem#,fSiz&,iWidth&,bytesperpixel&)
            txID&=0
            ogl("glGenTextures",1, addr(txID&))
            ogl("glBindTexture",~GL_TEXTURE_2D, txID&)
            Cas bytesperpixel&  = 4 : ogl("glEnable",~GL_ALPHA_TEST)'RGBA
            ogl("glTexEnvi",~GL_TEXTURE_ENV, ~GL_TEXTURE_ENV_MODE, ~GL_MODULATE)
            ogl("glTexParameteri",~GL_TEXTURE_2D, ~GL_TEXTURE_MAG_FILTER, ~GL_LINEAR)
            ogl("glTexParameteri",~GL_TEXTURE_2D, ~GL_TEXTURE_MIN_FILTER, ~GL_LINEAR_MIPMAP_LINEAR)
            ogl("glMatrixMode",~GL_PROJECTION)

            Si bytesperpixel&  = 4

                ogl("gluBuild2DMipmaps",~GL_TEXTURE_2D, ~GL_RGBA, iWidth&, iHeight&, ~GL_RGBA, ~GL_UNSIGNED_BYTE, mem#)

            Elseif bytesperpixel&  = 3

                ogl("gluBuild2DMipmaps",~GL_TEXTURE_2D, ~GL_RGB, iWidth&, iHeight&, ~GL_RGB, ~GL_UNSIGNED_BYTE, mem#)

            Endif

            'FreePng(pnghandle&) 'pas faire, là sonst doppelt avec dispose
            Dispose mem#

        Endif

    Endif

    Retour txID&

ENDPROC

Proc DrawGLScene

    declare id&
    oGL("Clear")
    oGL("Color", 1, 1,1,1)
    oGL("glDisable", ~GL_CULL_FACE)'Rückseiten zeichnen, ist eigentlich déjà aktiviert
    'oGL("glEnable", ~GL_SAMPLE_ALPHA_TO_ONE)
    'sans cette Trick serait on par qui halbtransparenten Flächen je pour Winkel, autre Flächen la fois voyons ou bien pas
    'Alles quoi moins deckend ist comme 90% wird entier abgeschnitten, cet Bereiche faire ensuite aucun Proleme
    'https://stackoverflow.com/questions/5984887/opengl-z-sorting-transparency
    oGL("glAlphaFunc", ~GL_GREATER, 0.90)
    oGL("glEnable",~GL_ALPHA_TEST)
    oGL("Move", xpos!, ypos!, zpos!)
    oGL("Rotate", xrot!, yrot!, zrot!)
    oGL("Texture", texture%[0], 1)
    oGL("Cuboid", 1, 1,1)
    oGL("Show")
    xrot! = xrot! + xspeed!
    yrot! = yrot! + yspeed!
    zrot! = zrot! + zspeed!

ENDPROC

' Hauptprogramm
' -------------
declare hWnd&, ende%
CLS 0
oGL("Init", %hWnd, 0.7,0.7,0.7,0)
oGL("Posmode", 1)
oGL("Blendmode", 1)
texture%[0] = oGL_loadPNG("firefox.png")'oGL("LoadTextureBMP","tex3.bmp",3)
texture%[1] = oGL("LoadTextureBMP","tex.bmp",3)
yspeed! = 0.5
xrot! = 35
yrot! = 45
zpos! = -2
Ende% = 0
setTimer 10' max. 100 Frames /sek.

WhileNot ende%

    WaitInput

    Si IsKey(27)     : Ende% = 1

    ElseIf Iskey(39) : yspeed! = yspeed! + .1

    ElseIf Iskey(37) : yspeed! = yspeed! - .1

    ElseIf Iskey(40) : xspeed! = xspeed! + .1

    ElseIf Iskey(38) : xspeed! = xspeed! - .1

    ElseIf Iskey(33) : zpos! = zpos! - .1

    ElseIf Iskey(65) : xpos! = xpos! - .1

    ElseIf Iskey(68) : xpos! = xpos! + .1

    ElseIf Iskey(83) : ypos! = ypos! - .1

    ElseIf Iskey(87) : ypos! = ypos! + .1

    ElseIf Iskey(34) : zpos! = zpos! + .1

    EndIf

    DrawGLScene()

Endwhile

killTimer
freedll prospeed&
Fin

147 kB
Bezeichnung:fixed
Hochgeladen:16.08.2021
Downloadcounter59
Herunterladen
143 kB
Bezeichnung:unfixed
Hochgeladen:16.08.2021
Downloadcounter63
Herunterladen
344 kB
Bezeichnung:Beispiel mit EXE und Bilddatei
Hochgeladen:16.08.2021
Downloadcounter65
Herunterladen
 
16.08.2021  
 



Zum Quelltext


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

1.573 Views

Untitledvor 0 min.
H.Brill29.10.2023
Sven Bader22.12.2022
Ernst29.05.2022
p.specht18.11.2021
plus...

Themeninformationen

cet Thema hat 1 participant:

Sven Bader (1x)


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie