Indiepath's TexturedPoly and color/alpha?
BlitzMax Forums/BlitzMax Programming/Indiepath's TexturedPoly and color/alpha?
| ||
| I posted about this over on his support forums, but I figured I'd ask here too, since it looked likely that was I missing something obvious about texture formats. I am getting behavior I don't understand when using this module (which works beautifully otherwise, btw, so many thanks!).
Import indiepath.texturedpoly
SetGraphicsDriver GLMax2DDriver()
graphics 640, 480, 0
Cls
img = LoadImage("testtext.jpg")
c1# = Float($88888888)
Local xyuv:Float[] = [ 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, c1, 0.0, 0.0, ..
128.0, 0.0, 0.0, 0.0, 0.0, 1.0, c1, 1.0, 0.0, ..
128.0,128.0, 0.0, 0.0, 0.0, 1.0, c1, 1.0, 1.0, ..
0.0,128.0, 0.0, 0.0, 0.0, 1.0, c1, 0.0, 1.0 ]
c2# = Float($FFFFFFFF)
Local xyuv2:Float[] = [ 128.0, 0.0, 0.0, 0.0, 0.0, 1.0, c2, 0.0, 0.0, ..
256.0, 0.0, 0.0, 0.0, 0.0, 1.0, c2, 1.0, 0.0, ..
256.0,128.0, 0.0, 0.0, 0.0, 1.0, c2, 1.0, 1.0, ..
128.0,128.0, 0.0, 0.0, 0.0, 1.0, c2, 0.0, 1.0 ]
c3# = Float($333333FF)
Local xyuv3:Float[] = [ 256.0, 0.0, 0.0, 0.0, 0.0, 1.0, c3, 0.0, 0.0, ..
384.0, 0.0, 0.0, 0.0, 0.0, 1.0, c3, 1.0, 0.0, ..
384.0,128.0, 0.0, 0.0, 0.0, 1.0, c3, 1.0, 1.0, ..
256.0,128.0, 0.0, 0.0, 0.0, 1.0, c3, 0.0, 1.0 ]
c4# = Float($88888844)
Local xyuv4:Float[] = [ 384.0, 0.0, 0.0, 0.0, 0.0, 1.0, c4, 0.0, 0.0, ..
512.0, 0.0, 0.0, 0.0, 0.0, 1.0, c4, 1.0, 0.0, ..
512.0,128.0, 0.0, 0.0, 0.0, 1.0, c4, 1.0, 1.0, ..
384.0,128.0, 0.0, 0.0, 0.0, 1.0, c4, 0.0, 1.0 ]
TPoly.Initialise()
TPoly._Begin
TPoly.Draw(img, 0, xyuv)
TPoly._End
TPoly._Begin
TPoly.Draw(img, 0, xyuv2)
TPoly._End
TPoly._Begin
TPoly.Draw(img, 0, xyuv3)
TPoly._End
TPoly._Begin
TPoly.Draw(img, 0, xyuv4)
TPoly._End
SetColor 255, 255, 255
DrawText "$88888888", 0, 0 ' why is this full bright?
DrawText "$FFFFFFFF", 128, 0 ' why is this red?
DrawText "$333333FF", 256, 0 ' why is this missing?
DrawText "$88888844", 384, 0 ' why isn't this alpha?
Flip
While not KeyHit(KEY_ESCAPE)
Wend
End
I expected $FFFFFFFF to give me the normal image, not $88888888. Instead, it's brick red. And the alpha bits seem to just not work. Am I clueless or missing something? |
| ||
| try to lower the alpha value to just under FF like FE for example. i think that did the trick for me. |
| ||
| $FFFFFFFE results in no image at all -- as if it were full alpha. |
| ||
| Anyone got any more insight on this? |
| ||
Instead of Float(color) try the following FloatInt(color) which uses bitbanging (my word) instead of type conversion:Function FloatInt#(i32) Return Float Ptr (Varptr i32)[0] End Function |
| ||
| That's a nice manly word. =] |
| ||
| Hmmm, according to Google it's not my word after all. |
| ||
| Thanks, skid, that does in fact seem to have done the trick. :) |
| ||
| Actually, it didn't quite do the trick after all. To be specific, the alpha works now. (Though it's in AARRGGBB format, not RRGGBBAA format as Indiepath had indicated?) But I cannot get smooth tinting down the scale from full color image to black. e.g. $FFFFFFFF gets me the normal image, and $FF000000 gets me a black image... but check out this little app -- ranges from 128, 128, 128 to 192, 192 , 192 are tinted reddish-brown. 127, 127, 127 is correct, and 192-255 also seem to be correct. I'm baffled again. Import indiepath.texturedpoly
SetGraphicsDriver GLMax2DDriver()
Graphics 640, 480, 0
SetBlend ALPHABLEND
TPoly.Initialise()
a = 255
r = 255
g = 255
b = 255
img = LoadImage("grass11.png")
While Not KeyHit(key_escape)
Cls
graylevel = 0
For y = 0 To 2
For x = 0 To 4
xpos# = x * 128
ypos# = y * 128
c1# = floatint((255 Shl 24) | (graylevel Shl 16) | (graylevel Shl 8) | (graylevel Shl 0))
Local xyuv:Float[] = [ xpos, ypos, 0.0, 0.0, 0.0, 1.0, c1, 0.0, 0.0, ..
xpos+128.0, ypos, 0.0, 0.0, 0.0, 1.0, c1, 1.0, 0.0, ..
xpos+128.0,ypos+128.0, 0.0, 0.0, 0.0, 1.0, c1, 1.0, 1.0, ..
xpos,ypos+128.0, 0.0, 0.0, 0.0, 1.0, c1, 0.0, 1.0 ]
TPoly._Begin
TPoly.Draw(img, 0, xyuv)
TPoly._End
SetColor 255, 255, 255
DrawText graylevel+","+graylevel+","+graylevel, xpos, ypos
graylevel:+16
If graylevel > 255 Then graylevel = 255
Next
graylevel:+16
Next
c5# = floatint((r Shl 24) | (g Shl 16) | (b Shl 8) | (a Shl 0))
Local xyuv5:Float[] = [ 0.0, 384.0, 0.0, 0.0, 0.0, 1.0, c5, 0.0, 0.0, ..
0.0, 512.0, 0.0, 0.0, 0.0, 1.0, c5, 1.0, 0.0, ..
128.0,512.0, 0.0, 0.0, 0.0, 1.0, c5, 1.0, 1.0, ..
128.0,384.0, 0.0, 0.0, 0.0, 1.0, c5, 0.0, 1.0 ]
TPoly._Begin
TPoly.Draw(img, 0, xyuv5)
TPoly._End
SetColor g, b, a
DrawText r + " " + g + " " + b + " " + a, 0, 400
DrawText "Up and down arrows to adjust the gray level.", 128, 440
DrawText "128-192 will be reddish.", 128, 460
If KeyDown(key_up)
a:+1
g:+1
b:+1
EndIf
If KeyDown(key_down)
a:-1
g:-1
b:-1
EndIf
Flip
Wend
End
Function FloatInt#(i32)
Return Float Ptr (Varptr i32)[0]
End Function
|
| ||
| I see my docs are wrong, thanks for emailing me and letting me know. |
| ||
| I don't know your email address, else I would have -- it's not in your profile or in the license doc for the module...? I posted to your support forum with the original problem as well, actually, but the forums went away the next day. :( I've been checking them almost every day hoping they were back up. For a while, I couldn't find you on the forums here either, because your handle changed. In any case, I do find the modules excellent -- I use the projmatrix in everything now. This particular thing is still baffling me, though. |
| ||
| aah. i remeber that. it was also an alpha thing. when alpha was set to 1 the gradients were very weird and as soon as i lowered the alpha to just below 1 it all worked. |
| ||
| Thanks, Space_guy! The #FE did indeed work now that the FloatInt() function is there. :) |
| ||
| :) great |