前回は空白で区切ったXYZ座標の整数値データを作成しました。今回はこれをC言語で読み込んで3D表示を確認します。あと、マウスを非表示に変更します。
takk@deb9:~$ head out.txt 0 0 9 9 0 9 0 0 0 9 0 0 0 0 1 0 0 2 0 0 3 0 0 4 0 0 5 0 0 6
XYZ座標値だけでなく、ブロックIDも指定したいので、もう一つ値を追加します。1(土色のブロック)を追加しました。
takk@deb9:~$ sed 's/$/ 1/' out.txt > world_map.txt takk@deb9:~$ head world_map.txt 0 0 9 1 9 0 9 1 0 0 0 1 9 0 0 1 0 0 1 1 0 0 2 1 0 0 3 1 0 0 4 1 0 0 5 1 0 0 6 1 takk@deb9:~$
このデータを読み込めるようにCプログラムを作ります。
1 void cb_world_load() 2 { 3 FILE *fp; 4 char readline[100],*p1, *p2, *p3,*p4; 5 6 cb_world_size = 0; 7 8 if ((fp = fopen("world_map.txt", "r")) == NULL) { 9 fprintf(stderr, "can not read world_map.txt"); 10 exit(EXIT_FAILURE); 11 } 12 13 while ( fgets(readline, 100, fp) != NULL ) { 14 if(strlen(readline) > 4){ 15 p1 = strtok(readline, " "); 16 p2 = strtok(NULL, " "); 17 p3 = strtok(NULL, " "); 18 p4 = strtok(NULL, " "); 19 cb_world_map[cb_world_size][0]= atoi(p1); 20 cb_world_map[cb_world_size][1]= atoi(p2); 21 cb_world_map[cb_world_size][2]= atoi(p3); 22 cb_world_map[cb_world_size][3]= atoi(p4); 23 cb_world_size++; 24 } 25 } 26 27 fclose(fp); 28 }
main処理では元々あったランダム地形生成処理であるcb_world_createをコメントアウトして、cb_world_load理を呼ぶように修正。
あと、今回のタイトルになっているマウスカーソルを非表示にするAPIコールを追加(32行目)。
1 int main(int argc, char *argv[]) 2 { 4 cb_world_load(); 5 // cb_world_create(); ~省略~ 31 32 glutSetCursor(GLUT_CURSOR_NONE); 33 34 glutMainLoop(); 35 return 0; 36 }
実行すると以下のような画像になります。Blenderを使用して作った地形データは、一点だけ上に持ち上げていましたが、表示されている画像もそのようになってますね。
コメント