2014-06-07 46 views
0

我目前正在實現反射(使用渲染到紋理方法),並且到目前爲止它的工作原理,唯一的問題是反射版本中的所有對象都被渲染出來。使用矩陣反向頂點繞組順序

我想避免改變內部OpenGL頂點繞線順序,以確保我不會干擾其他渲染操作太多。

相反,我想改變我的反射矩陣做倒轉。 (應該只是另一個反射?)

這是我的反射矩陣(其將攝像機的視圖矩陣):

glm::mat4 matReflection(
    1.f -2.f *n.x *n.x,-2.f *n.x *n.y,-2.f *n.x *n.z,-2.f *n.x *d, 
    -2.f *n.x *n.y,1.f -2.f *n.y *n.y,-2.f *n.y *n.z,-2.f *n.y *d, 
    -2.f *n.x *n.z,-2.f *n.y *n.z,1.f -2.f *n.z *n.z,-2.f *n.z *d, 
    0.f,0.f,0.f,1.f 
); 

N =正常反射的平面; d =飛機的距離

是否有可能通過矩陣轉換來顛倒頂點順序?如果是這樣,究竟如何?

+0

您的問題是三角形的倒轉順序,例如,因爲您已啓用背面剔除功能,或者正在着色器中使用「gl_FrontFacing」?如果不改變訂單狀態,這將很難解決。還是與法線方向一致?這可以通過對法線進行適當的轉換來解決。 –

回答

1

如果在所有其他轉換(包括投影)之後應用矩陣將y軸縮放-1,則最終會得到一個顛倒的圖像(您可以通過包含像uv.y = 1-uv.y在你的管道中的某處)。

+0

將Z軸縮放** - 1.0 **會扭轉旋向(假設沒有其他軸被翻轉),但它實際上不會改變繞組。繞組僅在窗口空間中使用X和Y確定,Z無關緊要。另一方面(如果沒有雙關語意思),如果翻轉X或Y,它會*改變旋向和旋轉。改變前臉方向可能是最簡單的事情。 –

+0

是的,你說得對z軸縮放不起作用。我的第一段也是不正確的(我對反射矩陣的看法有些蠢蠢欲動,「將模型翻出來」)。我發現y軸翻轉很有用(如果場景可能混合了剔除/卷繞模式)。 – GuyRT