Here, have a little sample that shows how you might calculate the rotation.
package info.flowersoft.collisionproblemtext;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import com.threed.jpct.Camera;
import com.threed.jpct.FrameBuffer;
import com.threed.jpct.GLSLShader;
import com.threed.jpct.IRenderHook;
import com.threed.jpct.Light;
import com.threed.jpct.Object3D;
import com.threed.jpct.RGBColor;
import com.threed.jpct.SimpleVector;
import com.threed.jpct.World;
import com.threed.jpct.util.ExtendedPrimitives;
import android.support.v7.app.ActionBarActivity;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
public class MainActivity extends ActionBarActivity {
GLSurfaceView view;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportActionBar().hide();
view = new GLSurfaceView(this);
view.setEGLContextClientVersion(2);
view.setRenderer(new GLSurfaceView.Renderer() {
private World world;
private FrameBuffer buffer;
private Object3D sprite;
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
world = new World();
world.getCamera().moveCamera(Camera.CAMERA_MOVEIN, 1);
world.getCamera().setOrientation(new SimpleVector(0, 1, 1), new SimpleVector(0, -1, 1));
world.getCamera().moveCamera(Camera.CAMERA_MOVEOUT, 10);
world.getCamera().moveCamera(Camera.CAMERA_MOVELEFT, 5);
Light light = new Light(world);
light.setPosition(new SimpleVector(0, -50, 0));
Object3D plane = ExtendedPrimitives.createPlane(10);
plane.rotateZ(0.01f);
world.addObject(plane);
sprite = ExtendedPrimitives.createSprite();
sprite.setAdditionalColor(RGBColor.BLACK);
sprite.setLighting(Object3D.LIGHTING_NO_LIGHTS);
sprite.scale(2);
sprite.setBillboarding(Object3D.BILLBOARDING_DISABLED);
sprite.setRenderHook(new IRenderHook() {
@Override
public void setTransparency(float transparency) {
}
@Override
public void setCurrentShader(GLSLShader shader) {
}
@Override
public void setCurrentObject3D(Object3D obj) {
SimpleVector dir = world.getCamera().getPosition().calcSub(obj.getTransformedCenter());
dir.y = 0;
dir = dir.normalize();
dir.scalarMul(-1);
SimpleVector up = new SimpleVector(0, -1, 0);
obj.setOrientation(dir, up);
}
@Override
public boolean repeatRendering() {
return false;
}
@Override
public void onDispose() {
}
@Override
public void beforeRendering(int polyID) {
}
@Override
public void afterRendering(int polyID) {
}
});
world.addObject(sprite);
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
buffer = new FrameBuffer(width, height);
}
@Override
public void onDrawFrame(GL10 gl) {
world.getCamera().moveCamera(Camera.CAMERA_MOVERIGHT, 0.005f);
buffer.clear();
world.renderScene(buffer);
world.draw(buffer);
buffer.display();
}
});
setContentView(view);
}
}