Gamestudio Links
Zorro Links
Newest Posts
loading historical data 1st time
by AndrewAMD. 04/14/23 12:54
Trade at bar open
by juanex. 04/13/23 19:43
Bug in Highpass2 filter
by rki. 04/13/23 09:54
Adding Limit Orders For IB
by scatters. 04/11/23 16:16
FisherN
by rki. 04/11/23 08:38
AUM Magazine
Latest Screens
SHADOW (2014)
DEAD TASTE
Tactics of World War I
Hecknex World
Who's Online Now
3 registered members (AndrewAMD, The_Judge, Grant), 898 guests, and 5 spiders.
Key: Admin, Global Mod, Mod
Newest Members
rki, FranzIII, indonesiae, The_Judge, storrealba
18919 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
draw_line and vec_to_screen has lag? #147176
08/10/07 22:50
08/10/07 22:50
Joined: Mar 2007
Posts: 677
0x00000USA
M
MrCode Offline OP
User
MrCode  Offline OP
User
M

Joined: Mar 2007
Posts: 677
0x00000USA
Well, not lag exactly, more like the opposite. I''ve written a small library of vector graphics functions for Lite-C (just for fun, ), and I have to different versions of my 3D functions, draw_cube and draw_rect3d, and draw_cubeproj and draw_rect3dproj.

If you move the camera while a draw_cubeproj or draw_rect3dproj is running, there is a noticeable difference between their draw_line3d counterparts: the cube seems to move one frame ahead of the rest of the level (this includes draw_cube and draw_rect3d functions).

here's the code (they're long, so this post is gonna be long):

Code:

void draw_cubeproj(float _x,float _y,float _z,VECTOR* color,var _alpha,var _mode)
{
while(1)
{
vec_set(point1,vector(-_x,-_y,-_z));
vec_set(point2,vector(-_x,-_y,_z));
vec_set(point3,vector(-_x,_y,_z));
vec_set(point4,vector(-_x,_y,-_z));
vec_set(point5,vector(_x,-_y,_z));
vec_set(point6,vector(_x,_y,_z));
vec_set(point7,vector(_x,_y,-_z));
vec_set(point8,vector(_x,-_y,-_z));
switch(_mode)
{
case 0:
dummy= 1;
case 1:
vec_rotate(point1,vector(0,90,0));
vec_rotate(point2,vector(0,90,0));
vec_rotate(point3,vector(0,90,0));
vec_rotate(point4,vector(0,90,0));
vec_rotate(point5,vector(0,90,0));
vec_rotate(point6,vector(0,90,0));
vec_rotate(point7,vector(0,90,0));
vec_rotate(point8,vector(0,90,0));
case 2:
vec_rotate(point1,vector(180,0,0));
vec_rotate(point2,vector(180,0,0));
vec_rotate(point3,vector(180,0,0));
vec_rotate(point4,vector(180,0,0));
vec_rotate(point5,vector(180,0,0));
vec_rotate(point6,vector(180,0,0));
vec_rotate(point7,vector(180,0,0));
vec_rotate(point8,vector(180,0,0));
case 3:
vec_rotate(point1,vector(180,90,0));
vec_rotate(point2,vector(180,90,0));
vec_rotate(point3,vector(180,90,0));
vec_rotate(point4,vector(180,90,0));
vec_rotate(point5,vector(180,90,0));
vec_rotate(point6,vector(180,90,0));
vec_rotate(point7,vector(180,90,0));
vec_rotate(point8,vector(180,90,0));
case 4:
vec_rotate(point1,vector(90,90,0));
vec_rotate(point2,vector(90,90,0));
vec_rotate(point3,vector(90,90,0));
vec_rotate(point4,vector(90,90,0));
vec_rotate(point5,vector(90,90,0));
vec_rotate(point6,vector(90,90,0));
vec_rotate(point7,vector(90,90,0));
vec_rotate(point8,vector(90,90,0));
case 5:
vec_rotate(point1,vector(-90,90,0));
vec_rotate(point2,vector(-90,90,0));
vec_rotate(point3,vector(-90,90,0));
vec_rotate(point4,vector(-90,90,0));
vec_rotate(point5,vector(-90,90,0));
vec_rotate(point6,vector(-90,90,0));
vec_rotate(point7,vector(-90,90,0));
vec_rotate(point8,vector(-90,90,0));
case 6:
vec_rotate(point1,vector(angle_z,angle_y,angle_x));
vec_rotate(point2,vector(angle_z,angle_y,angle_x));
vec_rotate(point3,vector(angle_z,angle_y,angle_x));
vec_rotate(point4,vector(angle_z,angle_y,angle_x));
vec_rotate(point5,vector(angle_z,angle_y,angle_x));
vec_rotate(point6,vector(angle_z,angle_y,angle_x));
vec_rotate(point7,vector(angle_z,angle_y,angle_x));
vec_rotate(point8,vector(angle_z,angle_y,angle_x));
angle_x+= 3 * time_step;
case 7:
vec_rotate(point1,vector(angle_z,angle_y,angle_x));
vec_rotate(point2,vector(angle_z,angle_y,angle_x));
vec_rotate(point3,vector(angle_z,angle_y,angle_x));
vec_rotate(point4,vector(angle_z,angle_y,angle_x));
vec_rotate(point5,vector(angle_z,angle_y,angle_x));
vec_rotate(point6,vector(angle_z,angle_y,angle_x));
vec_rotate(point7,vector(angle_z,angle_y,angle_x));
vec_rotate(point8,vector(angle_z,angle_y,angle_x));
angle_y+= 3 * time_step;
case 8:
vec_rotate(point1,vector(angle_z,angle_y,angle_x));
vec_rotate(point2,vector(angle_z,angle_y,angle_x));
vec_rotate(point3,vector(angle_z,angle_y,angle_x));
vec_rotate(point4,vector(angle_z,angle_y,angle_x));
vec_rotate(point5,vector(angle_z,angle_y,angle_x));
vec_rotate(point6,vector(angle_z,angle_y,angle_x));
vec_rotate(point7,vector(angle_z,angle_y,angle_x));
vec_rotate(point8,vector(angle_z,angle_y,angle_x));
angle_z+= 3 * time_step;
}
vec_to_screen(point1,camera);
vec_to_screen(point2,camera);
vec_to_screen(point3,camera);
vec_to_screen(point4,camera);
vec_to_screen(point5,camera);
vec_to_screen(point6,camera);
vec_to_screen(point7,camera);
vec_to_screen(point8,camera);
draw_line(point1,color,_alpha);
draw_line(point2,color,_alpha);
draw_line(point3,color,_alpha);
draw_line(point4,color,_alpha);
draw_line(point7,color,_alpha);
draw_line(point8,color,_alpha);
draw_line(point5,color,_alpha);
draw_line(point6,color,_alpha);
draw_line(point3,color,_alpha);
draw_line(point4,color,_alpha);
draw_line(point8,color,_alpha);
draw_line(point5,color,_alpha);
draw_line(point2,color,_alpha);
draw_line(point6,color,_alpha);
draw_line(point7,color,_alpha);
draw_line(point4,color,_alpha);
draw_line(point8,color,_alpha);
draw_line(point1,color,_alpha);
draw_line(point4,color,_alpha);
wait(1);
}
}

void draw_rect3dproj(int _posx,int _posy,int _posz,int _sizex,int _sizey,VECTOR* color,var _alpha,var _mode)
{
while(1)
{
vec_set(point1,vector(_posx,_posy,_posz));
vec_set(point2,vector(_posx + _sizex,_posy,_posz));
vec_set(point3,vector(_posx + _sizex,_posy + _sizey,_posz));
vec_set(point4,vector(_posx,_posy + _sizey,_posz));
switch(_mode)
{
case 0:
dummy= 1;
case 1:
vec_rotate(point1,vector(0,90,0));
vec_rotate(point2,vector(0,90,0));
vec_rotate(point3,vector(0,90,0));
vec_rotate(point4,vector(0,90,0));
case 2:
vec_rotate(point1,vector(180,0,0));
vec_rotate(point2,vector(180,0,0));
vec_rotate(point3,vector(180,0,0));
vec_rotate(point4,vector(180,0,0));
case 3:
vec_rotate(point1,vector(180,90,0));
vec_rotate(point2,vector(180,90,0));
vec_rotate(point3,vector(180,90,0));
vec_rotate(point4,vector(180,90,0));
case 4:
vec_rotate(point1,vector(90,90,0));
vec_rotate(point2,vector(90,90,0));
vec_rotate(point3,vector(90,90,0));
vec_rotate(point4,vector(90,90,0));
case 5:
vec_rotate(point1,vector(90,180,0));
vec_rotate(point2,vector(90,180,0));
vec_rotate(point3,vector(90,180,0));
vec_rotate(point4,vector(90,180,0));
case 6:
vec_rotate(point1,vector(angle_z,angle_y,angle_x));
vec_rotate(point2,vector(angle_z,angle_y,angle_x));
vec_rotate(point3,vector(angle_z,angle_y,angle_x));
vec_rotate(point4,vector(angle_z,angle_y,angle_x));
angle_x+= 3 * time_step;
case 7:
vec_rotate(point1,vector(angle_z,angle_y,angle_x));
vec_rotate(point2,vector(angle_z,angle_y,angle_x));
vec_rotate(point3,vector(angle_z,angle_y,angle_x));
vec_rotate(point4,vector(angle_z,angle_y,angle_x));
angle_y+= 3 * time_step;
case 8:
vec_rotate(point1,vector(angle_z,angle_y,angle_x));
vec_rotate(point2,vector(angle_z,angle_y,angle_x));
vec_rotate(point3,vector(angle_z,angle_y,angle_x));
vec_rotate(point4,vector(angle_z,angle_y,angle_x));
angle_z+= 3 * time_step;
}
vec_to_screen(point1,camera);
vec_to_screen(point2,camera);
vec_to_screen(point3,camera);
vec_to_screen(point4,camera);
draw_line(point1,color,_alpha);
draw_line(point2,color,_alpha);
draw_line(point3,color,_alpha);
draw_line(point4,color,_alpha);
draw_line(point1,color,_alpha);
wait(1);
}
}




Code:
void main()
{
    cout << "I am MrCode,";
    cout << "hear me roar!";
    system("PAUSE");
}
Re: draw_line and vec_to_screen has lag? [Re: MrCode] #147177
08/10/07 22:57
08/10/07 22:57
Joined: Oct 2006
Posts: 873
S
Shadow969 Offline
User
Shadow969  Offline
User
S

Joined: Oct 2006
Posts: 873
you may set proc_mode to PROC_LATE, or insert wait(1) into the cycle, not sure if it will help

Re: draw_line and vec_to_screen has lag? [Re: Shadow969] #147178
08/10/07 23:09
08/10/07 23:09
Joined: Mar 2007
Posts: 677
0x00000USA
M
MrCode Offline OP
User
MrCode  Offline OP
User
M

Joined: Mar 2007
Posts: 677
0x00000USA
PROC_LATE doesn't seem to help, and adding a wait(1); into it just makes it flicker.


Code:
void main()
{
    cout << "I am MrCode,";
    cout << "hear me roar!";
    system("PAUSE");
}
Re: draw_line and vec_to_screen has lag? [Re: MrCode] #147179
08/11/07 09:29
08/11/07 09:29
Joined: Jul 2006
Posts: 783
London, UK
sheefo Offline
User
sheefo  Offline
User

Joined: Jul 2006
Posts: 783
London, UK
Add a 'break' command in each case.

Re: draw_line and vec_to_screen has lag? [Re: sheefo] #147180
08/11/07 21:39
08/11/07 21:39
Joined: Mar 2007
Posts: 677
0x00000USA
M
MrCode Offline OP
User
MrCode  Offline OP
User
M

Joined: Mar 2007
Posts: 677
0x00000USA
except cases 6, 7, and 8, because I use those to rotate the simulated object around the axes (I #defined some flag keywords for each case, three of them being ROTATE_X/Y/Z).

EDIT: nope, still the reverse "lag".

Last edited by MrCode; 08/11/07 21:42.

Code:
void main()
{
    cout << "I am MrCode,";
    cout << "hear me roar!";
    system("PAUSE");
}
Re: draw_line and vec_to_screen has lag? [Re: MrCode] #147181
08/15/07 04:04
08/15/07 04:04
Joined: Mar 2007
Posts: 677
0x00000USA
M
MrCode Offline OP
User
MrCode  Offline OP
User
M

Joined: Mar 2007
Posts: 677
0x00000USA
I think I know why the reverse "lag" is occuring, and there's nothing I can do about it.

Since vec_to_screen is converting the 3D coords to 2D screen coords, it's drawing to certain pixel positions on the screen. Because of the "snap-to-grid" nature of it, it will appear as if the projection is moving ahead of the rest of the level, because it's moving with the screen coords, which are faster, because of the snapping to the grid phenomenon.

I hope I've made sense, .


Code:
void main()
{
    cout << "I am MrCode,";
    cout << "hear me roar!";
    system("PAUSE");
}
Re: draw_line and vec_to_screen has lag? [Re: MrCode] #147182
12/08/07 12:07
12/08/07 12:07
Joined: Nov 2004
Posts: 862
Australia
DavidLancaster Offline
User
DavidLancaster  Offline
User

Joined: Nov 2004
Posts: 862
Australia
Lite c is driving me insane right now:

Code:

vec_set(my.x,vector(target_ent.x,target_ent.y,target_ent.z + (target_ent.max_z/2)));
result2 = vec_dist(my.x,camera.x) - 50;
vec_diff(temp.x,camera.x,my.x);
vec_normalize(temp.x,result2);
vec_add(my.x,temp.x);



I've tried millions of ways to do this, to keep this object 50 quants from the camera, ie a target image being displayed on screen over an entity, works perfectly in c-script but in lite-c there is always this horrible horrible lag, it happens with that code, vec_diff, vec_dist, camera.x, and it happens when I use vec_for_screen and vec_to_screen.

Any ideas?


Moderated by  HeelX, Lukas, rayp, Rei_Ayanami, Superku, Tobias, TWO, VeT 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1