如何将物体放在相机前面

时间:2017-06-22 05:56:01

标签: android opengl-es 3d virtual-reality

我正在制作一个应用程序,我正在渲染360图像,我想在相机前面添加一个物体或十字架,即(广告牌概念)。

所以我已经从堆栈溢出本身累了很多东西,但我不知道我怎么能做到这一点下面是我正在尝试做的代码。

Vector3 position;
    float[] newPosition4 = new float[4];
    position = obj.getPosition();
    float[] posVec4 = {0, 0, -8, 0.0f};
    float[] HeadViewMatrix_inv = new float[16];
    Matrix4 HeadViewMatrix4 = new Matrix4();
    HeadViewMatrix4.setAll(getCurrentCamera().getViewMatrix());
    HeadViewMatrix4 = HeadViewMatrix4.inverse();

    //Copy matrix to HeadViewMatrix array,
    HeadViewMatrix4.toFloatArray(HeadViewMatrix_inv);

    //Translation of viewMatrix 
    Matrix.multiplyMV(newPosition4, 0, HeadViewMatrix_inv, 0, posVec4, 0);
    obj.setPosition(newPosition4[0], newPosition4[1], newPosition4[2]);

所以任何人都可以帮助我。

2 个答案:

答案 0 :(得分:4)

如果我明白你的要求,这几乎是最简单的事情。您需要构建一个新矩阵或简单地删除当前的矩阵(使用标识)。

通过从A(-0.5, 0.0, 0.0)B(0.5, 0.0, 0.0)画一条线来识别身份会在屏幕中间绘制一条直线垂直线。这将占用屏幕中间一半的中间位置。

我建议您使用带有屏幕坐标的拼写投影矩阵,并将对象放在中间,就像使用其他视图(width/2height/2)一样。

但是如果你想让它始终可见,请确保在绘制此元素时禁用深度缓冲区。

如果由于某种原因你想使用视锥体矩阵将对象保持在你面前,甚至可能保持深度测试,那么你只需要保持相同的投影矩阵(视锥体部分)并将视图矩阵设置为标识(一个来自相机)。设置完成后,您需要做的就是将对象置于绝对零(.0f, .0f, distanceToObject)前面。

答案 1 :(得分:2)

如果你想使用画布,我可以提供一个简单的解决方案。

product_code

将SurfaceView和Canvas添加到此FrameLayout并在该画布中绘制任何您想要的内容。