www.jpct.net
jPCTAE  a 3d engine for Android => Support => Topic started by: cefengxu on October 27, 2015, 11:19:55 am

i have fix this issue , i will post a tutorial later.
Question: and then , the model could not be change ( always be laid on the mark ,as shown as the attached ) even i use the function rotationMatirx ;
my code as belown:
public void onDrawFrame(GL10 unused) {
float[] projection = ARNativeActivity.getProjectM();
Matrix projMatrix = new Matrix();
projMatrix.setDump(projection);
projMatrix.transformToGL();
SimpleVector translation = projMatrix.getTranslation();
SimpleVector dir = projMatrix.getZAxis();
SimpleVector up = projMatrix.getYAxis();
cam.setPosition(translation);
cam.setOrientation(dir, up);
float[] transformation = ARNativeActivity.getTransformationM();
Matrix dump = new Matrix();
dump.setDump(transformation);
dump.transformToGL();
alita.clearTranslation();
alita.translate(dump.getTranslation());
alita.setRotationMatrix(dump);
alita.setState(stat);
alita.animate(ticks);
}

Not sure what you mean...you set a rotation matrix and the model should rotate accordingly. I don't see any other code that applies additional rotations....or what do you mean exactly?

according to the links supplied from you , i can inject the code of JPCTAE into the ARToolkit's Project [ Example name : ARNative ].
JPCTAE using the Matrix( "Projection Matrix" and "Transformation Matrix" ) which output from ARToolkit to render a model on the mark successfully. the center , scale of model can match the mark in every case ( as the attached shown ), but , the model alway lie in the mark. .
I have tried to use the Matrix.rotateX/Y/Z( float x ) to rotate the model but still no work .( the model still lie in the mark )
public void onDrawFrame(GL10 unused) {
float[] projection_temp = ARNativeActivity.getProjectM();
Matrix temp1 = new Matrix();
temp1.setDump(projection_temp);
[color=green]temp1.rotateY((float)Math.PI/2); // the rotate have to be used for diff. matrix [ "Projection Matrix" and "Transformation Matrix" ] as the same time , otherwise, the model will miss[/color]
float[] projection = temp1.getDump();
Matrix projMatrix = new Matrix();
projMatrix.setDump(projection);
projMatrix.transformToGL();
SimpleVector translation = projMatrix.getTranslation();
SimpleVector dir = projMatrix.getZAxis();
SimpleVector up = projMatrix.getYAxis();
cam.setPosition(translation);
cam.setOrientation(dir, up);
float[] transformation_temp = ARNativeActivity.getTransformationM();
Matrix temp2 = new Matrix();
temp2.setDump(transformation_temp);
[color=green]temp2.rotateY((float)Math.PI/2); // the rotate have to be used for diff. matrix [ "Projection Matrix" and "Transformation Matrix" ] as the same time , otherwise, the model will miss[/color]
float[] transformation = temp2.getDump();
Matrix dump = new Matrix();
dump.setDump(transformation);
dump.transformToGL();
alita.clearTranslation();
alita.translate(dump.getTranslation());
alita.setRotationMatrix(dump);
alita.setState(stat);
alita.animate(ticks);
world.renderScene(fb);
world.draw(fb);
fb.display();
}

Well...applying the rotation after setting the rotation matrix should actually work. The other way won't work, because setting the matrix will reset all former rotations of the object. If you want to make the rotation permanent, you can rotate and then use rotateMesh() at load time...
I'm still not sure that I got your problem right...