2D image to 3D texture help

Blitz3D Forums/Blitz3D Programming/2D image to 3D texture help

EOF(Posted 2003) [#1]
Coders,
I have updated my SpriteControl quite heavily now and I am now using the function below to copy an existing 2d image into a texture.
What I need to know is how to write the correct pixel format into the texture depending on what 'texture flags' are being used.

To make things clearer, the CreateTexture function has these flags:

1: Color (default)
2: Alpha
4: Masked
8: Mipmapped
16: Clamp U
32: Clamp V
64: Spherical environment map
128: Cubic environment map
256: Store texture in vram
512: Force the use of high color textures



Here is the function I am using to copy an existing 2D image into a texture. To help you understand the function a little better, this just takes an existing 2D image, creates a 'padded' (rounded up to the nearest power of 2) texture and copies the 2d pixel info into the texture. After that, it gets scaled and thrown into a quad entity for displaying.
; Convert existing image to quad
Function ImageToSprite(img,texflags=5,par=-1)
	If par=1 par=spritepivot
	Local iw=ImageWidth(img) , ih=ImageHeight(img)
	Local tw=2 Shl (Len(Int(Bin(iw-1)))-1)
	Local th=2 Shl (Len(Int(Bin(ih-1)))-1)
	Local tex=CreateTexture(tw,th,texflags)
	Local ib=ImageBuffer(img) : LockBuffer ib
	Local tb=TextureBuffer(tex) : LockBuffer tb
	Local x,y
	For x=0 To iw-1
		For y=0 To ih-1
			rgbc=ReadPixelFast(x,y,ib) And $00ffffff
			If rgbc=((r Shl 16)+(g Shl 8)+b)
				WritePixelFast x,y,($00000000),tb
			Else
				WritePixelFast x,y,(rgbc Or $ff000000),tb
			EndIf
		Next
	Next
	UnlockBuffer ib : UnlockBuffer tb
	ScaleTexture tex,Float(tw)/Float(iw),Float(th)/Float(ih)
	Local sprite=CreateImage3D(iw,ih,par)
	EntityTexture sprite,tex
	EntityFX sprite,1+16 : EntityOrder sprite,-100
	ScaleEntity sprite,Float(iw)/2,Float(ih)/2,1
	Return sprite
End Function

Now, the bit I don't understand is the the difference between alpha and masked. The function DOES ignore black (like 2D DrawImage) if flag 4 is used and likewise, shows as solid if flag 1 is applied.

I'm guessing alpha should be ignored?


Ross C(Posted 2003) [#2]
Well, i'd write the alpha information anyways. Other than that, the texture flag you assign the texture in blitz should take care of everything else me thinks.


Who was John Galt?(Posted 2003) [#3]
Yeah pretty much what ross says I think. Difference between alpha and masked is that alpha allows each pixel to have its own level of transparency (read from a suitable file format, eg .png which holds this info) whereas masked is all or nothing as you have.


EOF(Posted 2003) [#4]
I think what I'm confused with here is how the texture flags work. They affect how the texture acutally is displayed on screen and do not physically modify the rgb data in the texture.
I now think it's because I'm using EntityFX sprite,1+16 to keep it looking full-bright.