Español
Fuente/ Codesnippets

OpenGL transparente PNG-Texturen

 

Sven
Bader
Ejemplo con EXE y Bilddatei:

Descargar

Bisher Yo para transparente Texturen Davids .tex Formato verwendet: [...] 
Tuve me una Exe-Droplet gebaut y una Encabezamiento para no quadratische Texturen gebaut. Der nächste logische Schritt wäre gewesen, el Formato auch todavía a packen aber hier Yo abgebrochen y quería PNG ni Chance geben.

Yo verwende el Prospeed Función "ImportPng", como Yo el DLL ohnehin ya en mi Projekt nutze. Der Pointer zeigt en unkomprimierte RGBA Daten, el Yo zuvor todavía drehen muss (el Position no el Farbwerte).

Wer lo sin Prospeed probieren möchte, debería veces hier en el Foro schauen: [...] 

Sehe hilfreich para el Formatbestimmung de Bilddaten es de paso estos Website rawpixels.net:  [...] 

Unabhängig vom Texturformat braucht lo auch todavía algo Arbeit, como se Depth-Test y Alphatransparenz hier algo bekriegen. Im Principio debería uno alles sólo Z-Sortieren. En Kompletter Transparenz ha uno pero no Problemas, sofern uno esta por Schwellenwert en el glAlphaFunc erzwingt

Ohne Fix, je después de Sortierung son manche Páginas korrekt y manche fehlen:



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



Sehr geholfen ha me esta dieser Contribución: [...] 

No transparente PNGs kann XProfan incluso con un Zweizeiler redactar:
hPic& = Crear("HPIC",-1,"firefox.png")
textureHandle& = oGL("GetTextureBMP", hPic&, 2)

Hier mi Función con Beispielcode tambor herum. Nachholfbedarf steckt hier aún en Fehlerhandling y lo son meinerseits Unsicherheiten qué el Freigeben de Bereichen angeht, dessen Adresse cambiado wurde.
declarar prospeed&
declarar texture%[5]
declarar xrot!, yrot!, zrot!
declarar xpos!, xspeed!, ypos!, yspeed!, zpos!, zspeed!
prospeed&=usedll("ProSpeed.dll")
DEF ImportPng(4) !"ProSpeed","ImportPng"
DEF FreePng(1) !"ProSpeed","FreePng"

Proc FlipImage

    Parámetros mem&, bytes&, w&, bytesperpixel&
    Declarar source#,dest#,bytes2&,step&
    step& = bytesperpixel& * w&
    Dim source#, bytes&
    Dim dest#, bytes&
    source# = mem&
    bytes& = bytes& -step&

    Mientras que (bytes& > -1)

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

    EndWhile

    Disponer source#
    volver addr(dest#)

ENDPROC

Proc oGL_LoadPng

    Parámetros textureName$
    Declarar fSiz&, bytesRead&,iWidth&,iHeight&,txID&,mem#, volver%,array&,maskarray&
    Declarar pnghandle&,bytes&,test#,bytesperpixel&,temp&,temp#
    oGL("Color",1,1,1,0.5)
    textureName$ = textureName$
    volver% = fileexists(textureName$)

    If (volver%)

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

        If (pnghandle&)

            Dim mem#, fSiz&
            temp& =  mem#'nötig?
            mem# = pnghandle&
            temp# = temp&'nötig?
            Disponer temp#'nötig?
            bytesperpixel& = fSiz& / (iWidth& * iHeight&)
            'desafortunadamente nötig oder uno speichert en el Kopf:
            mem# = FlipImage(mem#,fSiz&,iWidth&,bytesperpixel&)
            txID&=0
            ogl("glGenTextures",1, addr(txID&))
            ogl("glBindTexture",~GL_TEXTURE_2D, txID&)
            Case 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)

            If 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&) 'no hacer, como sonst doppelt con disponer
            Disponer mem#

        Endif

    Endif

    Volver txID&

ENDPROC

Proc DrawGLScene

    declarar id&
    oGL("Clear")
    oGL("Color", 1, 1,1,1)
    oGL("glDisable", ~GL_CULL_FACE)'Rückseiten dibujar, es eigentlich ya aktiviert
    'oGL("glEnable", ~GL_SAMPLE_ALPHA_TO_ONE)
    'Ohne esta Trick sería uno por el halbtransparenten Flächen je después de Winkel, otro Flächen veces sehen oder no
    'Alles qué weniger deckend es como 90% se bastante abgeschnitten, esta Bereiche hacer entonces no 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
' -------------
declarar 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.

Sinestar encargado ende%

    WaitInput

    If 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&
End

147 kB
Bezeichnung:fixed
Hochgeladen:16.08.2021
Ladeanzahl59
Descargar
143 kB
Bezeichnung:unfixed
Hochgeladen:16.08.2021
Ladeanzahl63
Descargar
344 kB
Bezeichnung:Beispiel mit EXE und Bilddatei
Hochgeladen:16.08.2021
Ladeanzahl65
Descargar
 
16.08.2021  
 



Zum Quelltext


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

1.568 Views

Untitledvor 0 min.
H.Brill29.10.2023
Sven Bader22.12.2022
Ernst29.05.2022
p.specht18.11.2021
Más...

Themeninformationen

Dieses Thema ha 1 subscriber:

Sven Bader (1x)


Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie