[B3d] MaskTexture und SetAlphamap

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Vertex

Betreff: [B3d] MaskTexture und SetAlphamap

BeitragDi, Dez 23, 2003 15:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!
BlitzBasic:

Function MaskTexture(Texture,R,G,B)
Local Buffer,X,Y,Width,Height,RGB,R2,G2,B2

Buffer = TextureBuffer(Texture)
Width = TextureWidth(Texture) - 1
Height = TextureHeight(Texture) - 1

LockBuffer Buffer
For X = 0 To Width
For Y = 0 To Height
RGB = ReadPixelFast(X,Y,Buffer)
R2 = (RGB And $FF0000) / $10000
G2 = (RGB And $FF00) / $100
B2 = (RGB And $FF)
If R = R2 And G = G2 And B = B2 Then
WritePixelFast X,Y,R * $10000 + G * $100 + B,Buffer
EndIf
Next
Next
UnlockBuffer Buffer
End Function

BlitzBasic:

Function SetAlphamap(Texture,Alphamap)
Local OldBuffer,TexBuffer,AlphaBuffer
Local TexWidth,TexHeight,AlphaWidth
Local AlphaHeight,M1#,M2#,X,Y,RGB1,R,G,B
Local RGB2,A,ARGB

OldBuffer = GraphicsBuffer()
TexBuffer = TextureBuffer(Texture)
AlphaBuffer = TextureBuffer(Alphamap)
TexWidth = TextureWidth(Texture)
TexHeight = TextureHeight(Texture)
AlphaWidth = TextureWidth(Alphamap)
AlphaHeight = TextureHeight(Alphamap)
M1# = Float#(TexWidth) / Float#(AlphaWidth)
M2# = Float#(TexHeight) / Float#(AlphaHeight)

SetBuffer TexBuffer : LockBuffer
LockBuffer AlphaBuffer
For X = 0 To TexWidth - 1
For Y = 0 To TexHeight - 1
RGB1 = ReadPixelFast(X,Y,TexBuffer)
R = (RGB1 And $FF0000) / $10000
G = (RGB1 And $FF00) / $100
B = (RGB1 And $FF)

RGB2 = ReadPixelFast(M1# * X,M2# * Y,AlphaBuffer)
A = (RGB2 And $FF0000) / $10000
ARGB = A * $1000000 + R * $10000 + G * $100 + B
WritePixelFast(X,Y,ARGB,TexBuffer)
Next
Next
UnlockBuffer AlphaBuffer
UnlockBuffer : SetBuffer OldBuffer
End Function


MaskTexture ist das selbe wie MaskImage, bloß eben mit einer Textur.
SetAlphmap setzt eine Alphamap auf Texture. Die Textur und die Alphamap
müssen nicht gleich groß sein. Je schwärzer die Alphamap, desto
transparenter wird der Texel. (Ich benutze dabei nur den Rotanteil der
Alphamp, änlich wie bei Highmaps für Terrains). Die Alphamap muss
ebenfalls eine geladene Textur sein. (Man kann aber das ganze auch
für Images umstellen)

Für beide Funktion gilt:
Die Texture müssen im Modus 2 geladen werden.

beispiel:
Texture = LoadTexture("Bla.png",2)
MaskTexture(Texture,255,255,0)
hier würden alle Texel komplett transparent gemacht werden,
die gelb(255,255,0) sind.

Texture = LoadTexture("Bla.png",2)
Alphamap = LoadTexture("Alphamap.png")
SetAlphamap(Texture,Alphamap)
FreeTexture Alphamap
mfg olli
 

stepuh

BeitragFr, Apr 14, 2006 19:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Hiho!

Weis jemand, wieso die MaskTexture() - Funktion nicht mehr klappt,
sobald man im buffer der Texture rumgemalt hat?

beispiel:

Das klappt:
BlitzBasic:

cube = CreateCube()
tex = LoadTexture("tex.bmp",2)
EntityTexture cube,tex
MaskTexture(tex,255,0,255)
FreeTexture tex



Das klappt aba nicht:
BlitzBasic:

cube = CreateCube()
tex = LoadTexture("tex.bmp",2)
EntityTexture cube,tex

bild = LoadImage("bild.bmp")
SetBuffer(TextureBuffer(tex))
DrawImage bild,0,0
SetBuffer(BackBuffer())

MaskTexture(tex,255,0,255)
FreeTexture tex



Wäre für eine Erklärung oder einen Lösungsvorschlag sehr dankbar!
http://www.web13.shells24.de/banner.png

Markus2

Betreff: Re: MaskTexture und SetAlphamap

BeitragFr, Apr 14, 2006 21:12
Antworten mit Zitat
Benutzer-Profile anzeigen
@stepuh
Hm,weiß ich nicht aber
ich grübel gerade über den Sinn der dahinter steckt
und denke das ist so schneller .
Habe es aber nicht getestet , sollte aber das gleiche sein .

BlitzBasic:

Function MaskTexture(Texture,R,G,B)
Local Buffer,X,Y,RGB
RGB=R * $10000 + G * $100 + B
Buffer = TextureBuffer(Texture)

LockBuffer Buffer
For X = 0 To TextureWidth(Texture) - 1
For Y = 0 To TextureHeight(Texture) - 1
If (ReadPixelFast(X,Y,Buffer) And $FFFFFF)=RGB Then
WritePixelFast X,Y,RGB,Buffer
EndIf
Next
Next
UnlockBuffer Buffer

End Function

Lunatix

BeitragSa, Mai 13, 2006 0:50
Antworten mit Zitat
Benutzer-Profile anzeigen
@stepuh :

Wie hast du das image überhaupt da rauf bekomm - bei mir geht das meist nur mit dem flag 8, also mipmapped. sobald ich was andres mach, seh ich kein bild, nichmal 1+8 oder so...
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen...

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group