Jya*_*kku 8 opengl plugins rendering unity-game-engine oculus
我正在开发一个项目,将一些渲染卸载到我为Unity编写的本机插件中,以便利用实例化和其他高级图形功能.我正在为跨平台版本开发它,但我使用Mac,因此主要使用OpenGL进行测试.此时,插件仅向屏幕中心呈现四边形,并以十六进制值着色.该插件在一个空白的Unity项目中按预期工作,但只要我将其合并到我的Oculus项目中,它就会开始表现不正常.
在Rift中,插件的几何绘制两次,一次在两只眼睛上伸展,另一次只在右眼的范围内绘制.此外,我应用于几何体的任何原始颜色都会丢失,几何体似乎会拾取周围的颜色; 在带有红色文字的黑色屏幕上,几何体将大部分为黑色,并且有一些红色渗透到线条中.加载绿色地形后,插件绘制的几何图形变为绿色.
下面是在空白的Unity项目中绘制的几何图形的屏幕截图,其中没有其他内容:

以下是我的Oculus Rift应用程序上绘制的相同几何图形的屏幕截图:

这是我正在渲染的顶点的创建(三个坐标和颜色):
Vertex verts[4] =
{
{ -0.5f, 0.5f, 0, 0xFF0000ff },
{ 0.5f, 0.5f, 0, 0xFFff0000 },
{ 0.5f, -0.5f, 0, 0xFF00ff00 },
{ -0.5f, -0.5f, 0, 0xFFff0000 },
};
Run Code Online (Sandbox Code Playgroud)
这是绘图函数,称为插件中的每个帧:
// OpenGL case
if (g_DeviceType == kGfxRendererOpenGL)
{
//initialize model view matrices
glMatrixMode (GL_MODELVIEW);
float modelMatrix[16] =
{
1,0,0,0,
0,1,0,0,
0,0,1,0,
0,0,0,1,
};
glLoadMatrixf (modelMatrix); //assign our matrix to the current MatrixMode
//initialize projection matrix
glMatrixMode (GL_PROJECTION);
projectionMatrix[10] = 2.0f; //tweak projection matrix to match D3D
projectionMatrix[14] = -1.0f;
glLoadMatrixf (projectionMatrix);
// Vertex layout
glVertexPointer (3, GL_FLOAT, sizeof(verts[0]), &verts[0].x);
glEnableClientState (GL_VERTEX_ARRAY);
glColorPointer (4, GL_UNSIGNED_BYTE, sizeof(verts[0]), &verts[0].color);
glEnableClientState (GL_COLOR_ARRAY);
glDrawArrays(GL_LINE_LOOP, 0, 4);
}
Run Code Online (Sandbox Code Playgroud)
任何有经验的本机插件/ Rift图形编码器的见解将不胜感激!
您可以根据需要利用Unity UI系统来渲染精灵。以下是 Oculus 的一篇文章,描述了如何针对 VR 调整 Unity UI 系统:https://developer.oculus.com/blog/unitys-ui-system-in-vr/
在 Unity 之外,您可以使用四层在眼睛 FOV 上方进行渲染。以下是 Oculus Rift 文档中描述的层:https://developer.oculus.com/documentation/pcsdk/latest/concepts/dg-render/#dg_render_layers
四层:
在虚拟世界中以给定姿势和大小显示为矩形的单视场图像。这对于平视显示器、文本信息、对象标签等很有用。默认情况下,姿势是相对于用户的真实空间指定的,并且四边形将在空间中保持固定,而不是随着用户的头部或身体运动而移动。对于头部锁定的四边形,请使用 ovrLayerFlag_HeadLocked 标志,如下所述。