2 registered members (AndrewAMD, juanex),
1,247
guests, and 6
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
Re: Winkelberechnungen
[Re: ventilator]
#362993
03/10/11 16:34
03/10/11 16:34
|
Joined: Jun 2006
Posts: 2,640 Earth
Germanunkol
Expert
|
Expert
Joined: Jun 2006
Posts: 2,640
Earth
|
Uuuuuund hier ist die version die wir oben wollten. Macht genau das gleiche wie die in der letzten post, nur eine angle rechnung weniger pro frame, und es macht's nach der art, die wir ursprünglich wollten:
void turningEnt()
{
my.scale_x = 2;
my.scale_y = 2;
my.scale_z= 2;
vec_randomize(temp, 50);
if(vec_length(temp) < 30) vec_normalize(temp, 30);
you = ent_create("blob.mdl", temp, NULL);
vec_set(you.pan, vector(random(360), random(360), random(360)));
you.scale_x = .6;
you.scale_y = you.scale_x;
you.scale_z = you.scale_x;
VECTOR dirRestore;
vec_diff(dirRestore, you.x, my.x);
vec_rotateback(dirRestore, my.pan);
VECTOR angRestore;
ang_diff(angRestore, you.pan, my.pan);
angRestore.x -= my.pan;
angRestore.y -= my.tilt;
angRestore.z -= my.roll;
while(key_i == OFF) wait(1);
while(my)
{
my.pan += (key_cul-key_cur)*time_step*6;
my.tilt += (key_cuu-key_cud)*time_step*6;
vec_set(temp, dirRestore);
vec_rotate(temp, my.pan);
vec_set(you.x, temp);
vec_set(you.pan, my.pan);
ang_rotate(you.pan, angRestore);
wait(1);
}
}
ang_diff und ang_rotate warn schon richtig, nur musste ventilator's vec_rotateback noch rein - allerdings in angle form. Ich hab das mit: angRestore.x -= my.pan; angRestore.y -= my.tilt; angRestore.z -= my.roll; gemacht. Find die version schöner. ^^
~"I never let school interfere with my education"~ -Mark Twain
|
|
|
Re: Winkelberechnungen
[Re: Germanunkol]
#363000
03/10/11 17:01
03/10/11 17:01
|
Joined: May 2002
Posts: 7,441
ventilator
Senior Expert
|
Senior Expert
Joined: May 2002
Posts: 7,441
|
#include <acknex.h>
void cube2()
{
vec_set(my.pan, vector(random(360), random(360), random(360)));
vec_set(my.scale_x, vector(0.5, 0.5, 2));
VECTOR position_offset;
ANGLE angle_offset;
vec_set(position_offset, my.x);
vec_to_ent(position_offset, you);
ang_diff(angle_offset, my.pan, you.pan);
while(1)
{
vec_set(my.x, position_offset);
vec_rotate(my.x, you.pan);
vec_add(my.x, you.x);
vec_set(my.pan, you.pan);
ang_rotate(my.pan, angle_offset);
wait(1);
}
}
void cube1()
{
vec_set(my.pan, vector(random(360), random(360), random(360)));
ent_create(CUBE_MDL, vector(100, 0, 20), cube2);
while(1)
{
vec_add(my.pan, vector(2 * time_step, 0.5 * time_step, time_step));
wait(1);
}
}
void main()
{
randomize();
level_load("");
ent_create(CUBE_MDL, vector(100, 0, 0), cube1);
}
hm... bei mir scheint es so zu funktionieren. hab es aber nur ganz kurz getestet.
|
|
|
Re: Winkelberechnungen
[Re: ventilator]
#363008
03/10/11 17:37
03/10/11 17:37
|
Joined: Mar 2002
Posts: 154 Zschornewitz, Sachsen-Anhalt, ...
IngoS.
OP
Member
|
OP
Member
Joined: Mar 2002
Posts: 154
Zschornewitz, Sachsen-Anhalt, ...
|
...nun aber doch, Ventilator dein Code macht genau den Fehler den ich meine. Schau mal was ich gemacht habe, ich habe den Start verzögert, damit du siehst das sobald die rotation beginnt cube2 nicht mehr auf dem winkel ist den er sollte.
#include <acknex.h>
var vStart=0;
void cube2()
{
vec_set(my.pan, vector(random(360), random(360), random(360)));
vec_set(my.scale_x, vector(0.5, 0.5, 2));
VECTOR position_offset;
ANGLE angle_offset;
vec_set(position_offset, my.x);
vec_to_ent(position_offset, you);
ang_diff(angle_offset, my.pan, you.pan);
while(!vStart){wait(1);}
while(1)
{
vec_set(my.x, position_offset);
vec_rotate(my.x, you.pan);
vec_add(my.x, you.x);
vec_set(my.pan, you.pan);
ang_rotate(my.pan, angle_offset);
wait(1);
}
}
void cube1()
{
vec_set(my.pan, vector(random(360), random(360), random(360)));
ent_create(CUBE_MDL, vector(100, 0, 20), cube2);
wait(-3);
vStart=1;
while(1)
{
vec_add(my.pan, vector(2 * time_step, 0.5 * time_step, time_step));
wait(1);
}
}
void main()
{
randomize();
level_load("");
ent_create(CUBE_MDL, vector(100, 0, 0), cube1);
}
|
|
|
Re: Winkelberechnungen
[Re: ventilator]
#363034
03/10/11 18:31
03/10/11 18:31
|
Joined: May 2002
Posts: 7,441
ventilator
Senior Expert
|
Senior Expert
Joined: May 2002
Posts: 7,441
|
void cube2()
{
vec_set(my.pan, vector(random(360), random(360), random(360)));
vec_set(my.scale_x, vector(0.5, 0.5, 2));
VECTOR position_offset;
ANGLE angle_offset;
vec_set(position_offset, my.x);
vec_to_ent(position_offset, you);
ang_diff(angle_offset, my.pan, you.pan);
vec_set(my.pan, you.pan);
ang_rotate(my.pan, angle_offset);
while(!vStart){wait(1);}
while(1)
{
vec_set(my.x, position_offset);
vec_rotate(my.x, you.pan);
vec_add(my.x, you.x);
vec_set(my.pan, you.pan);
ang_rotate(my.pan, angle_offset);
wait(1);
}
}
so funktioniert es, aber ich verstehe nicht wieso. müsste ich genau debuggen.
|
|
|
Re: Winkelberechnungen
[Re: IngoS.]
#363045
03/10/11 19:00
03/10/11 19:00
|
Joined: Jun 2006
Posts: 2,640 Earth
Germanunkol
Expert
|
Expert
Joined: Jun 2006
Posts: 2,640
Earth
|
Uhm. Ingo, was funktioniert denn an meinem code nicht? Ich hab keine verzögerung drin... und es is getestet, es funktioniert. BEIDE versionen sogar..?
~"I never let school interfere with my education"~ -Mark Twain
|
|
|
|