/** Called to draw the current frame. */ public void onDrawFrame(IGL10 gl) { if (!IsActive) { return; } gl.GlClear(GL10.GlColorBufferBit | GL10.GlDepthBufferBit); // Call our native function to render camera content RecognitionFragment.RenderCamera(ViewportWidth, ViewportHeight, Angle); float[] mvpMatrix = new float[16]; if (computeModelViewProjectionMatrix(mvpMatrix)) { if (monkeyMesh != null && monkeyMesh.MeshLoaded) { if (monkeyMesh.GLLoaded) { //draw our 3d mesh on top of the marker monkeyMesh.DrawMesh(mvpMatrix); } else { monkeyMesh.InitMeshGL(); } RenderUtils.CheckGLError("completed Monkey head Render"); } } gl.GlFinish(); }
public void OnDrawFrame(IGL10 gl) { // 清除屏幕缓存和深度缓存 gl.GlClear(GL10.GlColorBufferBit | GL10.GlDepthBufferBit); // 启用顶点坐标数据 gl.GlEnableClientState(GL10.GlVertexArray); // 启用贴图坐标数组数据 gl.GlEnableClientState(GL10.GlTextureCoordArray); // ① // 设置当前矩阵模式为模型视图。 gl.GlMatrixMode(GL10.GlModelview); gl.GlLoadIdentity(); // 把绘图中心移入屏幕2个单位 gl.GlTranslatef(0f, 0.0f, -2.0f); // 旋转图形 gl.GlRotatef(ma.angleY, 0, 1, 0); gl.GlRotatef(ma.angleX, 1, 0, 0); // 设置顶点的位置数据 gl.GlVertexPointer(3, GL10.GlFloat, 0, cubeVerticesBuffer); // 设置贴图的坐标数据 gl.GlTexCoordPointer(2, GL10.GlFloat, 0, cubeTexturesBuffer); // ② // 执行纹理贴图 gl.GlBindTexture(GL10.GlTexture2d, texture); // ③ // 按cubeFacetsBuffer指定的面绘制三角形 gl.GlDrawElements(GL10.GlTriangles, cubeFacetsBuffer.Remaining(), GL10.GlUnsignedByte, cubeFacetsBuffer); // 绘制结束 gl.GlFinish(); // 禁用顶点、纹理坐标数组 gl.GlDisableClientState(GL10.GlVertexArray); gl.GlDisableClientState(GL10.GlTextureCoordArray); // 递增角度值以便每次以不同角度绘制 }
/** Called to draw the current frame. */ public void onDrawFrame(IGL10 gl) { if (!IsActive) { return; } gl.GlClear(GL10.GlColorBufferBit | GL10.GlDepthBufferBit); // Call our native function to render camera content GeoFragment.RenderCamera(ViewportWidth, ViewportHeight, Angle); gl.GlFinish(); }
/** Called to draw the current frame. */ public void OnDrawFrame(IGL10 gl) { if (!IsActive) { return; } gl.GlClear(GL10.GlColorBufferBit | GL10.GlDepthBufferBit); // Call our native function to render camera content RecognitionFragment.RenderCamera(ViewportWidth, ViewportHeight, Angle); if (RecognitionFragment.IsTracking) { Marker currentMarker = RecognitionFragment.CurrentMarker; //Here we decide which 3d object to draw and we draw it if (currentMarker.Id.CompareTo("3_522") == 0) { float[] mvMatrix = new float[16]; float[] pMatrix = new float[16]; if (ComputeModelViewProjectionMatrix(mvMatrix, pMatrix)) { if (videoMesh != null && videoMesh.MeshLoaded) { if (videoMesh.GLLoaded) { videoMesh.DrawMesh(mvMatrix, pMatrix); } else { videoMesh.InitMeshGL(); } RenderUtils.CheckGLError("completed video mesh Render"); } } } else { float[] mvpMatrix = new float[16]; if (ComputeModelViewProjectionMatrix(mvpMatrix)) { //draw our 3d mesh on top of the marker if (monkeyMesh != null && monkeyMesh.MeshLoaded) { if (monkeyMesh.GLLoaded) { monkeyMesh.DrawMesh(mvpMatrix); } else { monkeyMesh.InitMeshGL(); } RenderUtils.CheckGLError("completed Monkey head Render"); } } } } //if the video is still playing and we have lost tracking, we still draw the video, //but in a fixed frontal position if (!RecognitionFragment.IsTracking && videoMesh != null && videoMesh.IsPlaying()) { float[] mvMatrix = new float[16]; float[] pMatrix = new float[16]; ComputeProjectionMatrix(pMatrix); if (Angle == 0) { mvMatrix[0] = 1.0f; mvMatrix[1] = 0.0f; mvMatrix[2] = 0.0f; mvMatrix[3] = -0.5f; mvMatrix[4] = 0.0f; mvMatrix[5] = -1.0f; mvMatrix[6] = 0.0f; mvMatrix[7] = 0.4f; mvMatrix[8] = 0.0f; mvMatrix[9] = 0.0f; mvMatrix[10] = -1.0f; mvMatrix[11] = -1.3f; mvMatrix[12] = 0.0f; mvMatrix[13] = 0.0f; mvMatrix[14] = 0.0f; mvMatrix[15] = 1.0f; } else if (Angle == 90) { mvMatrix[0] = 0.0f; mvMatrix[1] = 1.0f; mvMatrix[2] = 0.0f; mvMatrix[3] = -0.5f; mvMatrix[4] = 1.0f; mvMatrix[5] = 0.0f; mvMatrix[6] = 0.0f; mvMatrix[7] = -0.5f; mvMatrix[8] = 0.0f; mvMatrix[9] = 0.0f; mvMatrix[10] = -1.0f; mvMatrix[11] = -1.3f; mvMatrix[12] = 0.0f; mvMatrix[13] = 0.0f; mvMatrix[14] = 0.0f; mvMatrix[15] = 1.0f; } else if (Angle == 180) { mvMatrix[0] = -1.0f; mvMatrix[1] = 0.0f; mvMatrix[2] = 0.0f; mvMatrix[3] = 0.5f; mvMatrix[4] = 0.0f; mvMatrix[5] = 1.0f; mvMatrix[6] = 0.0f; mvMatrix[7] = -0.4f; mvMatrix[8] = 0.0f; mvMatrix[9] = 0.0f; mvMatrix[10] = -1.0f; mvMatrix[11] = -1.3f; mvMatrix[12] = 0.0f; mvMatrix[13] = 0.0f; mvMatrix[14] = 0.0f; mvMatrix[15] = 1.0f; } else if (Angle == 270) { mvMatrix[0] = 0.0f; mvMatrix[1] = -1.0f; mvMatrix[2] = 0.0f; mvMatrix[3] = 0.5f; mvMatrix[4] = -1.0f; mvMatrix[5] = 0.0f; mvMatrix[6] = 0.0f; mvMatrix[7] = 0.5f; mvMatrix[8] = 0.0f; mvMatrix[9] = 0.0f; mvMatrix[10] = -1.0f; mvMatrix[11] = -1.3f; mvMatrix[12] = 0.0f; mvMatrix[13] = 0.0f; mvMatrix[14] = 0.0f; mvMatrix[15] = 1.0f; } videoMesh.DrawMesh(mvMatrix, pMatrix); RenderUtils.CheckGLError("completed video mesh Render"); } gl.GlFinish(); }