Texture alpha
Blitz3D Forums/Blitz3D Programming/Texture alpha
| ||
I am trying to create a texture with all black pixels Alpha. But can't seem to get it to work. Here is my code. ts=512 tex55=CreateTexture (ts,ts,15) SetBuffer TextureBuffer (tex55,0) For cdy= 0 To ts-1 For cdx= 0 To ts-1 rcg=Rnd(0,100) If rcg<70 Then rcg=0 rcr=Int(rcg/2) rcb=Int(rcg/4) Color rcr,rcg,rcb Plot cdx,cdy Next Next ClearTextureFilters TextureFilter "",15 From what I read this should have worked. But the black always comes out black, not transparant. I added the TextureFilter part after to see if that would help. But by theory it should have been set by CreateTexture (ts,ts,15). CreateTexture doesn't seem to work right. Also tried: TextureBlend tex55,1 No success. |
| ||
Plot is a 2d (DirectDraw) command. It always writes an alpha value of 255, which means fully opaque. You need to use WritePixel on the Texture to control alpha in addition to r,g,b. |
| ||
ploting does not set the alpha value, this works only for loaded alpha maps. You better use WritePixel and use the most significant byte as alpha value: ; 0 to 255 red=100 green=150 blue=255 alpha=200 rgb=(red shl 16) or (green shl 8) or (blue) WritePixel x,y rgb or (alpha shl 24) Of course, you could also say rgb=$FF33FF ; Hex Color, just like in HTML and then use Readpixelfast with Lockbuffer to make it faster. BTW if you use a Texture Filter Flag of 15, this will include Flag 2 as well as Flag 4 - I am not sure if you can use both at the same time, I think you can't. So better use 11. |
| ||
So how would I rewrite the preveous example to work with WritePixel. I'm not sure how to set the buffer of "WritePixel" . And yes 15 does work right I use it for loaded textures. All my loaded textures are set to either 15 or 9. Depending if I want alpha or solid textures. At least with my graphics card, it does. And thanks for telling me about Plot. |
| ||
Finally I have an Alpha Tile. For anyone that needs Random tile for tree leaves, here is the code. ts=512 tex55=CreateTexture (ts,ts,15) SetBuffer TextureBuffer (tex55,0) For cdy= 0 To ts-1 For cdx= 0 To ts-1 rca=255 ;alpha rcg=Rnd(0,150) ;green rcr=Int(rcg/2) ;red rcb=Int (rcg/4) ;blue argb=0 ;clear color argb=(rca Shl 24) Or (rcr Shl 16) Or (rcg Shl 8) Or (rcb) If rcg<74 Then argb=0 ;just to be sure lots of black WritePixel cdx,cdy,argb Next Next SetBuffer BackBuffer() ;back to screen Thanks for the help. Hope someone else can use this too. |