前回は空白で区切った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を使用して作った地形データは、一点だけ上に持ち上げていましたが、表示されている画像もそのようになってますね。



コメント