我正在开发一个项目,将一些渲染工作转移到我为Unity编写的本地插件中,以利用实例化和其他高级图形功能。我正在开发它以进行跨平台发布,但我使用的是Mac电脑,因此测试主要使用OpenGL进行。目前,该插件仅渲染一个位于屏幕中心的带有十六进制颜色的矩形。插件在空白的Unity项目中按预期工作,但一旦我将其纳入我的Oculus项目中,它就会表现得不稳定。
在Rift中,插件的几何图形会绘制两次,一次跨越两只眼睛的范围,另一次仅在右眼的范围内绘制。此外,我应用于几何图形的任何基本颜色都将丢失,并且几何图形似乎会拾取周围的颜色;在黑色屏幕上,红色文本,几何图形将主要是黑色,并且有一些红色渗入线条中。一旦加载了我的绿色地形,插件绘制的几何图形就变成了绿色。
下面是在空白的Unity项目中绘制几何图形的截图(仅有这个): 这里是在我的Oculus Rift应用程序上绘制同一几何图形的截图: 以下是我正在渲染的顶点的创建(三个坐标和颜色):
这是绘制函数,每帧都在插件中被调用:
在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图形编码人员提供任何见解!