我正在开发一个项目,该项目将一些渲染卸载到我为 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 图形编码人员的任何见解将不胜感激!