android - 如何始终将物体放在相机前

标签 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]);

所以任何人都可以帮我解决这个问题。

最佳答案

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

通过从 A(-0.5, 0.0, 0.0)B(0.5, 0.0, 0.0) 画一条线来确定身份将在屏幕中间。这将占用一半的屏幕尺寸并居中。

我建议您使用带有屏幕坐标的正交投影矩阵并将您的对象放在中间,就像您使用另一个 View (width/2height/2)一样一个恒定的大小。

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

如果出于某种原因你想使用平截头矩阵将物体保持在你面前,甚至可能保持深度测试,那么你只需要保持相同的投影矩阵(平截头部分)并将 View 矩阵设置为恒等(一个来自相机)。设置好这些后,您需要做的就是将对象放在绝对零前面 (.0f, .0f, distanceToObject)

关于android - 如何始终将物体放在相机前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44691211/

相关文章:

android - 在没有系统对话框的情况下从 android 打印

ios - 获取GLSL中后台缓冲区的颜色

javascript - 在鼠标悬停时调出部分图像

java - 在 libGDX 中设置 3d 网格的索引

python - 在 matplotlib 中仅连接一段数字数组

android - 没有调用 start 的 ViewPropertyAnimator,有区别吗?

android - 如何在我的 Android 应用程序中使用 QuickSearchBox?

Android - 已发送的短信不显示在 native 消息应用程序中

android - 没有 NDK 的 OpenGL ES 2.0 可能吗?

ios - Cocos2dx 在不使用 plist 文件的情况下更改 Sprite 大小和纹理 uv