簡體   English   中英

了解OpenGL ES 2.0中的索引

[英]Understanding indices in OpenGL ES 2.0

我知道關於索引有很多問題,但是沒有一個問題能解決我的問題。 我正在嘗試將裝有漫射光源的模型加載到openGl ES中並旋轉它。 我首先從3D立方體開始,然后設法旋轉它。 然后我添加了一個光源。 那也沒有毛刺。 現在,我正在嘗試從.obj文件中加載模型並旋轉它以代替多維數據集。 我嘗試了兩個.obj轉換器,但它對我沒有幫助。 然后,我創建了自己的.obj導入程序,結果是相同的。 我得到了變形的圖像(照明和旋轉仍然在變形的模型上起作用)。 現在我覺得我對索引的知識可能不完整。

我正在做的是創建一個vertexPositionArray []以存儲頂點信息,並創建一個vertexNormalArray []以1:1比率存儲相應的法線。 現在,我創建一個indexArray,它存儲應該調用位置和法線的順序。 例如。 如果我輸入3、5、6,我是指vertexPositionArray []和vertexNormalArray []的第3、5、6個位置,還是指vertexPositionArray?

這是我想在項目中使用的模型,而側面是我得到的輸出

這是我用來從.obj文件中提取所需信息的一段代碼:

 String[] vData={"-1.000000f, 0.000000f, 1.000000f,",
                "1.000000f, 0.000000f, 1.000000f,",
                "-1.000000f, 0.000000f, -1.000000f,",
                "1.000000f, 0.000000f, -1.000000f,",
                "0.513184f, 0.000000f, 0.513184f,",
                "0.513184f, 0.000000f, -0.513184f,",
                "-0.513184f, 0.000000f, -0.513184f,",
                "-0.513184f, 0.000000f, 0.513184f,",
                "0.158195f, 0.690612f, 0.158195f,",
                "0.158195f, 0.690612f, -0.158195f,",
                "-0.158195f, 0.690612f, -0.158195f,",
                 "-0.158195f, 0.690612f, 0.158195f,"};

String[] nData={"-0.889400f, 0.457200f, 0.000000f,",
                "0.000000f, -1.000000f, 0.000000f,",
                "0.000000f, 1.000000f, 0.000000f,",
                "0.889400f, 0.457200f, 0.000000f,",
                "0.000000f, 0.457200f, 0.889400f,",
                "0.000000f, 0.457200f, -0.889400f,"};
int[] vOrder={8, 12, 11,
            6, 5, 3,
            7, 6, 1,
            8, 7, 2,
            5, 8, 4,
            11, 12, 9,
            6, 10, 9,
            5, 9, 12,
            7, 11, 10,
            7, 8, 11,
            1, 6, 3,
            2, 7, 1,
            4, 8, 2,
            3, 5, 4,
            10, 11, 9,
            5, 6, 9,
            8, 5, 12,
            6, 7, 10};

int[] nOrder={ 1, 1, 1,
             2, 2, 2,
             2, 2, 2,
             2, 2, 2,
             2, 2, 2,
             3, 3, 3,
             4, 4, 4,
             5, 5, 5,
             6, 6, 6,
             1, 1, 1,
             3, 3, 3,
             3, 3, 3,
             3, 3, 3,
             3, 3, 3,
             3, 3, 3,
             4, 4, 4,
             5, 5, 5,
             6, 6, 6,
};

FileWriter write = new FileWriter( path , false);
PrintWriter print_line = new PrintWriter( write );

print_line.println("float[] vertexData ={");
for(int i=0;i<vOrder.length;i++)
{
    print_line.println(vData[vOrder[i]-1]);
    vCount++;
}
print_line.println("};");


print_line.println("float[] vertexNormal ={");
for(int i=0;i<nOrder.length;i++)
{
    print_line.println(nData[nOrder[i]-1]);
}
print_line.println("};");

print_line.println("Vertex Count = "+vCount);

print_line.close();
}    
}

通過在文本編輯器中使用replace函數,我從obj文件中獲得了vData(頂點)和nData(法線)。 類似地,我通過下面給出的面上的數據獲得了vOrder和nOrder(將'//'之前的數字添加到vOrder,並將其后的一個添加到nOrder):

f 8//1 12//1 11//1
f 6//2 5//2 3//2
f 7//2 6//2 1//2
f 8//2 7//2 2//2
f 5//2 8//2 4//2
f 11//3 12//3 9//3
f 6//4 10//4 9//4
f 5//5 9//5 12//5
f 7//6 11//6 10//6
f 7//1 8//1 11//1
f 1//3 6//3 3//3
f 2//3 7//3 1//3
f 4//3 8//3 2//3
f 3//3 5//3 4//3
f 10//3 11//3 9//3
f 5//4 6//4 9//4
f 8//5 5//5 12//5
f 6//6 7//6 10//6

有人可以告訴我我在做什么錯嗎?

提前致謝。 任何幫助,將不勝感激。

如果我輸入3、5、6,我是指vertexPositionArray []和vertexNormalArray []的第3、5、6個位置,還是指vertexPositionArray?

我需要將我的位置和常規數組綁定到1個數組中嗎? ,但是可以,不是必需的。

告訴我我是否正確了解.obj文件:-f 8 // 1 5 // 4 6 // 3為此,我將vertexPositionArray [7]和vertexNormalArray [0]推入了新的vertexPArray []和vertexNArray [],分別。

是的,因為Obj文件根本與OpenGL不相關。

在OpenGL中,只能有一個索引數組,但是只有OBJ文件,可以有三種ince類型(f v1 / vt1 / vn1 v2 / vt2 / vn2 v3 / vt3 / vn3 ....),因此您應該創建新的vertexPArray []和vertexNArray []使用面部數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM