private void renderARWorld(float[] targetPose, float[] projectionMatrix, int viewId, int[] viewport, boolean isARObjectVisible) {
int vbVideoTextureUnit = 0;
// Bind the video bg texture and get the Texture ID from Vuforia
GLTextureUnit tex = new GLTextureUnit();
tex.setTextureUnit(vbVideoTextureUnit);
if (viewId != VIEW.VIEW_RIGHTEYE )
{
if (!Renderer.getInstance().updateVideoBackgroundTexture(tex))
{
Log.e(LOGTAG, "Unable to bind video background texture");
return;
}
}
renderVideoBackground(viewId, viewport, vbVideoTextureUnit);
GLES20.glClear(GLES20.GL_DEPTH_BUFFER_BIT);
GLES20.glEnable(GLES20.GL_DEPTH_TEST);
GLES20.glEnable(GLES20.GL_CULL_FACE);
GLES20.glCullFace(GLES20.GL_BACK);
// Check if the viewer is active and set a scissor test to clip the augmentation to be constrained inside of the video background
if(Device.getInstance().isViewerActive()) {
float sceneScaleFactor = getSceneScaleFactor(viewId);
Matrix.scaleM(projectionMatrix, 0, sceneScaleFactor, sceneScaleFactor, 1.0f);
}
// If target detected render the augmentation
if (isARObjectVisible) {
if (Renderer.getInstance().getVideoBackgroundConfig().getReflection() == VIDEO_BACKGROUND_REFLECTION.VIDEO_BACKGROUND_REFLECTION_ON)
GLES20.glFrontFace(GLES20.GL_CW); // Front camera
else
GLES20.glFrontFace(GLES20.GL_CCW); // Back camera
float[] modelViewProjection = new float[16];
// deal with the modelview and projection matrices
/*Matrix.rotateM(targetPose, 0, 90, 1.0f, 0.0f, 0.0f);
Matrix.translateM(targetPose, 0, 0.0f, 0.0f,
AR_OBJECT_SCALE_FLOAT);
Matrix.scaleM(targetPose, 0, AR_OBJECT_SCALE_FLOAT,
AR_OBJECT_SCALE_FLOAT, AR_OBJECT_SCALE_FLOAT);*/
Matrix.translateM(targetPose, 0, 0.0f, 0.0f,
0.0f);
Matrix.scaleM(targetPose, 0, AR_OBJECT_SCALE_FLOAT, AR_OBJECT_SCALE_FLOAT, 0.0f);
Matrix.multiplyMM(modelViewProjection, 0, projectionMatrix, 0, targetPose, 0);
GLES20.glUseProgram(shaderProgramID);
GLES20.glVertexAttribPointer(vertexHandle, 3, GLES20.GL_FLOAT, false, 0, mPlane.getVertices());
GLES20.glVertexAttribPointer(normalHandle, 3, GLES20.GL_FLOAT, false, 0, mPlane.getNormals());
GLES20.glVertexAttribPointer(textureCoordHandle, 2, GLES20.GL_FLOAT, false, 0, mPlane.getTexCoords());
GLES20.glEnableVertexAttribArray(vertexHandle);
GLES20.glEnableVertexAttribArray(normalHandle);
GLES20.glEnableVertexAttribArray(textureCoordHandle);
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextures.get(0).mTextureID[0]);
GLES20.glUniform1i(texSampler2DHandle, 0);
// pass the model view matrix to the shader
GLES20.glUniformMatrix4fv(mvpMatrixHandle, 1, false,
modelViewProjection, 0);
GLES20.glDrawElements(GLES20.GL_TRIANGLES, mPlane.getNumObjectIndex(), GLES20.GL_UNSIGNED_SHORT, mPlane.getIndices());
// disable the enabled arrays
GLES20.glDisableVertexAttribArray(vertexHandle);
GLES20.glDisableVertexAttribArray(normalHandle);
GLES20.glDisableVertexAttribArray(textureCoordHandle);
//mMountainModelAR.render(targetPose, modelViewProjection);
}
if(Device.getInstance().isViewerActive())
{
GLES20.glDisable(GLES20.GL_SCISSOR_TEST);
}
}
< GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextures.get(0).mTextureID[0]); >
Attachment | Size |
---|---|
![]() | 105.07 KB |