Deutsch
Quelltexte/ Codesnippets

Juhu Opengl Texturen Tga Transparente

 
- Seite 1 -


Juhu Transparente Texturen - es ist mir gelungen

TGAs können einen 4 layer (transparentslayer) beinhalten - XProfan kann aber aus diesen TGAs keine Texturen erzeugen welche auch noch transparent sind.

Wofür?

Wände mit Lücken? Ein Ball mit rauer Oberfläche? Highmap via Bitmap?

Oder: 2D-Sprites per OGL?

Licht und Partikeleffekte?

Nun bau ich noch eins zwei tools zum speichern dieser TGAs - und dann kann auch jeder was mit anfangen.

22 kB
Hochgeladen:09.11.2006
Ladeanzahl670
Herunterladen
 
09.11.2006  
 



 
- Seite 1 -


Sowas geht damit...
KompilierenMarkierenSeparieren
 {$cleq}
cls
ogl(init,%hwnd,0.0,0.0,0.0,1)
ogl(posmode,1)
int tex.spaceShip=ogl.loadtex(spaceship.tex)
int tex.background=ogl(loadtexturebmp,tile4.bmp,3)
float x,y,xpos,ypos,f=1.6,fps=50,speed=0.5,wxpos,wypos
long fpsc,fpstme=gettickcount+200,ompos

while 1

    fpsc+

    if fpstme<gettickcount

        fpstme:=fpstme+200
        fps:=fpsc
        fpsc:=0

    endif

    case mousepressed : break
    oGL(Clear)
    ogl(move,0,0,-3)
    ogl(push)
    ogl(texture,tex.background,10)
    ogl(move,x-3,y-3,0)
    ogl(quad,8,8)
    ogl(pop)
    ogl(rotate,0,0,mousex)
    ogl(texture,tex.spaceShip,1)
    ogl(quad,0.5,0.5)
    ogl(show)
    wypos:=sin((mousex+90)*0.01745329)
    wxpos:=cos((mousex+90)*0.01745329)
    xpos:=xpos+(wxpos-xpos)/(fps*10)
    ypos:=ypos+(wypos-ypos)/(fps*10)
    y:=y-ypos/(fps/speed)
    x:=x-xpos/(fps/speed)
    case y>f : y:=y-f
    case y<f : y:=y+f
    case x>f : x:=x-f
    case x<f : x:=x+f

wend

end

proc ogl.LoadTEX(string fileName)

    casenot fileexists(fileName) : return false
    long fSiz:=filesize(fileName)
    case (fSiz<4) : return false
    mem mem:=fSiz
    long bytesRead:=blockread(fileName,mem,0,fSiz)
    casenot (bytesRead==fSiz) : return false
    long iWidth=sqrt(fSiz4)
    long txID=0
    ogl(glGenTextures,1,addr(txID))
    ogl(glBindTexture,GL_TEXTURE_2D,txID);
    ogl(glEnable,GL_ALPHA_TEST)
    ogl(glAlphaFunc,GL_GREATER, 0.1)
    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)
    ogl(gluBuild2DMipmaps,GL_TEXTURE_2D, GL_RGBA, iWidth, iWidth, GL_RGBA, GL_UNSIGNED_BYTE, mem)
    dispose mem
    return txID

endproc


KompilierenMarkierenSeparieren
 {$cleq}
const appver=0.0.1
const apptitle=tga2texture4xprofan +appver
const fehler=Datei liegt nicht im richtigen Format vor.
windowtitle apptitle
cls
string inputfile=spaceship.tga,outputfile=del$(inputfile,len(inputfile)-len(substr$(inputfile,-1,.)),len(substr$(inputfile,-1,.))+1)+.tex
print if(LoadTGA(inputfile)==true,OK,fehler)
waitkey
end

proc LoadTGA(string fileName)

    casenot fileexists(fileName) : return false
    long fSiz:=filesize(fileName)
    case (fSiz<18) : return false/*headerSize*/
    mem mem:=fSiz
    long bytesRead:=blockread(fileName,mem,0,fSiz)
    casenot (bytesRead==fSiz) : return false
    int FileType:=byte(mem,0)
    int ColorMapType:=byte(mem,1)
    int ImageType:=byte(mem,2)
    long XX:=byte(mem,12)+byte(mem,13)*256
    long YY:=byte(mem,14)+byte(mem,15)*256
    long BPP:=byte(mem,16)
    long ImageInfo:=byte(mem,17)
    long ImageSize:=XX*YY*(BPP8)
    print FileType,fileType
    print ColorMapType,ColorMapType
    print ImageType,ImageType
    print Width,XX
    print Height,YY
    print BPP,BPP
    print ImageSize,ImageSize
    casenot (ImageType==2) : return false//isnt 32bit rgb uncompressed
    casenot (ColorMapType==0) : return false//no support for colormapped tgas
    casenot (BPP==32) : return false//only support 32bit colordepth
    long x,y,front,back,i,c
    int r,g,b,a
    yy-
    xx-
    mem pdata=ImageSize
    for y:=yy downto 0 do begin
    for x=0 to xx do begin
    c:=i*4+18
    b:=byte(mem,c)
    g:=byte(mem,c+1)
    r:=byte(mem,c+2)
    a:=byte(mem,c+3)
    c:=i*4
    //setpixel x,y,rgb(r,g,b)
    byte pdata#,c=r
    byte pdata#,c+1=g
    byte pdata#,c+2=b
    byte pdata#,c+3=(r+g+b)3
    i+
    end
    locate 9,1
    print 100-(y/yy*100);% konvertiert
    end
    dispose mem
    blockwrite outputfile,pdata,0,ImageSize
    dispose pdata
    return true

endproc


Ich denk mal das Thema ist damit erschlagen.

(bis auf eingefilterte Texturen aber das kann sich ja damit jeder selber bauen)

38 kB
Hochgeladen:10.11.2006
Ladeanzahl612
Herunterladen
484 kB
Hochgeladen:10.11.2006
Ladeanzahl338
Herunterladen
 
10.11.2006  
 



og sources nochmal maginal überarbeitet aber ich denk das wars...
 
10.11.2006  
 




Frank
Abbing
Netter Effekt! Werde ich sicher mal irgendwann nutzen.
 
10.11.2006  
 



Um aus 2 BMPs eine .tex zu erstellen wobei das 2. BMP der Stencil ist:
KompilierenMarkierenSeparieren
 
10.11.2006  
 



Diesmal mit gefiltertem Schatten...

485 kB
Hochgeladen:10.11.2006
Ladeanzahl462
Herunterladen
 
10.11.2006  
 



.tex als highmap zu xpgl:
KompilierenMarkierenSeparieren
'URL: https://xprofan.com/intl/de/quelltexte/juhu-opengl-texturen-tga-transparente/#n
cls
const step=1
const divi=5
string inputfile="ballmap.tex",outputfile=del$(inputfile,len(inputfile)-len(substr$(inputfile,-1,".")),len(substr$(inputfile,-1,"."))+1)+".xpgl"
casenot fileexists(inputfile) : end
long fsiz=filesize(inputfile)
long mapxx=sqrt(fsiz/4),mapyy=mapxx
mem hmap=(mapxx*mapyy)
clear hmap
locate 2,1
print sizeOf(hMap)
mem mem=fsiz
blockread(inputfile,mem,0,fSiz)
long x,y,i=0
fsiz-

whileloop 0,(mapxx*mapyy)-1,step

    byte hmap#,loop=byte(mem,loop*4+3)
    locate 1,1
    print loop

wend

print "loadin"
mapxx=mapxx\step
mapyy=mapyy\step
long fh=assign(outputfile)
rewrite fh
print #fh&,"Q;VC;";mapxx*mapyy-mapxx-mapyy
float p1,p2,p3,p4
string col,col1="0.5,0.5,0.5,1",col2="1,1,1,1"
float ex,ey
for y=0 to mapyy-1 do begin
for x=0 to mapxx-1 do begin

if col==col1

    col=col2

else

    col=col1

endif

p1=byte(hmap,y*mapxx+x)		/divi
p2=byte(hmap,y*mapxx+(x+1))		/divi
p3=byte(hmap,(y+1)*mapxx+(x+1))	/divi
p4=byte(hmap,(y+1)*mapxx+x)		/divi
ex=x-(mapxx/2)
ey=y-(mapyy/2)
print #fh&,ex,",",ey,",",p1	,";"+col
print #fh&,ex+1,",",ey,",",p2	,";"+col
print #fh&,ex+1,",",ey+1,",",p3	,";"+col
print #fh&,ex,",",ey+1,",",p4	,";"+col
end

if col==col1

    col=col2

else

    col=col1

endif

locate 3,1
print y
end
close fh
print "ok"
waitkey
dispose mem
dispose hmap
end
 
10.11.2006  
 




funkheld
Hmmm.., hier kommt die Fehlermeldung "Variable doppelt deklariert : HMAP&"
beim kompilieren mit XPSE.

Gruss
 
19.11.2012  
 




funkheld


{$cleq}
const appver="0.0.1"
const apptitle="tga2texture4xprofan "+appver
const fehler="Datei liegt nicht im richtigen Format vor."
windowtitle apptitle
cls
string inputfile="spaceship.tga",outputfile=del$(inputfile,len(inputfile)-len(substr$(inputfile,-1,".")),len(substr$(inputfile,-1,"."))+1)+".tex"
print if(LoadTGA(inputfile)==true,"OK",fehler)
waitkey
.........


Ich habe jetzt mit verschiedenen Programmen ein TGA erzeugt.
Es kommt immer die Fehlermledung "Falsches Format".

Was ist es bei dir für ein TGA und mit welchem Programm hast du es erzeugt ?

Danke.

Gruss
 
19.11.2012  
 



funkheld (19.11.12)

Hmmm.., hier kommt die Fehlermeldung "Variable doppelt deklariert : HMAP&"
beim kompilieren mit XPSE.

Gruss


Mein Fehler -

im Code fehlte ein Rautezeichen -

habs korrigiert:
KompilierenMarkierenSeparieren
'URL: https://xprofan.com/intl/de/quelltexte/juhu-opengl-texturen-tga-transparente/?q=21905&pg=-1#21905
cls
const step=1
const divi=5
string inputfile="ballmap.tex",outputfile=del$(inputfile,len(inputfile)-len(substr$(inputfile,-1,".")),len(substr$(inputfile,-1,"."))+1)+".xpgl"
casenot fileexists(inputfile) : end
long fsiz=filesize(inputfile)
long mapxx=sqrt(fsiz/4),mapyy=mapxx
mem hmap=(mapxx*mapyy)
clear hmap
locate 2,1
print sizeOf(hMap)
mem mem=fsiz
blockread(inputfile,mem,0,fSiz)
long x,y,i=0
fsiz-

whileloop 0,(mapxx*mapyy)-1,step

    byte hmap#,loop=byte(mem,loop*4+3)
    locate 1,1
    print loop

wend

print "loadin"
mapxx=mapxx\step
mapyy=mapyy\step
long fh=assign(outputfile)
rewrite fh
print #fh&,"Q;VC;";mapxx*mapyy-mapxx-mapyy
float p1,p2,p3,p4
string col,col1="0.5,0.5,0.5,1",col2="1,1,1,1"
float ex,ey
for y=0 to mapyy-1 do begin
for x=0 to mapxx-1 do begin

if col==col1

    col=col2

else

    col=col1

endif

p1=byte(hmap,y*mapxx+x)		/divi
p2=byte(hmap,y*mapxx+(x+1))		/divi
p3=byte(hmap,(y+1)*mapxx+(x+1))	/divi
p4=byte(hmap,(y+1)*mapxx+x)		/divi
ex=x-(mapxx/2)
ey=y-(mapyy/2)
print #fh&,ex,",",ey,",",p1	,";"+col
print #fh&,ex+1,",",ey,",",p2	,";"+col
print #fh&,ex+1,",",ey+1,",",p3	,";"+col
print #fh&,ex,",",ey+1,",",p4	,";"+col
end

if col==col1

    col=col2

else

    col=col1

endif

locate 3,1
print y
end
close fh
print "ok"
waitkey
dispose mem
dispose hmap
end
 
19.11.2012  
 



funkheld (19.11.12)


Was ist es bei dir für ein TGA und mit welchem Programm hast du es erzeugt ?


Es muss sich um eine unkomprimierte rgba-TGA-Datei handeln -

kann man z.B. mit IrfanView speichern.
 
19.11.2012  
 




Sven
Bader
Falls es jemand braucht, ich habe den 2 BMP zu TEX Konverter in natves Profan übersetzt.

UPDATE 15.07. der Originalcode hat Texturen auf den Kopf gestellt (oder ich hatte etwas falsch übersetzt)
windowtitle "2abmpbmp2texture4xprofan"
cls
Set("Decimals",2)
declare inputStencil$,inputfile$,outputfile$,front&,back&,i&,ImageSize&
declare r%,g%,b%,a%,c&,x&,y&,xx&,yy&
declare pdata#
inputStencil$ = "demo_alpha.bmp"
inputfile$ = "demo.bmp"
outputfile$ = del$(inputfile$,len(inputfile$)-len(substr$(inputfile$,-1,".")),len(substr$(inputfile$,-1,"."))+1)+".tex"
print if(bmpbmp2tex(inputfile$,inputStencil$)," OK"," Fehler")
waitkey
end

Proc bmpbmp2tex

    parameters fileNameTexture$, fileNameStencil$
    casenot fileexists(fileNameTexture$) : return 0
    casenot fileexists(fileNameStencil$) : return 0
    mcls 1,1
    startpaint -1
    loadbmp fileNameTexture$,0,0;0
    endpaint
    case %bmpx<>%bmpy : return 0
    mcls %bmpx*2,%bmpy,0
    startpaint -1
    loadbmp fileNameTexture$,0,0;0
    loadbmp fileNameStencil$,%bmpx,0;0
    endpaint
    ImageSize&= %bmpx * %bmpy * 4
    xx& = %bmpx - 1
    yy& = %bmpy - 1
    dim pdata#, ImageSize&

    WhileLoop  0,yy&

        y& = yy& - &loop
        startpaint -1

        WhileLoop  0,xx&

            x& = &loop
            c& = getpixel(x&,y&)
            r% = getRvalue(c&)
            g% = getGvalue(c&)
            b% = getBvalue(c&)
            a% = getRvalue(getPixel(x& + xx& + 1,y&))
            c& = i& * 4
            byte pdata#,c&    = r%
            byte pdata#,c& + 1= g%
            byte pdata#,c& + 2= b%
            byte pdata#,c& + 3= a%
            inc i&

        EndWhile

        endpaint
        locate 2, 2
        print str$(100 - y& / yy& * 100) ; "% konvertiert  "

    EndWhile

    blockwrite outputfile$,pdata#,0,ImageSize&
    dispose pdata#
    return 1

Endproc

 
09.07.2021  
 



 
- Seite 2 -



Sven
Bader
Und hier noch mal das Spaceship Spiel in plain Profan, ob die OpenGL.ph Profan beiliegt kann ich gerade nicht sagen ...

UPDATE 15.07.
Der Originalcode hat nicht den ganzen Alphakanal genutzt, es gab nur durchsichtig oder deckend (was für die verwendete spaceship.tex auch besser war)
 $H OpenGL.ph
cls
ogl("init",%hwnd,0.0,0.0,0.0,0)
ogl("posmode",1)
declare  tex_spaceShip%
declare  tex_background%,mem#
declare  x!,y!,xpos!,ypos!,f!,fps!,speed!,wxpos!,wypos!
tex_spaceShip%  = ogl_loadtex("demo.tex")
tex_background%= ogl("loadtexturebmp","tile4.bmp",3)
f! = 1.6
fps!=50
speed!=0.5
declare fpsc&,fpstme&,ompos&
fpstme& = &gettickcount+200

while 1

    inc fpsc&

    if fpstme&<&gettickcount

        fpstme& = fpstme&+200
        fps!  = fpsc&
        fpsc& = 0

    endif

    case %mousepressed : break
    oGL("Clear")
    ogl("color",1,1,1,1)
    ogl("glEnable",~GL_BLEND);
    ogl("glBlendFunc",~GL_SRC_ALPHA, ~GL_ONE_MINUS_SRC_ALPHA);
    oGL("glEnable",~GL_CULL_FACE)
    ogl("move",0,0,-3)
    'Boden
    ogl("push")
    ogl("texture",tex_background%,10)
    ogl("move",x!-3.0,y!-3.0,0)
    ogl("quad",8,8)
    ogl("pop")
    'Textur
    ogl("texture",tex_spaceShip%,1)
    'Schatten
    ogl("push")
    ogl("move",0.1,-0.1,0)
    ogl("rotate",0,0,%mousex)
    ogl("color",0,0,0,0.25)'Textur abdunkeln + 25% Deckkraft
    ogl("quad",1.5,1.5)
    ogl("pop")
    'Objekt
    ogl("push")
    ogl("rotate",0,0,%mousex)
    ogl("color",1,1,1,1)
    ogl("quad",1.5,1.5)
    ogl("pop")
    ogl("glDisable",~GL_BLEND);
    ogl("show")
    wypos!=sin((%mousex+90)*0.01745329)
    wxpos!=cos((%mousex+90)*0.01745329)
    xpos!=xpos!+(wxpos!-xpos!)/(fps!*10)
    ypos!=ypos!+(wypos!-ypos!)/(fps!*10)
    y!=y!-ypos!/(fps!/speed!)
    x!=x!-xpos!/(fps!/speed!)
    case y!>f! : y!=y!-f!
    case y!<f! : y!=y!+f!
    case x!>f! : x!=x!-f!
    case x!<f! : x!=x!+f!

endwhile

end

proc ogl_LoadTEX

    parameters textureName$
    declare fSiz&, bytesRead&,iWidth&,txID&
    casenot fileexists(textureName$) : return 0
    casenot fileexists(textureName$) : return 0
    fSiz&=filesize(textureName$)
    case (fSiz&<4) : return false
    dim mem#, fSiz&
    bytesRead&=blockread(textureName$,mem#,0,fSiz&)
    casenot (bytesRead&=fSiz&) : return 0
    iWidth&=sqrt(fSiz&\4)
    txID&=0
    ogl("glGenTextures",1,addr(txID&))
    ogl("glBindTexture",~GL_TEXTURE_2D,txID&);
    ogl("glEnable",~GL_ALPHA_TEST)
    'ogl("glAlphaFunc",~GL_GREATER, 0.1)
    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("glTexParameteri",~GL_TEXTURE_2D, ~GL_TEXTURE_WRAP_S, ~GL_CLAMP_TO_EDGE)'Blitzer am Texturrand vermeiden
    ogl("glTexParameteri",~GL_TEXTURE_2D, ~GL_TEXTURE_WRAP_T, ~GL_CLAMP_TO_EDGE)'Blitzer am Texturrand vermeiden
    ogl("glMatrixMode",~GL_PROJECTION)
    ogl("gluBuild2DMipmaps",~GL_TEXTURE_2D, ~GL_RGBA, iWidth&, iWidth&, ~GL_RGBA, ~GL_UNSIGNED_BYTE, mem#)
    dispose mem#
    return txID&

endproc







46 kB
Bezeichnung:Demo
Kurzbeschreibung: Text mit glatten Kanten, Transparentverläufe
Hochgeladen:15.07.2021
Ladeanzahl71
Herunterladen
1 kB
Bezeichnung:Motiv
Kurzbeschreibung: Der Text muss hier zumindest etwas größer sein, da man sonst das Weiß am Rand durchsieht
Hochgeladen:15.07.2021
Ladeanzahl72
Herunterladen
17 kB
Bezeichnung:Alphakanal
Kurzbeschreibung: Von Schwarz (transparent) bis Weiß (deckend)
Hochgeladen:15.07.2021
Ladeanzahl76
Herunterladen
 
09.07.2021  
 




Zum Quelltext


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

17.436 Betrachtungen

Unbenanntvor 0 min.
H.Brill29.10.2023
Sven Bader22.12.2022
p.specht18.11.2021
RudiB.18.11.2021
Mehr...

Themeninformationen



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