Object3D rotation around another object

Started by aerosolswe, October 19, 2012, 02:42:42 AM

Previous topic - Next topic

aerosolswe

Hello.

So I am really new with jpct-ae (and only been programming for 1yr). I am currently working on my first app with it, so far loving it. But I've struggled with this task all night and I cant seem to get it work.

The game plays out in the solar system and atm I am making the planets orbit around the sun but I cant find a good way to do this. Tried some with sin and cos but nothing really worked.

So I am wondering if anyone else got some tips for me how I am suppose to do this.

Appreciate all the help and tips. Thanks.

EgonOlsen

You can set a dummy object (http://www.jpct.net/doc/com/threed/jpct/Object3D.html#createDummyObj()) in the sun's center (or one for each planet), make it a child of the planet and rotate the dummy around Y to make the planet orbit the sun.

aerosolswe

Thank you egon, I will have a go with that

phmenard

I took your advice and its not working ... I do this in
onSurfaceChanged()


center = Object3D.createDummyObj();
center.translate(sol[0].getTransformedCenter());
center.build();

earth[0].translate(0, 50, 0);
earth[0].setTexture("texture");
earth[0].addChild(center);


and in onDrawFrame()


center.rotateY(1f);


but nothing happends ... whats am I doing wrong?? the sol and earth objects are loaded obj models.

EgonOlsen

The earth should be the child of the center to make this work, not the other way.

phmenard

ok did that ... now the earth is just sitting there spinning rather that rotating around the center ... hmm ... any advice??

EgonOlsen

Sounds like as if you are rotating the earth now....create the center, maek earth a child of it and then rotate the center, not the earth.

phmenard

silly me ... works perfect ... just need to rotate on the z axis not the y. What's up with these dummy objects any way??? are they costly to have around?? ... example ... a model of our solar system would require 9 dummy objects to control the orbits of each planet given that they orbit and rotate at different speeds.0 ... would it be better to use some old school math???

kinda off topic but while I'm here ... is there a way to make an abject glow .. like a sun ... texture effect maybe??

thanks a bunch for your help EgonOlsen

EgonOlsen

Quote from: phmenard on September 10, 2013, 12:07:50 AM
... would it be better to use some old school math???
No. Dummy objects are cheap.

Quote from: phmenard on September 10, 2013, 12:07:50 AM
kinda off topic but while I'm here ... is there a way to make an abject glow .. like a sun ... texture effect maybe??
Maybe a glow texture with an alpha mask placed on a billboarded quad in the center of the sun will look good enough?

phmenard

ok thanks ... before I end this thread what would be the best way to go about making an elliptical orbit rather than a circle given the fact most planets don't orbit in a perfect circle ... I playing around with code like this but I'm not able to get it right.



SimpleVector sv = new SimpleVector();
sv.x = (float) (myOrbit.getTransformedCenter().x + Math.sin(myOrbitAngle*Math.PI/180) * Math.cos(myOrbitAngle*Math.PI/180));
sv.y = (float) (myOrbit.getTransformedCenter().y  + Math.sin(myOrbitAngle*Math.PI/180));// * Math.sin(.5));
//sv.z = (float) (myOrbit.getTransformedCenter().z  + Math.cos(myOrbitAngle*Math.PI/180));


myOrbitAngle += myOrbitSpeed; 

myObject.translate(sv);



EgonOlsen

Translations are cumulative. Try something like


myObject.clearTranslation();
myObject.translate(sv);


instead.

phmenard

using the method myObject.clearTranslation(); results in the object not being drawn for some reason ... I have this ..

SimpleVector sv = new SimpleVector();
 
myOrbitAngle += myOrbitSpeed;
        if(myOrbitAngle > Math.PI * 2)
        myOrbitAngle %= Math.PI * 2;

sv.x = (float) ((Math.cos(myOrbitAngle)) + myOrbit.getTransformedCenter().x);
sv.y = (float) ((Math.sin(myOrbitAngle)) +  myOrbit.getTransformedCenter().y);
    sv.z =  myOrbit.getTransformedCenter().z;

    //myObject.clearTranslation();
    myObject.translate(sv);


the planet clearly orbits in an elliptical fashion ... but not around it orbit center(myOrbit) I'm missing something ...

EgonOlsen

Shouldn't the sin and cos values being multiplied by some values? This way, your translation hovers around +-1 around the orbit's center!?

phmenard

I thought and seen the same thing ... so now I have this ..

SimpleVector sv = new SimpleVector();
 
myOrbitAngle += myOrbitSpeed;
        if(myOrbitAngle > Math.PI * 2)
        myOrbitAngle %= Math.PI * 2;

sv.z = (float) ((Math.cos(myOrbitAngle * distanceFromParent)) + myOrbit.getTransformedCenter().z);
sv.x = (float) ((Math.sin(myOrbitAngle * distanceFromParent)) +  myOrbit.getTransformedCenter().x);
    sv.y =  myOrbit.getTransformedCenter().y;

    //myObject.clearTranslation();
    myObject.translate(sv);


but still off center ... I'll get it ... lol

phmenard

#14
why is it that the following code will not orbit the orbitCenter ... instead its starts off ok but then dives right into orbitCenter and continues to do so ...

SimpleVector sv = new SimpleVector();
 
myOrbitAngle += myOrbitSpeed;
        if(myOrbitAngle > Math.PI * 2)
        myOrbitAngle %= Math.PI * 2;

        //float rad = (float) (myOrbitAngle * (Math.PI / 180)); // Converting Degrees To Radians
        sv.x = (float) (orbitCenter.x + distanceFromParent * Math.sin(myOrbitAngle));
        sv.z = (float) (orbitCenter.z + distanceFromParent * Math.cos(myOrbitAngle));

   


Log.w("pos", sv.toString() );
myObject.translate(sv);

myObject.rotateY(myOrbitSpeed);