Če
Citat:
TheAlas: Alpha kanal zaboravi, trebaju ti asm za brzo crtanje ili dx8, koristi stare trikove, kao sto je crtanje color-key pixela koji postepeno brisu sliku

.
Ček ček... možeš li da pojasniš ovo malo? Živo me interesuje. Ja sam doduše prešao na DX8 ali sam ranije tešku muku mučio sa transparencijom
Što se tiče floating pointa, više nije '93. Ali u pravu si, treba ostati veran tradiciji i ne komplikovati kada se već ne mora - VB je to, nikad se ne zna kad će početi da štuca. Kad se samo setim da mi je na C64 max. dva slova za ime varijable bilo mnogo...
btw kad smo već kod toga, radio sam neki interni benchmark i ispostavilo se da su operacije množenja Single x Single varijabli otprilike 3-4x sporije od množenja Long x Long. Takođe se ispostavilo i da je Integer sporiji od Long-a!!!
@krckoorascic
Alpha blending ti ne treba strogo za eksplozije, bice ti dovoljno da koristiš bitblt sa maskom. A ako hoćeš fancy transparentne eksplozije, zasuči rukave i kreni na DirectX 8.
Ako baš moraš da koristiš alpha blend imam jednu (ali vrednu) ideju kako da rešiš "casper" cigle. Pod pretpostavkom da Casper cigle stoje na istom mestu a da pozadina ne skroluje: za svaku casper ciglu kada je kreiraš napravi novi hDC i u njemu blenduj piksele jedan po jedan, i to blenduj piksele cigle sa odgovarajućim pikselima pozadine. Onda kada god hoćeš da crtaš ciglu nacrtaš taj hDC.
Ako treba koristi kod koji ti šaljem. Ovaj kod je naravno
ekstremno spor tako da ga nemoj koristiti u real-time-u već samo npr. na početku nivoa.
Ako cigle treba da imaju fadein i fadeout efekat, onda napravi više od jednog hDCa po cigli i za svaki odradi blend sa drugačijim vrednostima. Tako bi imao Npr. CasperBrick(I).BlendedHDC(1 To 6) gde je (1) jedva vidljivo a (6) najmanje transparentno.
Ovo nije baš elegantno rešenje, s obzirom da ždere dosta memorije za svaku Casper ciglu, ali je savršeno primenljivo na tvoj problem jer ne verujem da ćeš imati više od 20ak ovih specijalnih cigli na nivou.
Code:
Public Type tRGB
Blue As Byte
Green As Byte
Red As Byte
End Type
Public Function Blend(ByVal Color1 As Long, ByVal Color2 As Long, ByVal Opacity As Single) As Long
Dim Triple1 As tRGB, Triple2 As tRGB, TripleRes As tRGB
Call GetRGB(Color1, Triple1)
Call GetRGB(Color2, Triple2)
TripleRes.Red = Triple1.Red * Opacity + Triple2.Red * (1 - Opacity)
TripleRes.Green = Triple1.Green * Opacity + Triple2.Green * (1 - Opacity)
TripleRes.Blue = Triple1.Blue * Opacity + Triple2.Blue * (1 - Opacity)
Blend = RGB(TripleRes.Red, TripleRes.Green, TripleRes.Blue)
End Function
Public Sub GetRGB(ByVal ColorVal As Long, Result As tRGB)
Result.Red = CByte(ColorVal And 255)
Result.Green = CByte((ColorVal And 65535) \ 256)
Result.Blue = CByte(ColorVal \ 65536)
End Sub
In a game of chess you must never let your opponent see your pieces - Zap
Brannigan