Gamestudio Links
Zorro Links
Newest Posts
AlpacaZorroPlugin v1.3.0 Released
by kzhao. 05/22/24 13:41
Free Live Data for Zorro with Paper Trading?
by AbrahamR. 05/18/24 13:28
Change chart colours
by 7th_zorro. 05/11/24 09:25
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
1 registered members (bdgogo), 1,447 guests, and 7 spiders.
Key: Admin, Global Mod, Mod
Newest Members
AemStones, LucasJoshua, Baklazhan, Hanky27, firatv
19056 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
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 Offline OP
Junior Member
PlayStefan  Offline 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 Offline
Member
Myrkling  Offline
Member

Joined: Feb 2011
Posts: 135
So zum Beispiel:
Code:
#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 Offline OP
Junior Member
PlayStefan  Offline OP
Junior Member

Joined: Feb 2006
Posts: 86
Vielen Dank!

Das hilft mir erstmal weiter. laugh


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 Offline OP
Junior Member
PlayStefan  Offline OP
Junior Member

Joined: Feb 2006
Posts: 86
Hallo,

ich bins nochmal.

Ich verwende nun den folgenden Code...

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...

Code:
gelenk.pan += time_step*4;



wie folgt...

Code:
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 Problem

Aus 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: PlayStefan] #378708
07/25/11 21:07
07/25/11 21:07
Joined: Jan 2003
Posts: 4,615
Cambridge
Joey Offline
Expert
Joey  Offline
Expert

Joined: Jan 2003
Posts: 4,615
Cambridge
ich denke das liegt daran, dass Euler-Winkel nicht eindeutig sind. Die ganzen vec_...-Befehle benötigen vielleicht einen bestimmten Wertebereich. Hast du den mal nach unten ausgetestet? Wenns von -180° bis 180° geht, dann wär das Problem ja schon gelöst.

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 Offline OP
Junior Member
PlayStefan  Offline 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: PlayStefan] #378719
07/25/11 22:04
07/25/11 22:04
Joined: Sep 2003
Posts: 5,900
Bielefeld, Germany
Pappenheimer Offline
Senior Expert
Pappenheimer  Offline
Senior Expert

Joined: Sep 2003
Posts: 5,900
Bielefeld, Germany
Schau Dir das Folgende imManual genau an:

http://www.conitec.net/beta/avec_ang_add.htm

Es geht darum, dass die beliebige Drehung im Raum, die Du brauchst mit den Funktionen, die Du verwendest nicht erreichbar ist, sondern Du besondere Funktionen dafür brauchst, nämlich z.B. die in dem Link beschriebenen.

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 Offline OP
Junior Member
PlayStefan  Offline 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:

Code:
#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="" />

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