我正在研究一個項目,將一些渲染轉移到我爲Unity編寫的原生插件上,以便利用實例化和其他高級圖形功能。我正在爲跨平臺版本開發它,但我使用Mac,因此測試主要是使用OpenGL完成的。此時,該插件只會將四邊形呈現爲以十六進制值着色的屏幕中心。該插件按照預期在空白的Unity項目中工作,但只要我將它整合到我的Oculus項目中,它就開始表現不正常。Oculus Rift本地渲染插件
在Rift中,插件的幾何圖形繪製兩次,一次拉伸兩隻眼睛,另一次繪製只在右眼的範圍內繪製。此外,我應用於幾何體的任何原始顏色都會丟失,並且幾何體似乎會拾取周圍的顏色;在帶有紅色文字的黑色屏幕上,幾何圖形將大部分爲黑色,並且線條上出現一些紅色的流血。一旦加載綠色地形,插件繪製的幾何圖形變爲綠色。
下面是幾何形狀的截圖被抽中的空白統一項目,沒有別的:
在這裏被我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);
}
由經驗豐富的原生插件/裂谷圖形編碼任何有識之士將不勝感激!
爲什麼選票關閉? – datenwolf 2014-10-27 19:03:38
請注意,您通常也必須在渲染之前設置視口。 OVR SDK明確提供了一個函數來查詢渲染目標中的目標視口。我目前不在可以通過Oculus開發人員登錄訪問我的密碼存儲區的計算機,所以我無法鏈接到參考文獻 – datenwolf 2014-10-27 19:13:45
因爲我在Unity工作,所以我當前沒有將SDK編入我的書面代碼;只需使用Oculus集成包和編碼就可以了。實際上,我甚至不確定在Unity運行時是否可以從外部C++插件訪問OVR SDK屬性。我願意將Oculus SDK作爲依賴項添加到我的插件中,但是這似乎有點多餘,如果它可以工作的話。 – Jyakku 2014-10-27 19:51:51