how to use shadeblend?

BlitzMax Forums/BlitzMax Programming/how to use shadeblend?

Robert Cummings(Posted 2006) [#1]
Hiya,

Can't seem to find a good use for shadeblend. It looks ugly and has black borders whenever I try to use it.

I had thought lightblend was additive and shadeblend was multiplicative, but it does not seem to be.

Any example code or demos I can view of shadeblend actually being used to good effect?

Thanks!


poopla(Posted 2006) [#2]
Where's the game you were developing using popcap?


Robert Cummings(Posted 2006) [#3]
right back at you, champ


Michael Reitzenstein(Posted 2006) [#4]
Pot, kettle...


Yan(Posted 2006) [#5]
Frying pan, Lean Mean Fat Reducing Grilling Machine...


poopla(Posted 2006) [#6]
It swings both ways doesn't i mike?


ImaginaryHuman(Posted 2006) [#7]
Lightblend is additive and shadeblend is either subtractive or divisive, I thought?

Also you'll have to be careful that Set Color does not add a tint to the image.


Dubious Drewski(Posted 2006) [#8]
I had the same problem with my gelmap program. I wanted
a white background with black blobs, but had to settle for
the other way around because I couldn't get rid of the
rectangles around my blobs.

This isn't a glitch, is it?


ImaginaryHuman(Posted 2006) [#9]
If you have a rectangle around it then probably it is not `masking` the parts that are meant to be transparent.

To get around this you have to set all the pixels that you want to show as fully transparent, to black or white (can't remember which, either $000000 or $FFFFFF). These will then act as if they are `masked` at the same time as shadeblended.

If the math for shadeblend is source*dest, you should work with that math so that the pixels you want to be transparent calculate out to not change the destination.


fredborg(Posted 2006) [#10]
What's the problem?
Graphics 640,480,0,60

maxd# = 30.0
For x = 0 To 63
	For y = 0 To 63
		d# = Sqr((x-32.0)*(x-32.0) + (y-32.0)*(y-32.0))/maxd
		d = d*0.5 + 0.5
		If d>1.0 Then d = 1.0
		SetColor d*255,d*255,d*255
		Plot x,y
	Next
Next
Flip

Global img:TImage = CreateImage(64,64)
GrabImage(img,0,0)
SetImageHandle img,32,32

Type lax
	Global list:TList = New TList
	
	Field x#,y#
	Field dx#,dy#
	
	Method New()
		List.AddLast Self
		x = Rnd(640)
		y = Rnd(480)
		dx = Rnd(-5,5)
		dy = Rnd(-5,5)
	End Method
	
	Function Update()
		
		SetBlend SHADEBLEND
		
		For l:lax = EachIn lax.list
			l.x = l.x + l.dx
			l.y = l.y + l.dy
			If l.x<32 And l.dx<0
				l.x = 32
				l.dx = -l.dx
			ElseIf l.x>GraphicsWidth()-32 And l.dx>0
				l.x = GraphicsWidth()-32
				l.dx = -l.dx
			EndIf

			If l.y>GraphicsHeight()-32 And l.dy>0
				l.y = GraphicsHeight()-32
				l.dy = -l.dy
				If l.dy>-1 Then l.dy = -20.0
			EndIf
			
			l.dy = l.dy + 0.4

			DrawImage img,l.x,l.y
		Next
		
	EndFunction
	
End Type

For i = 0 To 20
	New lax
Next

SetClsColor 255,255,255

Repeat
	Cls
	lax.Update()
	Flip 
Until KeyHit(KEY_ESCAPE)



Robert Cummings(Posted 2006) [#11]
Thanks fredborg. I see, it doesn't work with loaded AnimImages which have an alpha channel.


Dreamora(Posted 2006) [#12]
AlphaChannel only works with AlphaBlend but with none of the others.


Michael Reitzenstein(Posted 2006) [#13]
LightBlend too.