2016-05-17 110 views
0

我正在學習3D OpenGL。OpenGL Java 3D立方體旋轉

我在看着bennybox的視頻進行學習。 但現在我很困惑。

與他的教程視頻相比,我的立方體似乎只有三面。

我試了幾天,但還是不明白爲什麼?

benny's tutorial video Start watching at 19:37

mine program execution 1

礦魔方似乎已經不太兩側。

我想知道雙方是否有顏色。

輪換代碼:

public Matrix4f initRotation(float x, float y, float z) 
{ 
    Matrix4f rx = new Matrix4f(); 
    Matrix4f ry = new Matrix4f(); 
    Matrix4f rz = new Matrix4f(); 

    x = (float)Math.toRadians(x); 
    y = (float)Math.toRadians(y); 
    z = (float)Math.toRadians(z); 

    rz.m[0][0] = (float)Math.cos(z);rz.m[0][1] = -(float)Math.sin(z);rz.m[0][2] = 0;    rz.m[0][3] = 0; 
    rz.m[1][0] = (float)Math.sin(z);rz.m[1][1] = (float)Math.cos(z);rz.m[1][2] = 0;     rz.m[1][3] = 0; 
    rz.m[2][0] = 0;     rz.m[2][1] = 0;     rz.m[2][2] = 1;     rz.m[2][3] = 0; 
    rz.m[3][0] = 0;     rz.m[3][1] = 0;     rz.m[3][2] = 0;     rz.m[3][3] = 1; 

    rx.m[0][0] = 1;     rx.m[0][1] = 0;     rx.m[0][2] = 0;     rx.m[0][3] = 0; 
    rx.m[1][0] = 0;     rx.m[1][1] = (float)Math.cos(x);rx.m[1][2] = -(float)Math.sin(x);rx.m[1][3] = 0; 
    rx.m[2][0] = 0;     rx.m[2][1] = (float)Math.sin(x);rx.m[2][2] = (float)Math.cos(x);rx.m[2][3] = 0; 
    rx.m[3][0] = 0;     rx.m[3][1] = 0;     rx.m[3][2] = 0;     rx.m[3][3] = 1; 

    ry.m[0][0] = (float)Math.cos(y);ry.m[0][1] = 0;     ry.m[0][2] = -(float)Math.sin(y);ry.m[0][3] = 0; 
    ry.m[1][0] = 0;     ry.m[1][1] = 1;     ry.m[1][2] = 0;     ry.m[1][3] = 0; 
    ry.m[2][0] = (float)Math.sin(y);ry.m[2][1] = 0;     ry.m[2][2] = (float)Math.cos(y);ry.m[2][3] = 0; 
    ry.m[3][0] = 0;     ry.m[3][1] = 0;     ry.m[3][2] = 0;     ry.m[3][3] = 1; 

    m = rz.mul(ry.mul(rx)).getM(); 

    return this; 
} 

和進口box.obj:

o cube 
v 1.000000 -1.000000 -1.000000 
v 1.000000 -1.000000 1.000000 
v -1.000000 -1.000000 1.000000 
v -1.000000 -1.000000 -1.000000 
v 1.000000 1.000000 -0.999999 
v 0.999999 1.000000 1.000001 
v -1.000000 1.000000 1.000000 
v -1.000000 1.000000 -1.000000 
usemtl Material 
s off 
f 1 2 3 
f 1 3 4 
f 5 8 7 
f 5 7 6 
f 1 5 6 
f 1 6 2 
f 2 6 7 
f 2 7 3 
f 3 7 8 
f 3 8 4 
f 5 1 4 
f 5 4 8 
+0

看起來您沒有設置您的視圖/投影矩陣,您只是旋轉了立方體,但沒有正確定位立方體或相機。 –

+0

我認爲我的想法是正確的.......在添加投影之後,我確實沒有立方體的某些邊。但我仍然無法弄清楚爲什麼。我的新視頻[Cube less sides](https://www.youtube.com/watch?v=nIqgTVD-zuk) – Kenny

回答

0

在視頻中,可以看到一些面反轉(你只能看到他們的內部立方體)。這意味着在你的代碼中的某個地方,臉部索引的順序是順時針而不是逆時針(或者反過來)。默認情況下,OpenGL只顯示臉部的一面,這種技術稱爲「臉部剔除」。

嘗試使用不同的cube .obj模型,例如下面的模型。如果這沒有幫助,則必須通過處理.obj文件的所有代碼並最終使用OpenGL進行顯示。

o cube 
v 0.0 0.0 0.0 
v 0.0 0.0 -1.0 
v 0.0 -1.0 0.0 
v 0.0 -1.0 -1.0 
v -1.0 0.0 0.0 
v -1.0 0.0 -1.0 
v -1.0 -1.0 0.0 
v -1.0 -1.0 -1.0 
usemtl Material 
s off 
f 1 7 5 
f 1 3 7 
f 1 4 3 
f 1 2 4 
f 3 8 7 
f 3 4 8 
f 5 7 8 
f 5 8 6 
f 1 5 6 
f 1 6 2 
f 2 6 8 
f 2 8 4 
+0

對不起。我一直都很忙。我已經搜索了學習OpenGL,所以我知道你的意思是順時針和逆時針。但我並沒有用翻轉攪拌器中的反面來得到它。 – Kenny

+0

@Kenny我用新建議編輯了我的答案。 – Fons

+0

你的意思是我應該試試這個模型,忽略向量正常和1 // 2變成2 7 // 2變成14? – Kenny