gpt4 book ai didi

Vuforia:如何用图像目标示例中的文本更改茶壶?

转载 作者:行者123 更新时间:2023-12-02 17:55:00 25 4
gpt4 key购买 nike

如何在 Vuforia Image Target 示例中更改带有文本内容的茶壶?

该示例位于:https://developer.vuforia.com/resources/sample-apps/image-targets-sample-app

最佳答案

我尝试访问 mbrenon 提供的链接。不幸的是,它们没有加载。

我的解决方案:

您拥有茶壶的原因是因为 Vuforia 使用该类作为要显示的图像。为了拥有平面文本,我创建了自己的 PlaneTextClass。

  1. 转到 src->main->java->com.qualcomm.vuforia.samples->SampleApplication->utils。在那里您可以找到可以使用的对象。

  2. 添加一个名为“TextPlane”的类并从“MeshObject”扩展

    public class TextPlane extends MeshObject {

    private final static double planeVertices[] =
    {
    -50f, -50f, 0.0f, 50f, -50f, 0.0f, 50f, 50f, 0.0f, -50f, 50f, 0.0f
    };
    private final static double planeTexcoords[] =
    {
    0, 0, 1, 0, 1, 1, 0, 1
    };
    private final static double planeNormals[] =
    {
    0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1
    };
    private final static short planeIndices[] =
    {
    0, 1, 2, 0, 2, 3
    };


    private Buffer mVertBuff;
    private Buffer mTexCoordBuff;
    private Buffer mNormBuff;
    private Buffer mIndBuff;

    public TextPlane(){
    mVertBuff = fillBuffer(planeVertices);
    mTexCoordBuff = fillBuffer(planeTexcoords);
    mNormBuff = fillBuffer(planeNormals);
    mIndBuff = fillBuffer(planeIndices);
    }

    @Override
    public Buffer getBuffer(BUFFER_TYPE bufferType) {
    Buffer result = null;
    switch (bufferType)
    {
    case BUFFER_TYPE_VERTEX:
    result = mVertBuff;
    break;
    case BUFFER_TYPE_TEXTURE_COORD:
    result = mTexCoordBuff;
    break;
    case BUFFER_TYPE_INDICES:
    result = mIndBuff;
    break;
    case BUFFER_TYPE_NORMALS:
    result = mNormBuff;
    default:
    break;
    }
    return result;
    }

    @Override
    public int getNumObjectVertex() {
    return planeVertices.length / 3;
    }

    @Override
    public int getNumObjectIndex() {
    return planeIndices.length;
    }}

如果要更改图像的大小,请更改 PlaneVertices[] 中的值。

  • 转到 src->main->java->com.qualcomm.vuforia.samples->VuforiaSamples->app->ImageTargets->ImageTargetRenderer.java

  • 在 ImageTargetRenderer.java 中添加新类:

  • 私有(private) TextPlane mTextPlane;

  • 在 initRendering() 方法中初始化 mTextPlane
  • mTextPlane = new TextPlane();

  • 将茶壶代码替换为新的文本平面代码:
  • 替换这个:

    GLES20.glVertexAttribPointer(vertexHandle, 3, GLES20.GL_FLOAT,
    false, 0, mTeapot.getVertices());
    GLES20.glVertexAttribPointer(normalHandle, 3, GLES20.GL_FLOAT,
    false, 0, mTeapot.getNormals());
    GLES20.glVertexAttribPointer(textureCoordHandle, 2,
    GLES20.GL_FLOAT, false, 0, mTeapot.getTexCoords());

    这样:

    GLES20.glVertexAttribPointer(vertexHandle, 3, GLES20.GL_FLOAT,
    false, 0, mTextPlane.getVertices());
    GLES20.glVertexAttribPointer(normalHandle, 3, GLES20.GL_FLOAT,
    false, 0, mTextPlane.getNormals());
    GLES20.glVertexAttribPointer(textureCoordHandle, 2,
    GLES20.GL_FLOAT, false, 0, mTextPlane.getTexCoords());
  • 替换此:
  • GLES20.glDrawElements(GLES20.GL_TRIANGLES,
    mTeapot.getNumObjectIndex(),GLES20.GL_UNSIGNED_SHORT,
    mTeapot.getIndices());

    这样:

    GLES20.glDrawElements(GLES20.GL_TRIANGLES,
    mTextPlane.getNumObjectIndex(), GLES20.GL_UNSIGNED_SHORT,
    mTextPlane.getIndices());
  • 尝试一下。应该可以!
  • 关于Vuforia:如何用图像目标示例中的文本更改茶壶?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17939607/

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