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);
}
}