gpt4 book ai didi

android - 华为 AR 引擎 .obj 文件无法正确渲染

转载 作者:行者123 更新时间:2023-12-03 17:09:49 30 4
gpt4 key购买 nike

我有一个安卓应用程序,我正在使用华为 AR 引擎套件。
我有一个扩展名为 .obj 的模型文件。当我在名为 blender 的应用程序中减小其大小后将此文件添加到我的应用程序时,我的模型无法正确显示。我将它们作为 Assets 添加到 Android 项目中。
我正确导出了模型,因为我在必要时检查了它并且我的模型是正确的。
我想调整模型的大小并以更小的尺寸显示它。
我在下面的应用程序中分享了模型实际上是什么以及屏幕截图。
model screenshot-eiffel
model-in-app
onDrawFrame 如下

    public void onDrawFrame(float[] cameraView, float[] cameraProjection, float lightIntensity, VirtualObject obj) {
ShaderUtil.checkGlError(TAG, "onDrawFrame start.");
mModelMatrixs = obj.getModelAnchorMatrix();
Matrix.multiplyMM(mModelViewMatrixs, 0, cameraView, 0, mModelMatrixs, 0);
Matrix.multiplyMM(mModelViewProjectionMatrixs, 0, cameraProjection, 0, mModelViewMatrixs, 0);
GLES20.glUseProgram(mGlProgram);
Matrix.multiplyMV(mViewLightDirections, 0, mModelViewMatrixs, 0, LIGHT_DIRECTIONS, 0);
MatrixUtil.normalizeVec3(mViewLightDirections);

GLES20.glUniform4f(mLightingParametersUniform,
mViewLightDirections[0], mViewLightDirections[1], mViewLightDirections[2], lightIntensity);
float[] objColors = obj.getColor();

GLES20.glUniform4fv(mColorUniform, 1, objColors, 0);
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextures[0]);
GLES20.glUniform1i(mTextureUniform, 0);
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mVertexBufferId);

GLES20.glVertexAttribPointer(
mPositionAttribute, 3, GLES20.GL_FLOAT, false, 0, 0);

GLES20.glVertexAttribPointer(
mNormalAttribute, 3, GLES20.GL_FLOAT, false, 0, mNormalsBaseAddress);

GLES20.glVertexAttribPointer(
mTexCoordAttribute, 2, GLES20.GL_FLOAT, false, 0, mTexCoordsBaseAddress);
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);
GLES20.glUniformMatrix4fv(
mModelViewUniform, 1, false, mModelViewMatrixs, 0);
GLES20.glUniformMatrix4fv(
mModelViewProjectionUniform, 1, false, mModelViewProjectionMatrixs, 0);
GLES20.glEnableVertexAttribArray(mPositionAttribute);
GLES20.glEnableVertexAttribArray(mNormalAttribute);
GLES20.glEnableVertexAttribArray(mTexCoordAttribute);
GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, mIndexBufferId);
GLES20.glDrawElements(GLES20.GL_TRIANGLES, mIndexCount, GLES20.GL_UNSIGNED_SHORT, 0);
GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, 0);
GLES20.glDisableVertexAttribArray(mPositionAttribute);
GLES20.glDisableVertexAttribArray(mNormalAttribute);
GLES20.glDisableVertexAttribArray(mTexCoordAttribute);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0);
ShaderUtil.checkGlError(TAG, "onDrawFrame end.");
}

最佳答案

为了调整模型的大小,您可以将 SCALE_FACTOR 更改为所需的值,

mModelMatrix[0] = SCALE_FACTOR;
mModelMatrix[5] = SCALE_FACTOR;
mModelMatrix[10] = SCALE_FACTOR;
如果您使用的是 AR Engine 的演示代码,它位于 VirtualObject 中。
AR Engine
而对于模型展示部分,需要根据自己使用的模型,针对每一帧修改基于GLSurfaceView的onDrawFrame方法中的渲染代码。如果渲染部分过于复杂,可以尝试使用 Scene Kit 的 AR View 进行模型渲染,支持 glTF 和 glb 格式。

关于android - 华为 AR 引擎 .obj 文件无法正确渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65407185/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com