1 registered members (AndrewAMD),
1,403
guests, and 6
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
Wie kann ich eine Entity um einen Punkt drehen?
#378505
07/24/11 13:15
07/24/11 13:15
|
Joined: Feb 2006
Posts: 86
PlayStefan
OP
Junior Member
|
OP
Junior Member
Joined: Feb 2006
Posts: 86
|
Hallo,
wie kann ich eine Entity um einen bestimmten Punkt herum drehen, d.h. nicht um die eigene Achse? Die Entity würde sich ja dann quasi in einem Kreis um diesen Punkt bewegen.
Meines Erachtens sollte das doch mit irgendeiner der vielen "rotate"-Funktionen (ang_rotate, vec_rotate, c_rotate, ...) gehen oder liege ich da falsch.
Hintergrund: Ich versuche mich daran den Rubik´s Cube zu programmieren und versuche mit einem Würfelmodel auszukommen, das ich wiederum 27 mal lade um so den Würfel aufzubauen. Beim Drehen muss ich dann natürlich die einzelnen Steine um die Mitte des Würfels drehen und genau das funktioniert nicht so, wie ich mir das gedacht habe.
Bitte um Hilfe.
Mfg, PlayStefan <img src="/ubbthreads/images/graemlins/smile.gif" alt="" />
|
|
|
Re: Wie kann ich eine Entity um einen Punkt drehen?
[Re: PlayStefan]
#378508
07/24/11 13:31
07/24/11 13:31
|
Joined: Feb 2011
Posts: 135
Myrkling
Member
|
Member
Joined: Feb 2011
Posts: 135
|
So zum Beispiel:
#include <acknex.h>
void main() {
level_load(NULL);
ENTITY *sun = ent_create(SPHERE_MDL, vector(100,0,0), NULL);
ENTITY *earth = ent_create(SPHERE_MDL, NULLVECTOR, NULL);
var earth_pan = 0, earth_dist = 50;
while (1) {
vec_set(earth.x, vector(earth_dist,0,0));
vec_rotate(earth.x, vector(earth_pan,0,0));
vec_add(earth.x, sun.x);
earth_pan += 4*time_step;
wait(1);
}
}
Einfach mal kopieren und kompilieren, dann siehst und verstehst du vermutlich, wie es funktioniert.
|
|
|
Re: Wie kann ich eine Entity um einen Punkt drehen?
[Re: Myrkling]
#378520
07/24/11 15:23
07/24/11 15:23
|
Joined: Feb 2006
Posts: 86
PlayStefan
OP
Junior Member
|
OP
Junior Member
Joined: Feb 2006
Posts: 86
|
Vielen Dank! Das hilft mir erstmal weiter.
Mfg, PlayStefan <img src="/ubbthreads/images/graemlins/smile.gif" alt="" />
|
|
|
Re: Wie kann ich eine Entity um einen Punkt drehen?
[Re: Myrkling]
#378699
07/25/11 20:06
07/25/11 20:06
|
Joined: Feb 2006
Posts: 86
PlayStefan
OP
Junior Member
|
OP
Junior Member
Joined: Feb 2006
Posts: 86
|
Hallo, ich bins nochmal. Ich verwende nun den folgenden Code...
while( 1 )
{
vec_set( mittelsteinOrange.x, vector( -steinAbstand, 0, 0 ) );
vec_rotate( mittelsteinOrange.x, gelenk.pan );
vec_to_angle( mittelsteinOrange.pan, vec_diff( NULL, gelenk.x, mittelsteinOrange.x ) );
vec_set( mittelsteinRot.x, vector( steinAbstand, 0, 0 ) );
vec_rotate( mittelsteinRot.x, gelenk.pan );
vec_to_angle( mittelsteinRot.pan, vec_diff( NULL, gelenk.x, mittelsteinRot.x ) );
gelenk.pan += time_step*4;
wait( 1 );
}
Der Code funktioniert super und die beiden Steine drehen sich korrekt im "pan"-Winkel um den Mittelstein herum. Durch das Hinzufügen des vec_to_angle Befehls sorge ich noch zusätzlich dafür, dass die Steine den Mittelstein anschauen; auch das klappt soweit. Ändere ich nun die Zeile...
gelenk.pan += time_step*4;
wie folgt...
gelenk.tilt+= time_step*4;
dann drehen sich die beiden Steine wieder korrekt um den Mittelstein, diesmal natürlich im "tilt"-Winkel. Jedoch habe ich nun folgendes Problem: Cube ProblemAus irgendeinem mir derzeit nicht zu erklärendem Grund ändern sich die Farben der drehenden Würfel sobald diese über dem Mittelstein stehen - die Steine scheinen sich in diesem Moment um 180 Grad zu drehen. Drehe ich um den "pan"-Winkel tritt dieses Problem nicht auf. Kann mir hier bitte noch einmal jemand helfen? Ich hoffe das Bild verdeutlichen mein Problem ausreichend.
Last edited by BigFaischty; 07/25/11 20:11.
Mfg, PlayStefan <img src="/ubbthreads/images/graemlins/smile.gif" alt="" />
|
|
|
Re: Wie kann ich eine Entity um einen Punkt drehen?
[Re: Joey]
#378718
07/25/11 21:51
07/25/11 21:51
|
Joined: Feb 2006
Posts: 86
PlayStefan
OP
Junior Member
|
OP
Junior Member
Joined: Feb 2006
Posts: 86
|
Ich muss zugeben, dass habe ich jetzt nicht ganz verstanden.
Also der "pan"-Winkel des drehenden Steins wechselt in dem Moment, wo das Problem auftritt sofort von 0 auf 180, das habe ich mir vorhin ausgeben lassen. Ich habe schon versucht darauf irgendwie zu reagieren, aber irgendwie bin ich zu doof.
Mfg, PlayStefan <img src="/ubbthreads/images/graemlins/smile.gif" alt="" />
|
|
|
Re: Wie kann ich eine Entity um einen Punkt drehen?
[Re: Pappenheimer]
#378796
07/26/11 15:49
07/26/11 15:49
|
Joined: Feb 2006
Posts: 86
PlayStefan
OP
Junior Member
|
OP
Junior Member
Joined: Feb 2006
Posts: 86
|
Danke für den Tipp! Aber ich habe es eben tatsächlich nach erneutem rumfummeln hinbekommen und das mit relativ wenig Code. Für Interessierte hier nun der Code, der bei allen Winkeln (pan, tilt, roll) funktioniert:
#include <acknex.h>
#include <default.c>
function main()
{
level_load("level/cube.wmb");
var cube_dist = 16.1;
ENTITY* center = ent_create("model/cube.mdl", nullvector, NULL);
ENTITY* cube01 = ent_create("model/cube.mdl", nullvector, NULL);
ENTITY* cube02 = ent_create("model/cube.mdl", nullvector, NULL);
while (1)
{
vec_set(cube01.x, vector(cube_dist,0,0));
vec_rotate(cube01.x, cube01.pan );
vec_set(cube02.x, vector(-cube_dist,0,0));
vec_rotate(cube02.x, cube01.pan );
// roll
// cube01.roll += 4*time_step;
// cube02.roll += 4*time_step;
//
// center.roll += 4*time_step;
// pan
// cube01.pan += 4*time_step;
// cube02.pan += 4*time_step;
//
// center.pan += 4*time_step;
// tilt
cube01.tilt += 4*time_step;
cube02.tilt += 4*time_step;
center.tilt += 4*time_step;
wait(1);
}
}
Mfg, PlayStefan <img src="/ubbthreads/images/graemlins/smile.gif" alt="" />
|
|
|
Moderated by mk_1, Perro, rayp, Realspawn, Rei_Ayanami, rvL_eXile, Spirit, Superku, Tobias, TSG_Torsten, VeT
|