2014-10-27 62 views
8

我正在研究一個項目,將一些渲染轉移到我爲Unity編寫的原生插件上,以便利用實例化和其他高級圖形功能。我正在爲跨平臺版本開發它,但我使用Mac,因此測試主要是使用OpenGL完成的。此時,該插件只會將四邊形呈現爲以十六進制值着色的屏幕中心。該插件按照預期在空白的Unity項目中工作,但只要我將它整合到我的Oculus項目中,它就開始表現不正常。Oculus Rift本地渲染插件

在Rift中,插件的幾何圖形繪製兩次,一次拉伸兩隻眼睛,另一次繪製只在右眼的範圍內繪製。此外,我應用於幾何體的任何原始顏色都會丟失,並且幾何體似乎會拾取周圍的顏色;在帶有紅色文字的黑色屏幕上,幾何圖形將大部分爲黑色,並且線條上出現一些紅色的流血。一旦加載綠色地形,插件繪製的幾何圖形變爲綠色。

下面是幾何形狀的截圖被抽中的空白統一項目,沒有別的:

Blank Unity project

在這裏被我Oculus Rift以應用程序的頂部排出相同的幾何形狀的截圖:

Native rendering on top of 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); 

} 

由經驗豐富的原生插件/裂谷圖形編碼任何有識之士將不勝感激!

+0

爲什麼選票關閉? – datenwolf 2014-10-27 19:03:38

+0

請注意,您通常也必須在渲染之前設置視口。 OVR SDK明確提供了一個函數來查詢渲染目標中的目標視口。我目前不在可以通過Oculus開發人員登錄訪問我的密碼存儲區的計算機,所以我無法鏈接到參考文獻 – datenwolf 2014-10-27 19:13:45

+0

因爲我在Unity工作,所以我當前沒有將SDK編入我的書面代碼;只需使用Oculus集成包和編碼就可以了。實際上,我甚至不確定在Unity運行時是否可以從外部C++插件訪問OVR SDK屬性。我願意將Oculus SDK作爲依賴項添加到我的插件中,但是這似乎有點多餘,如果它可以工作的話。 – Jyakku 2014-10-27 19:51:51

回答

0

您可以使用Unity UI系統根據您的需要呈現精靈。這裏有一篇來自Oculus的文章,描述如何調整VR的Unity UI系統:https://developer.oculus.com/blog/unitys-ui-system-in-vr/

在Unity外部,您可以使用四層圖層渲染眼睛FOV。下面是魔環裂谷文檔中描述的層:https://developer.oculus.com/documentation/pcsdk/latest/concepts/dg-render/#dg_render_layers

四層:

即在給定的顯示爲矩形A單視場圖像姿勢和大小在虛擬世界中。這對於擡頭顯示,文本信息,對象標籤等非常有用。默認情況下,姿勢是相對於用戶的真實世界空間指定的,並且四邊形將保持固定在空間中而不是隨着用戶的頭部或身體動作移動。對於頭部鎖定的四邊形,使用ovrLayerFlag_HeadLocked標誌,如下所述。