X_SPRITE scaling

Previous topic - Next topic


I'm not sure but I suspect that the scaling parameter of X_SPRITE is incorrect.
I try to explain in the simplest way possible what I did to verify
I created a yellow sprite of size 640x480 with horizontal and vertical black lines spaced 100 pixels between them.
I placed this natural size X_SPRITE (scaling = 1) at the origin of the scene x = 0 z = 0 with downward movement to y = -240 (half its height)
I would have expected the positioning of the center of the sprite to correspond with the center of the axes but instead the result is as shown in figure 1
To obtain the positioning of the sprite centered on the axes I must instead move it down -120 as in figure 2
To justify the results obtained, the only logic that comes to mind is that the X_SPRITE is drawn not with scaling = 1 but instead with scaling = 0.5. that is, half of its size
This is my theory. I don't know if anything escapes me and I'm asking for your opinion  and your experience.
I didn't create this thread in BUG  just because I'm not sure it is
Thank you

Kitty Hello

IIRC - it's quite some time - the top coordinate for X_SPRITE is the top center of the sprite. Sort of - like the 2D SPRITE commands, but X centered.


I'm confused. the manual says about X_SPRITE:

"Draws a 2D sprite at a 3D position. This technique is also known as Billboarding. The hot spot of the sprite (the part which will be drawn at the give location) is the sprite's bottom center."

also if it were how you write:

"the top coordinate for X_SPRITE is the top center of the sprite. Sort of - like the 2D SPRITE commands, but X centered."

the behavior of the program would be completely inexplicable.
Have you tried the example attached?

Kitty Hello

Bottom center it is. Try x_drawaxis at the xyz of the sprite and use a texture thats power of 2 in size, if you think theres a bug....


tried with 512x256 same result.
The shift is consistent with 1/2 scaling instead of 1 as it should be.


Hi Quedo

As i am working on this project https://www.glbasic.com/forum/index.php?topic=11154.0 with X_SPRITE it seems at least here no issue
Time will come. It's just a matter of time...


Steinbock thanks for checking.
X_SPRITE works well except for the scaling parameter (in my opinion). Did you get to check it?

Kitty Hello

To me it seems to be working as exprected:
Code (glbasic) Select

SETCURRENTDIR("Media") // go to media files
LOADSPRITE "rect640x480.bmp", 0
CLEARSCREEN RGB(255,255,255)

LOCAL mx, my, b1, b2

MOUSESTATE mx, my, b1, b2

X_MAKE3D 1,1500,80
X_CAMERA 111,111,111, 0, 0, 0

LOCAL x = -3
LOCAL y = 7
LOCAL z = (-320 + mx) / 4.0
LOCAL scale = (480-my) / 640 + 0.25

X_SPRITE 0, x,y,z, scale


I tried it, but in your example you move X_SPRITE on the Z axis with the movement of the mouse "mx" and the scale of X_SPRITE with the mouse "my" and it is therefore difficult if not impossible to verify if scaling is correct. Instead in my example I blocked X_SPRITE and the room that are relieved and I only made the movement on the Y axis of X_SPRITE. Have you tried it?
For the rest X_SPRITE works fine but in any case in my program I am using XSPRITE routine as an alternative