我知道我要问的内容有时已经讨论过,但经过所有这些后我找不到完整答案,所以我问了一个新问题
当我尝试将JPCT-ae与QCAR集成时,一切顺利,我从jni的renderframe中获取了我的模型视图矩阵,并成功地将其转换为java中的jpct模型,如预期般完美展示。但当我试图将这个矩阵传递给JPCT世界相机时,我的模型就消失了。
我的代码:onsurfacechanged:
world = new World();
world.setAmbientLight(20, 20, 20);
sun = new Light(world);
sun.setIntensity(250, 250, 250);
cube = Primitives.getCube(1);
cube.calcTextureWrapSpherical();
cube.strip();
cube.build();
world.addObject(cube);
cam = world.getCamera();
cam.moveCamera(Camera.CAMERA_MOVEOUT, 10);
cam.lookAt(cube.getTransformedCenter());
SimpleVector sv = new SimpleVector();
sv.set(cube.getTransformedCenter());
sv.y -= 100;
sv.z -= 100;
sun.setPosition(sv);
MemoryHelper.compact();
并在提取中:
com.threed.jpct.Matrix mResult = new com.threed.jpct.Matrix();
mResult.setDump(modelviewMatrix ); //modelviewMatrix i get from Qcar
cube.setRotationMatrix(mResult);
cam.setBack(mResult);
fb.clear(back);
world.renderScene(fb);
world.draw(fb);
fb.display();
经过一些研究,我发现QCAR使用右手坐标系,意味着X正向右,Y正向上,Z正向出屏,但在JPCT坐标系中,X正向右, Y正面下降,Z正面进入屏幕。
Qcar坐标系:
我知道矩阵QCar给出的是具有3 * 3旋转值和平移向量的4×4矩阵。
我发布的矩阵更清晰:
modelviewmatrix:
1.512537 -159.66255 -10.275316 0.0
-89.86529 -1.1592013 4.7839375 0.0
-8.619186 10.179538 -159.44305 0.0
59.182976 93.205956 437.2832 1.0
使用cam.setBack(modelviewmatrix.invert(modelviewmatrix))反转后的modelviewmatrix:
5.9083453E-5 -0.01109448 -3.3668696E-4 0.0
0.0040540528 -3.8752193E-4 0.0047518034 0.0
-0.004756433 -4.6811014E-4 0.0040459237 0.0
0.7533285 0.4116795 2.7063704 0.9999999
如果我删除13,14和15矩阵元素假设3 * 3旋转矩阵...模型正确旋转但是平移(图像的进出运动)不存在 最后我不知道翻译矢量需要什么变化。 所以请建议我在这里缺少什么?
答案 0 :(得分:0)
QCAR::Matrix44F inverseMatrix = SampleMath::Matrix44FInverse(modelViewMatrix);
QCAR::Matrix44F invTransposeMatrix = SampleMath::Matrix44FTranspose(inverseMatrix);
然后将invTransposeMatrix
值传递给java
env->SetFloatArrayRegion(modelviewArray, 0, 16, invTransposeMatrix.data);
env->CallVoidMethod(obj, method, modelviewArray);