Как правильно использовать собственный 3D-объект в Vuforia без Unity?
Я использую Vuforia и jPCT(для рендеринга 3D OBJ) в своем приложении AR. Образец Vuforia прекрасно работает с Teapot и Cube. Но когда я пытаюсь заменить примитивные объекты своим собственным 3D-объектом, объект не отображается. библиотека движков лучше всего подходит для Vuforia?
public UserDefinedTargetRenderer2(UserDefinedTargets activity,
SampleApplicationSession session, AssetManager assets)
{
mActivity = activity;
vuforiaAppSession = session;
// SampleAppRenderer used to encapsulate the use of RenderingPrimitives setting
// the device mode AR/VR and stereo mode
mSampleAppRenderer = new SampleAppRenderer(this, mActivity, Device.MODE.MODE_AR, false, 10f, 5000f);
mAssets = assets;
InputStream objStream = null;
InputStream objMtlStream = null;
try {
objStream = mAssets.open("model.obj");
objMtlStream = mAssets.open("materials.mtl");
} catch (IOException e) {
e.printStackTrace();
}
Object3D[] object3DS = Loader.loadOBJ(objStream, objMtlStream, 100f);
obj = Object3D.mergeAll(object3DS);
world = new World();
world.setAmbientLight(20, 20, 20);
sun = new Light(world);
sun.setIntensity(250, 250, 250);
obj.strip();
obj.build();
cam = world.getCamera();
cam.moveCamera(Camera.CAMERA_MOVEOUT, 50);
cam.lookAt(obj.getTransformedCenter());
SimpleVector sv = new SimpleVector();
sv.set(obj.getTransformedCenter());
sv.y -= 100;
sv.z -= 100;
sun.setPosition(sv);
MemoryHelper.compact();
}
Как правильно использовать собственный 3D-объект в Vuforia?
public void renderFrame(State state, float[] projectionMatrix)
{
// Renders video background replacing Renderer.DrawVideoBackground()
mSampleAppRenderer.renderVideoBackground();
GLES20.glEnable(GLES20.GL_DEPTH_TEST);
GLES20.glEnable(GLES20.GL_CULL_FACE);
// Render the RefFree UI elements depending on the current state
mActivity.refFreeFrame.render();
// Did we find any trackables this frame?
for (int tIdx = 0; tIdx < state.getNumTrackableResults(); tIdx++)
{
// Get the trackable:
TrackableResult trackableResult = state.getTrackableResult(tIdx);
Matrix44F modelViewMatrix_Vuforia = Tool
.convertPose2GLMatrix(trackableResult.getPose());
float[] modelViewMatrix = modelViewMatrix_Vuforia.getData();
float[] modelViewProjection = new float[16];
android.opengl.Matrix.translateM(modelViewMatrix, 0, 0.0f, 0.0f, kObjectScale);
android.opengl.Matrix.scaleM(modelViewMatrix, 0, kObjectScale, kObjectScale,
kObjectScale);
android.opengl.Matrix.multiplyMM(modelViewProjection, 0, projectionMatrix, 0, modelViewMatrix, 0);
GLES20.glUseProgram(shaderProgramID);
Matrix m = new Matrix();
m.setDump(modelViewMatrix);
cam.setBack(m);
/*GLES20.glVertexAttribPointer(vertexHandle, 3, GLES20.GL_FLOAT,
false, 0, mTeapot.getVertices());
GLES20.glVertexAttribPointer(textureCoordHandle, 2,
GLES20.GL_FLOAT, false, 0, mTeapot.getTexCoords());
GLES20.glEnableVertexAttribArray(vertexHandle);
GLES20.glEnableVertexAttribArray(textureCoordHandle);
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D,
mTextures.get(0).mTextureID[0]);
GLES20.glUniformMatrix4fv(mvpMatrixHandle, 1, false,
modelViewProjection, 0);
GLES20.glUniform1i(texSampler2DHandle, 0);
GLES20.glDrawElements(GLES20.GL_TRIANGLES,
mTeapot.getNumObjectIndex(), GLES20.GL_UNSIGNED_SHORT,
mTeapot.getIndices());
GLES20.glDisableVertexAttribArray(vertexHandle);
GLES20.glDisableVertexAttribArray(textureCoordHandle);
SampleUtils.checkGLError("UserDefinedTargets renderFrame");*/
}
GLES20.glDisable(GLES20.GL_DEPTH_TEST);
Renderer.getInstance().end();
}
Мой полный код: https://gist.github.com/rramprasad/4d5f2183703301e68dcd69a2fc75657a