【问题标题】:Native Rendering Plugin with Oculus Rift带有 Oculus Rift 的原生渲染插件
【发布时间】:2014-12-23 00:34:29
【问题描述】:

我正在开发一个项目,该项目将一些渲染卸载到我为 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 },
};

这是绘制函数,在插件中的每一帧都被调用:

// 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);

}

如果有经验丰富的原生插件/Rift 图形编码人员提供任何见解,我们将不胜感激!

【问题讨论】:

  • 为什么投票结束?
  • 请注意,您通常还必须在渲染之前设置视口。 OVR SDK 明确提供了一个函数来查询渲染目标中的目标视口。我目前不在一台可以通过 Oculus 开发人员登录访问我的密码存储的计算机上,所以我无法在参考中链接
  • 因为我在 Unity 中工作,我目前没有将 SDK 滚动到我的书面代码中;只需使用 Oculus 集成包并在其上进行编码。事实上,我什至不确定是否可以在 Unity 运行时从外部 C++ 插件访问 OVR SDK 属性。我愿意将 Oculus SDK 作为依赖项添加到我的插件中,但这似乎有点多余,如果它可以工作的话。
  • 你有没有得到这个工作?我也有类似的问题。
  • 不,我从来没有解决过这个问题,尽管自从 Unity 的内置 VR 集成发布以来,我没有尝试过运行此代码。我认为尝试考虑将合成器添加到新的 VR 管道中是一件有效的事情,所以如果我尝试它时产生积极的结果,我会在这里发布。

标签: opengl plugins unity3d rendering oculus


【解决方案1】:

您可以根据需要使用 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 标志,如下所述。

【讨论】:

    猜你喜欢
    • 2017-06-10
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    相关资源
    最近更新 更多