GLBasic forum

Main forum => Bug Reports => Topic started by: Schranz0r on 2008-Apr-14

Title: [3D] X_SPRITE mit ALPHAMODE ist nicht korrekt.
Post by: Schranz0r on 2008-Apr-14
Wenn man mehrere dieser Sprites überlappt, merkt man, das ALPHAMODE nicht korrekt arbeitet.
In 2D ist alles i.o.


Hier ein Test: www.styleattax.de/alphamode.rar

Oben 3D unten 2D!

Und ja ich weiss, habe das Project falsch benannt :)
Ist mir wohl ein L weg gelaufen :P
Title: [3D] X_SPRITE mit ALPHAMODE ist nicht korrekt.
Post by: Kitty Hello on 2008-Apr-14
Kein Fehler!
Du musst bei 3D die Zeichenreihenfolge beachten!!

Code (glbasic) Select
z=0
FOREACH t IN R[]
DEC z, 0.01
ALPHAMODE t.alpha
X_SPRITE 1,t.x,t.y, z ,1
Puh! :D
Title: [3D] X_SPRITE mit ALPHAMODE ist nicht korrekt.
Post by: Schranz0r on 2008-Apr-14
versteh ich jetzt net nichts desto trotz ist aber das Alpha anders als in 2D.
Der Rand der "Wolke" ist schwarz und Fadet auf Schwarz, ist in 2D aber nicht so!


EDIT:

Code (glbasic) Select
z = 0
FOREACH t IN R[]

ALPHAMODE t.alpha
DEC z, 0.1
X_SPRITE 1,t.x,t.y,z,1
Gut, schaut aber bescheiden aus die Ränder...


EDIT2:

Code ist nicht schön, da ich einfach 2 test zusammen geworfen habe!
Comments == FALSE :)

Code (glbasic) Select
SYSTEMPOINTER TRUE

LOADSPRITE "r1.png", 1

// 3D ------------------
TYPE Rauch
x;y;z
alpha
phi
speed
ENDTYPE

LOCAL R[] AS Rauch
// --------------------

// 2D ------------------

TYPE particle
X;Y
alpha
offsetX
speed
phi
ENDTYPE

GLOBAL p[] AS particle

//----------------------


WHILE TRUE

LOCAL mx,my,b1,b2
MOUSESTATE mx,my,b1,b2

// 3D ---------------------------------------------
X_MAKE3D 1,1000,45
X_CAMERA 0,0,-400, 0,0,0

IF timer < GETTIMERALL()
LOCAL t AS Rauch

t.phi = 60+RND(60)
t.alpha = -0.5 + -RND(2)/10
t.speed = 0.4 + RND(2)/10

DIMPUSH R[],t
timer = GETTIMERALL()//+50
ENDIF



X_DRAWAXES 0,0,0
z = 0
FOREACH t IN R[]

ALPHAMODE -t.alpha
DEC z, 0.1
X_SPRITE 1,t.x,t.y,z,1

INC t.x, COS(t.phi)*t.speed
INC t.y, SIN(t.phi)*t.speed
INC t.alpha,0.002

IF t.alpha >= 0
DELETE t
ENDIF

NEXT


// 2D ----------------------------------------------
X_MAKE2D
IF timer2 < GETTIMERALL()
LOCAL e AS particle

IF b1
e.X = mx
e.Y = my
ELSE
e.X = 300
e.Y = 400
ENDIF

e.alpha = .5
e.speed = .5+RND(3)/5
e.phi = -90+rand(-30,30)
DIMPUSH p[],e
timer2 = GETTIMERALL()//+50
ENDIF


FOREACH t IN p[]

INC t.offsetX,1
INC t.X,COS(t.phi)*t.speed
INC t.Y,SIN(t.phi)*t.speed

ALPHAMODE -t.alpha
DRAWSPRITE 1,t.X, t.Y
ALPHAMODE 0

DEC t.alpha,0.002


IF t.alpha < 0
DELETE t
ENDIF

NEXT

PRINT "Particle on the move: "+LEN(p[]),10,10



SHOWSCREEN
WEND
END

FUNCTION rand: minimum, maximum
  RETURN minimum + RND(-minimum + maximum)
ENDFUNCTION
Einfach die Rar runterladen(erster Post) und den Code ersetzt mit dem aus diesem Post!
Title: [3D] X_SPRITE mit ALPHAMODE ist nicht korrekt.
Post by: Kitty Hello on 2008-Apr-15
Hmm... ist bisserl anders. Warscheinlich, weil die Größe eines Partikels nicht 100% mit dem 2D übereinstimmt?
Oder ist da was mit Rändern? Ich hab's nicht genau feststellen können.