/*
* Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.huawei.arengine.demos.java.world.rendering;
import android.app.Activity;
import android.graphics.Bitmap;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.huawei.arengine.demos.R;
import com.huawei.arengine.demos.common.ArDemoRuntimeException;
import com.huawei.arengine.demos.common.BaseRendererManager;
import com.huawei.arengine.demos.common.GestureEvent;
import com.huawei.arengine.demos.common.LogUtil;
import com.huawei.arengine.demos.common.ObjectDisplay;
import com.huawei.arengine.demos.common.VirtualObject;
import com.huawei.arengine.demos.java.utils.CommonUtil;
import com.huawei.hiar.ARCamera;
import com.huawei.hiar.ARConfigBase;
import com.huawei.hiar.ARFrame;
import com.huawei.hiar.ARHitResult;
import com.huawei.hiar.ARLightEstimate;
import com.huawei.hiar.ARPlane;
import com.huawei.hiar.ARPoint;
import com.huawei.hiar.ARPointCloud;
import com.huawei.hiar.ARSession;
import com.huawei.hiar.ARTarget;
import com.huawei.hiar.ARTrackable;
import com.huawei.hiar.ARWorldTrackingConfig;
import com.huawei.hiar.exceptions.ARDeadlineExceededException;
import com.huawei.hiar.exceptions.ARFatalException;
import com.huawei.hiar.exceptions.ARUnavailableServiceApkTooOldException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.Optional;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.atomic.AtomicReference;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
/**
* This class provides rendering management related to the world scene, including
* label rendering and virtual object rendering management.
*
* @author HW
* @since 2020-03-21
*/
public class WorldRendererManager extends BaseRendererManager implements BaseRendererManager.BaseRenderer {
private static final String TAG = WorldRendererManager.class.getSimpleName();
private static final float MATRIX_SCALE_SX = -1.0f;
private static final float MATRIX_SCALE_SY = -1.0f;
private static final float[] BLUE_COLORS = new float[] {66.0f, 133.0f, 244.0f, 255.0f};
private static final float[] GREEN_COLORS = new float[] {66.0f, 244.0f, 133.0f, 255.0f};
private static final int SIDE_LENGTH = 128;
private static final int LIGHTING_CUBE_MAP_SINGLE_FACE_SIZE = SIDE_LENGTH * SIDE_LENGTH * 3;
private static final int LIGHTING_CUBE_MAP_SIZE = LIGHTING_CUBE_MAP_SINGLE_FACE_SIZE * 6;
private ARWorldTrackingConfig mArWorldTrackingConfig;
private TextView mSearchingTextView;
private ImageView mTextureImageTop;
private ImageView mTextureImageBottom;
private ImageView mTextureImageLeft;
private ImageView mTextureImageRight;
private ImageView mTextureImageFront;
private ImageView mTextureImageBack;
private String mTargetInfo;
private AtomicReference<Bitmap> mBitmap = new AtomicReference<>();
private LabelDisplay mLabelDisplay = new LabelDisplay();
private ObjectDisplay mObjectDisplay = new ObjectDisplay();
private PointCloudRenderer mPointCloud = new PointCloudRenderer();
private ArrayBlockingQueue<GestureEvent> mQueuedSingleTaps;
private VirtualObject mSelectedObj = null;
private ArrayList<VirtualObject> mVirtualObjects = new ArrayList<>();
private TargetRenderManager mTargetRenderManager = new TargetRenderManager();
private boolean hasSetEnvTextureData = false;
private int mUpdateIndex = 0;
/**
* The constructor passes context and activity. This method will be called when {@link Activity#onCreate}.
*
* @param activity Activity
*/
public WorldRendererManager(Activity activity) {
mActivity = activity;
mSearchingTextView = activity.findViewById(R.id.searchingTextView);
mTextureImageTop = activity.findViewById(R.id.img_env_texture_top);
mTextureImageFront = activity.findViewById(R.id.img_env_texture_front);
mTextureImageBottom = activity.findViewById(R.id.img_env_texture_bottom);
mTextureImageRight = activity.findViewById(R.id.img_env_texture_right);
mTextureImageLeft = activity.findViewById(R.id.img_env_texture_left);
mTextureImageBack = activity.findViewById(R.id.img_env_Texture_back);
setRenderer(this);
LogUtil.info(TAG, "mSearchingTextView init.");
}
/**
* Set ARWorldTrackingConfig to obtain the configuration mode.
*
* @param arConfig ARWorldTrackingConfig.
*/
public void setArWorldTrackingConfig(ARConfigBase arConfig) {
if (arConfig == null) {
LogUtil.error(TAG, "setArWorldTrackingConfig error, arConfig is null!");
return;
}
if (arConfig instanceof ARWorldTrackingConfig) {
mArWorldTrackingConfig = (ARWorldTrackingConfig) arConfig;
}
}
/**
* Set a gesture type queue.
*
* @param queuedSingleTaps Gesture type queue.
*/
public void setQueuedSingleTaps(ArrayBlockingQueue<GestureEvent> queuedSingleTaps) {
if (queuedSingleTaps == null) {
LogUtil.error(TAG, "setSession error, arSession is null!");
return;
}
mQueuedSingleTaps = queuedSingleTaps;
}
@Override
public void surfaceCreated(GL10 gl, EGLConfig config) {
mLabelDisplay.init(getPlaneBitmaps());
mObjectDisplay.init(mActivity);
mPointCloud.init(mActivity);
mTargetRenderManager.init();
mTargetRenderManager.initTargetLabelDisplay(getTargetLabelBitmaps(""));
}
@Override
public void surfaceChanged(GL10 unused, int width, int height) {
mObjectDisplay.setSize(width, height);
}
@Override
public void drawFrame(GL10 unused) {
try {
// Set the environment texture probe and mode after the camera is initialized.
setEnvTextureData();
StringBuilder sb = new StringBuilder();
updateMessageData(mArFrame, sb);
mTextDisplay.onDrawFrame(sb.toString());
for (ARPlane plane : mSession.getAllTrackables(ARPlane.class)) {
if (plane.getType() != ARPlane.PlaneType.UNKNOWN_FACING
&& plane.getTrackingState() == ARTrackable.TrackingState.TRACKING) {
hideLoadingMessage();
break;
}
}
drawTarget(mSession.getAllTrackables(ARTarget.class), mArCamera, mViewMatrix, mProjectionMatrix);
mLabelDisplay.onDrawFrame(mSession.getAllTrackables(ARPlane.class), mArCamera.getDisplayOrientedPose(),
mProjectionMatrix);
handleGestureEvent(mArFrame, mArCamera, mProjectionMatrix, mViewMatrix);
ARLightEstimate lightEstimate = mArFrame.getLightEstimate();
ARPointCloud arPointCloud = mArFrame.acquirePointCloud();
getEnvironmentTexture(lightEstimate);
drawAllObjects(mProjectionMatrix, mViewMatrix, getPixelIntensity(lightEstimate));
mPointCloud.onDrawFrame(arPointCloud, mViewMatrix, mProjectionMatrix);
} catch (ArDemoRuntimeException e) {
LogUtil.error(TAG, "Exception on the ArDemoRuntimeEx
没有合适的资源?快使用搜索试试~ 我知道了~
华为AREngine示例代码用于展示如何使用华为AR提供的基础能力,具体能力包括运动跟踪、平面检测、人脸识别与手势识别等
共269个文件
kt:106个
java:83个
xml:44个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 156 浏览量
2024-01-09
11:21:09
上传
评论
收藏 1.93MB ZIP 举报
温馨提示
华为AREngine示例代码用于展示如何使用华为AR提供的基础能力,具体能力包括运动跟踪、平面检测、人脸识别与手势识别等
资源推荐
资源详情
资源评论
收起资源包目录
华为AREngine示例代码用于展示如何使用华为AR提供的基础能力,具体能力包括运动跟踪、平面检测、人脸识别与手势识别等 (269个子文件)
.gitignore 278B
.gitignore 7B
.gitignore 7B
build.gradle 1KB
build.gradle 910B
build.gradle 645B
settings.gradle 51B
WorldRendererManager.java 21KB
ObjectDisplay.java 20KB
FaceActivity.java 16KB
VirtualObjectData.java 15KB
CameraHelper.java 14KB
LabelDisplay.java 14KB
FaceGeometryDisplay.java 13KB
WorldActivity.java 13KB
BaseActivity.java 12KB
BaseRendererManager.java 10KB
SceneMeshDisplay.java 10KB
BodyMaskDisplay.java 9KB
CommonUtil.java 9KB
ObjectLabelDisplay.java 9KB
HandRendererManager.java 8KB
TargetRenderer.java 8KB
CloudAugmentedObjectActivity.java 8KB
InstantRendererManager.java 8KB
WorldBodyRendererManager.java 8KB
TextureDisplay.java 8KB
ImageKeyPointDisplay.java 8KB
BodySkeletonLineDisplay.java 8KB
HandSkeletonLineDisplay.java 8KB
ShaderUtil.java 8KB
VirtualObject.java 8KB
ImageLabelDisplay.java 8KB
FaceRendererManager.java 7KB
BodySkeletonDisplay.java 7KB
ImageBox.java 7KB
HitResultDisplay.java 7KB
HandBoxDisplay.java 7KB
ImageKeyLineDisplay.java 6KB
HandSkeletonDisplay.java 6KB
AabbRenderer.java 6KB
CloudAugmentedImageActivity.java 6KB
HealthActivity.java 6KB
LabelDisplayUtil.java 6KB
JsonUtil.java 6KB
ImageRendererManager.java 6KB
SceneMeshActivity.java 6KB
HealthRendererManager.java 5KB
PointCloudRenderer.java 5KB
SceneMeshShaderUtil.java 5KB
ChooseActivity.java 5KB
HandActivity.java 5KB
BodyRendererManager.java 5KB
BodyActivity.java 5KB
ConnectAppMarketActivity.java 5KB
ObjectRendererManager.java 5KB
InstantActivity.java 5KB
GestureEvent.java 5KB
RectRenderer.java 5KB
WorldShaderUtil.java 4KB
DisplayRotationManager.java 4KB
WorldBodyActivity.java 4KB
SceneMeshRendererManager.java 4KB
CircleRenderer.java 4KB
AugmentedImageComponentDisplay.java 4KB
AugmentedImageActivity.java 4KB
BodyShaderUtil.java 4KB
AugmentedImageRendererController.java 4KB
PermissionManager.java 3KB
AugmentedImageRendererManager.java 3KB
ImageBoxRenderService.java 3KB
LogUtil.java 3KB
GestureDetectorUtils.java 3KB
ListDialog.java 3KB
TextDisplay.java 2KB
MatrixUtil.java 2KB
TargetRenderManager.java 2KB
ShaderPojo.java 2KB
UiUtils.java 2KB
ColoredArAnchor.java 2KB
ModeInformation.java 2KB
BaseBackgroundDisplay.java 2KB
ArDemoRuntimeException.java 1KB
SecurityUtil.java 1KB
ObjectRelatedDisplay.java 1KB
SceneMeshComponenDisplay.java 1KB
BodyRelatedDisplay.java 1KB
HandRelatedDisplay.java 1KB
CornerType.java 1KB
CornerType.java 1KB
mode_id.json 1KB
mode_id.json 1KB
cloud_image.json 424B
cloud_image.json 424B
WorldRenderController.kt 17KB
FaceActivity.kt 14KB
VirtualObjectData.kt 13KB
WorldActivity.kt 13KB
CameraService.kt 12KB
CloudAugmentObjectActivity.kt 11KB
共 269 条
- 1
- 2
- 3
资源评论
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6723
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功