Sprite (Maskierung)

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Iguan

Betreff: Sprite (Maskierung)

BeitragFr, Dez 15, 2006 15:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!

Kann mir jemand sagen, wieso bei folgendem code der Schwarze bereich des Sprites immer noch angezeigt wird? Und wieso man den Text nicht sieht?

Code: [AUSKLAPPEN]

gwidth = 800
gheight = 600

Graphics3D gwidth,gheight,32

AmbientLight 255,255,255

cam = CreateCamera()
CameraClsMode Cam,0,1
PositionEntity cam,gwidth/2,gheight/2,-gwidth/2



S = CreateSprite()
EntityFX S,16
SpriteViewMode S,2
ScaleSprite S,64,64
Tex = CreateTexture(64,64,4)
SetBuffer TextureBuffer(Tex)
Cls
Font = LoadFont ("Arial",30)
SetFont Font
Color 255,0,0
Rect 10,10,30,30
Color 0,255,0
Text 15,15,"123"

SetBuffer BackBuffer()

EntityTexture S,Tex
;EntityAlpha S,.5
HandleSprite S,-1,-1



ClsColor 255,255,255
While Not KeyHit(1)
Cls


UpdateWorld
RenderWorld
Flip   
   
Wend


ich habe mal probeweise ein Bild mit dem Text erstellt, und dann mit
Code: [AUSKLAPPEN]

loadsprite(file$,4)

geladen. So wurden die schwarzen bereiche maskiert. Aber wiso läuft das mit dem oberen code nicht??

NightPhoenix

BeitragFr, Dez 15, 2006 15:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Würde sagen dass die Flag 4 nur komplett schwarze Felder durchsichtig macht (R=0 G=0 B=0 , RGB) Bei deiner kreierten Textur (CreateTexture) sind noch keine Farbwerte definiert, also schreib mal sowas wie:
EntityColor s,0,0,0
vor dem Tex = CreateTexture(64,64,4) Befehl.
Hoffe konnte helfen.
MfG. Nightphoenix

Iguan

BeitragFr, Dez 15, 2006 15:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, klappt auch nicht mit Entitycolor S,0,0,0 Sad
 

Matthias

Betreff: Problem gelöst

BeitragFr, Dez 15, 2006 16:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Hay. Habe eine Lössung für dich. Very Happy


Code: [AUSKLAPPEN]

gwidth = 800
gheight = 600

Graphics3D gwidth,gheight,32,2

AmbientLight 255,255,255

cam = CreateCamera()
CameraClsMode Cam,0,1
PositionEntity cam,gwidth/2,gheight/2,-gwidth/2



S = CreateSprite()
EntityFX S,16
SpriteViewMode S,2
ScaleSprite S,64,64
 
;EntityColor S,0,0,0
Tex = CreateTexture(64,64,2)
Image=CreateImage(64,64)
SetBuffer ImageBuffer(Image)
Font = LoadFont ("Arial",30)
SetFont Font
Color 255,0,0
Rect 10,10,30,30
Color 0,255,0
Text 0,0,"123"
ImgB=ImageBuffer(Image)
TexB=TextureBuffer(Tex)

SetBuffer TextureBuffer(Tex)
LockBuffer ImgB:LockBuffer TexB

For ZX=0 To 63:For ZY=0 To 63
rgb=ReadPixelFast(ZX,ZY,ImgB)
a=(rgb And $FF000000)/$1000000
r=(rgb And $FF0000)/$10000
g=(rgb And $FF00)/$100
b=rgb And $FF
If  r=0 And g=0 And b=0 Then a=0



rgb=a*$1000000 + r*$10000 + g*$100 + b
WritePixelFast ZX,ZY,rgb

Next:Next
UnlockBuffer ImgB:UnlockBuffer TexB




SetBuffer BackBuffer()

EntityTexture S,Tex
;EntityAlpha S,.5
HandleSprite S,-1,-1



ClsColor 255,255,255
While Not KeyHit(1)
Cls


UpdateWorld
RenderWorld

Flip

Wend
End

Mfg Matthias
 

Dreamora

BeitragFr, Dez 15, 2006 16:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Was dein Problem mit Text betrifft: Setzt mal TFormFilter 0 vor dem Zeichnen, das sollte eigentlich helfen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Iguan

BeitragFr, Dez 15, 2006 17:53
Antworten mit Zitat
Benutzer-Profile anzeigen
@ Matthias: Könntest du mir erklären, was dein code da macht?? Geht das nicht einfacher?
 

Matthias

Betreff: Das ist doch einfach.

BeitragFr, Dez 15, 2006 18:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Texturen sind keine Images das ist das Problem. Der Farbwert wird in Rot Grün Blau gespalten und dann wieder zusammen gesetzt mit einen neuen AlphaWert.
Leider kann ich dir nur diesen Lösungsweg bieten oder du Speicherst das bild und Lädst es wieder neu. Aber wenn du einen anderen Lösungsweg findest das würde mich auch interesieren.

5k41

BeitragFr, Dez 15, 2006 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
müsste es nicht auch statt mit dem manuellen auslesen mit CopyRect funtzen?

MfG
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image
 

Dreamora

BeitragSa, Dez 16, 2006 19:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Müsste man ausprobieren. Theoretisch nicht, weil Images keine Alphadaten enthalten und das Masking nicht via Alpha läuft sondern wirklich mit der Farbe (deshalb kann man für Images auch die Mask Farbe ändern)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

5k41

BeitragDo, Dez 28, 2006 13:55
Antworten mit Zitat
Benutzer-Profile anzeigen
so, stehe nun vor einem ähnlichen Problem und will eigentlich nicht Matthias Lösung ( die ich sehrwohl verstehe, sie aber für zu komplex halte ) verwenden, da ich wenn ich eine Textur mit Blitz lade, und das Flag auf 4 Stelle, auch nur auf der Textur alles was ich nicht sehen will schwarz anmalen muss, wieso?

MfG
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image
 

Dreamora

BeitragDo, Dez 28, 2006 14:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Was meinst du mit wieso?

Wenn du auf masked stellst wird alles was auf der Textur ist zur Ladezeit durch Alpha 0 ersetzt.
Wenn nix schwarz ist, gibt es nichts transparentes.

Wenn du jedoch später etwas schwarzes rein schreibst, interessiert das die Textur nicht, denn du malst mit schwarz, nicht mit Alpha 0. die Textur wird sich nicht zur Laufzeit nochmal neu initialisieren (aus performancegründen)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group