我現在要讀取.off file,http://goo.gl/H5tjUY,是一種儲存3D圖像資訊的格式
例如
OFF
#
# cube.off
# A cube.
# There is extra RGBA color information specified for the faces.
#
8 6 12
1.632993 0.000000 1.154701
0.000000 1.632993 1.154701
-1.632993 0.000000 1.154701
0.000000 -1.632993 1.154701
1.632993 0.000000 -1.154701
0.000000 1.632993 -1.154701
-1.632993 0.000000 -1.154701
0.000000 -1.632993 -1.154701
4 0 1 2 3 1.000 0.000 0.000 0.75
4 7 4 0 3 0.300 0.400 0.000 0.75
4 4 5 1 0 0.200 0.500 0.100 0.75
4 5 6 2 1 0.100 0.600 0.200 0.75
4 3 2 6 7 0.000 0.700 0.300 0.75
4 6 5 4 7 0.000 1.000 0.000 0.75
第一行是OFF
再來可能有註解,用#開頭,註解可以在一行中的任意位置
再來8 6 12代表頂點、面、邊的個數
接下來8行是頂點的座標
再接下來六行是面的資訊,每一行的第一個數代表這個面有多少頂點
如4 0 1 2 3,代表有四個頂點,後面的四個數字是4個頂點的index
一行中最後面的4個數代表RGBA的資訊,這4個數可有可無
現在問題是我不知道該怎麼讀取這個檔案好:
1)我用scanner去讀,用readline讀最前面的註解,像這樣:
int vertexCount;
int faceCount;
int edgeCount;
String line = "";
while ((line = scanner.nextLine()) != null) {
if (line.startsWith("OFF"))
continue;
else if (line.startsWith("#"))
continue;
else {
String count[] = new String[3];
count = line.split(" ");
vertexCount = Integer.parseInt(count[0]);
faceCount = Integer.parseInt(count[1]);
edgeCount = Integer.parseInt(count[2]);
break;
}
問題是8 6 12這行不一定是用一個空白分開的,可能是用好幾個空白分開,
或是最前面也有空白," 8 6 12",這樣用nextInt比較好,但是在readline之前
我又不知道這行是不是註解。所以該如何讀取這行?
2) 在讀取面的資訊時,我用nextInt讀取,但是我不知道如何判斷這個檔案會不會包含
RGBA的資訊,就是不知道一行到底會有多少數字,該如何解決?
問題很多,謝謝你的耐心