我尝试访问 mbrenon 提供的链接。不幸的是他们没有加载。
我的解决方案:
之所以有 Teapot,是因为 Vuforia 使用该类作为要显示的图像。为了拥有平面文本,我创建了自己的 PlaneTextClass。
转到 src->main->java->com.qualcomm.vuforia.samples->SampleApplication->utils。在那里您可以找到可以使用的对象。
-
添加一个名为“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;
- 在 init Rendering() 方法中初始化 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());
- 尝试一下。它应该有效!