android – 如何将对象始终放在相机前面
作者:互联网
我正在申请,我正在渲染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)绘制一条线的同一性,将在屏幕中间绘制一条直线垂直线.这将占用屏幕中间一半的屏幕尺寸.
我建议您使用带有屏幕坐标的正交投影矩阵,并将对象放在中间,就像使用恒定大小的另一个视图(宽度/ 2,高度/ 2)一样.
但是,如果要使其始终可见,请确保在绘制此元素时禁用深度缓冲区.
如果由于某种原因你想要使用视锥体矩阵将对象保持在你面前,甚至可能保持深度测试,那么你只需要保持相同的投影矩阵(视锥体部分)并将视图矩阵设置为标识(来自相机).设置完成后,您需要做的就是将对象放在绝对零(.0f,.0f,distanceToObject)之前.
标签:android,3d,opengl-es,virtual-reality 来源: https://codeday.me/bug/20190527/1163819.html