Spritetexture maskieren?

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

TheProgrammer

Betreff: Spritetexture maskieren?

BeitragSa, Apr 23, 2005 20:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi.

Ich habe einen Sprite mit einer Texture.
Ich möchte aber, dass die schwarze Fläche
maskiert ist.

Doch das funzt irgendwie net:

Code: [AUSKLAPPEN]

sprite = CreateSprite()

tex = CreateTexture(64,64,4)
SetBuffer TextureBuffer(tex)
 color 255,0,0
 rect 0,0,64,64,1
 color 0,0,0
 oval 16,16,32,32,1
EntityTexture(sprite,tex)
SetBuffer BackBuffer()


Ich hoffe, mir kann jemand helfen.

Mfg
TheProgrammer
aktuelles Projekt: The last day of human being
 

FBI-blitz

BeitragSa, Apr 23, 2005 21:56
Antworten mit Zitat
Benutzer-Profile anzeigen
entityfx ... ?
Computer 1: AMD Athlon64 3500+ | nVidia GF 7900GT | 1024 MB DDR-RAM | ASUS A8N-SLI Preimium | 250 GB SATA 2 || WindowsXP | Blitz3D | Blitz+
Computer 2: AMD AthlonXP 2400+ | ATI Radeon 9500 | 512 MB DDR-RAM | MSI K7N2 | 80 GB IDE | 160 GB IDE || WindowsXP | Blitz3D | Blitz+
Computer 3: Intel Pentium MMX | onBoard-Grafik | 32 MB RAM | 1 GB IDE || Windows 98 SE | Blitz+

Peer

BeitragSa, Apr 23, 2005 22:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist ein Fehler von Blitz. Alle Malfunktionen setzten Alpha auf 00. Um das zu behben musst du das ganze Bild durchgehen und alle Pixel mit ReadPixelFast lesen und mit WritePixelFast mit verändertem Alpha wieder malen.

Edit: So hier noch der Code:
BlitzBasic: [AUSKLAPPEN]

Function TextureMaskFix(tx)
w = TextureWidth(tx) - 1
h = TextureHeight(tx) - 1
buffer = TextureBuffer(tx)
LockBuffer(buffer)
For x = 0 To w
For y = 0 To h
rgb = ReadPixelFast(x, y, buffer) And $00FFFFFF
If rgb <> 0 Then
WritePixelFast x, y, $FF000000 Or rgb, buffer
Else
WritePixelFast x, y, rgb, buffer
EndIf
Next
Next
UnlockBuffer(buffer)
End Function

MaTrixCruiser

BeitragSo, Apr 24, 2005 11:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde die texture nicht in Blitz malen sondern laden. dann hast du das problem nicht.
Amd 64 3200+ (939 winchester)
nvidea 6600gt (PCI-E)
1024 ddr400
200GB HDD
S

Peer

BeitragSo, Apr 24, 2005 11:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Manchmal muss man aber in Blitz malen. Dann braucht man solche Funktionen. Die obige funktioniert übrigens nur bei Mask. Für Alpha ist sie entwas anders. Und man sollte sie nicht in jedem Frame benutzen da sie ziemlcih langsam ist.

MaTrixCruiser

BeitragSo, Apr 24, 2005 11:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt. Da hast du recht.

Aber ich bin für texturen. Da kann man dann mit alpha channels arbeiten.
Amd 64 3200+ (939 winchester)
nvidea 6600gt (PCI-E)
1024 ddr400
200GB HDD
S

TheProgrammer

BeitragSo, Apr 24, 2005 19:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die antworten. Very Happy
Ich werds gleich mal ausprobieren...
aktuelles Projekt: The last day of human being

Devils Child

BeitragSa, Apr 30, 2005 14:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

sprite = createsprite()
tex = loadtexture("C:\...", 4)
entitytexture sprite, tex :idea:

Peer

BeitragSa, Apr 30, 2005 15:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn man Loadtexture verwendet funktioniert alles weil loadtexture automatisch die Alpha Werte setzt. Wenn man Createtexture benutzt und Blitz Mal Befehle dann gehts halt nicht. Außer wenn man alles mit WritePixel(Fast) macht da man da selbs die Alpha Werte Setzten kann.

Alternativ noch
BlitzBasic: [AUSKLAPPEN]

SaveBuffer(TextureBuffer(tex, \"tmp\")
LoadTexture(\"tmp\", 4)

was geschwindigkeitsmäßig und stielistisch natürlich unterste Schublade ist.

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group