GLBasic forum

Main forum => Tutorials => Topic started by: genbasic on 2010-Jun-18

Title: need help for my RPG style game
Post by: genbasic on 2010-Jun-18
hello all, i newbie here.

i create 3D RPG style game with glbasic.
the style is point n click movement, but still in progress now.
i got some problem with X_SCREEN2WORLD syntax.
i very clear at X_WORLD2SCREEN syntax, n i got right return value with that,
but not from X_SCREEN2WORLD syntax. this syntax give me wrong return value.

i know, X_WORLD2SCREEN syntax is for converts 3D coordinates to 2D screen coordinates, and
X_SCREEN2WORLD syntax for converts 2D screen coordinates to 3D coordinates.

only with X_SCREEN2WORLD syntax i got wrong return value. is that bug or what?
or maybie all of u have sample code for that? or alternative code or something?

pls help me...

thx

( sry for my bad english, i'm from indonesia  =D )
Title: Re: need help for my RPG style game
Post by: Kitty Hello on 2010-Jun-18
It should work. Make sure you call that after X_MAKE3D and after X_CAMERA.
Just perform an X_LINE with the coordinated returned to check if it's OK.
If not, make a small example program.
Title: Re: need help for my RPG style game
Post by: genbasic on 2010-Jun-18
Quote from: Kitty Hello on 2010-Jun-18
It should work. Make sure you call that after X_MAKE3D and after X_CAMERA.
Just perform an X_LINE with the coordinated returned to check if it's OK.
If not, make a small example program.

thx for reply.

here my sample source:

Code (glbasic) Select

//== INIT ==
GLOBAL mouse_stat_x,mouse_stat_y,mouse_stat_a,mouse_stat_b,screen_x,screen_y,screen_z
SETCURRENTDIR("Media")
//==========

//== TERRAIN ==
// terrain object
X_OBJSTART 0
f=RGB(255,255,255)
X_OBJADDVERTEX -2000,0,-2000,  0 ,0,f
X_OBJADDVERTEX  2000,0,-2000, 50, 0,f
X_OBJADDVERTEX -2000,0, 2000,  0,50,f
X_OBJADDVERTEX  2000,0, 2000, 50,50,f
X_OBJEND
// terrain texture
LOADSPRITE "gras.bmp", 0
//=============


//== MOUSE CURSOR IMAGE ==
LOADSPRITE "cursor.png", 1
//========================

//== 3d object - Sphere ==
CreateSphere(2, 5, 15, RGB(255, 0, 0));
//========================


//== MAIN LOOP ==
WHILE TRUE
//DRAWRECT 0,0,640,480,RGB(0,255,255)
X_MAKE3D 1, 1200, 45
X_CAMERA 100,100,100,0,0,0
X_DRAWAXES 0,0,0

//-- terrain --
X_MOVEMENT 0,0,0
X_SETTEXTURE 0, -1
X_DRAWOBJ 0,0

//-- put 3D object sphere for init coordinate
X_DRAWOBJ 2,0

//-- move 3D object Sphere at mouse XY [left click event]
// IF MOUSEAXIS(3)
// ENDIF

//-- get mouse stat --
MOUSESTATE mouse_stat_x,mouse_stat_y,mouse_stat_a,mouse_stat_b
//-- convert mouse screen coordinat to 3d world
X_SCREEN2WORLD mouse_stat_x,mouse_stat_y,0,screen_x,screen_y,screen_z

//-- 2D part --
X_MAKE2D

//-- text font output --
LOADFONT "font.png", 1
SETFONT 1
    PRINT "Screen XY : " + mouse_stat_x +"/"+mouse_stat_y, 0,  0
PRINT "3Dworld XY: "+INTEGER(screen_x)+"/"+INTEGER(screen_y)+"/"+INTEGER(screen_z), 0 ,15

//-- mouse cursor image -> move by mouse stat coordinate
ZOOMSPRITE 1,mouse_stat_x,mouse_stat_y,0.5,0.5

SHOWSCREEN
WEND
//===============

END


//== FUNCTION ==
FUNCTION CreateSphere: num, r, n, col
LOCAL i,j, theta1, theta2, theta3, pi
pi = ACOS(0)*2
IF r < 0 THEN r = -r
IF n < 3 THEN n = 3

X_OBJSTART num
FOR j=0 TO n/2-1

theta1 = j * 2*pi / n - pi/2;
theta2 = (j + 1) * 2*pi / n - pi/2;
FOR i=0 TO n
theta3 = i * 2*pi / n;
X_OBJADDVERTEX r*COS(theta2) * COS(theta3), r*SIN(theta2), _
r*COS(theta2) * SIN(theta3), i/n, 2*(j+1)/n, col
X_OBJADDVERTEX r*COS(theta1) * COS(theta3), r*SIN(theta1), _
r*COS(theta1) * SIN(theta3), i/n, 2*j/n, col
NEXT
X_OBJNEWGROUP
NEXT
X_OBJEND
ENDFUNCTION
//==============


picture:

(http://i45.tinypic.com/fjow21.gif)
Title: Re: need help for my RPG style game
Post by: genbasic on 2010-Jun-18
now i understand.

with "X_LINE" returned right value, thx for help  :D.

#at my sample above, i was use "print" to show value at 2D text, thats wrong way.

but...
thats coordinate not what i mean. i must get coordinat at 3D terrain, this is for target movement for my char object. maybie i must calc for that ( using Trigonometry, ach..  :'( )
Title: Re: need help for my RPG style game
Post by: Kitty Hello on 2010-Jun-24
After the SCREEN2WORLD use the gained vectors and do an X_COLLISIONRAY on the ground. You get the length of the "direction" from that point to the collision point. Then simply do:
mouse_pos_3d + mouse_z_direction * distance_to_collision
and you have the 3D point of the mesh under the mouse.
Title: Re: need help for my RPG style game
Post by: genbasic on 2010-Jun-25
Quote from: Kitty Hello on 2010-Jun-24
After the SCREEN2WORLD use the gained vectors and do an X_COLLISIONRAY on the ground. You get the length of the "direction" from that point to the collision point. Then simply do:
mouse_pos_3d + mouse_z_direction * distance_to_collision
and you have the 3D point of the mesh under the mouse.

thx for reply..

but i still not get it   :(, can u show sample code for that? ( full sample code if u mind  =D )

btw, here my game:
(http://i50.tinypic.com/23kp5e8.gif)

i used 3D object as mouse picking, but not from mouse XY screen coordinate  ;).
the problem is, how to pick 2D image on screen like inventory list,menu,spell,etc.
that why i realy need how to convert mouse xy screen to 3D world as mouse pick.

thx b4
Title: Re: need help for my RPG style game
Post by: Moru on 2010-Jun-25
You can't just convert 2D to 3D, you need to figure out where in the world your mousepointer is pointing. And this you do with X_COLLISIONRAY. There is an example with code in the help, look up the command X_COLLISIONRAY.