boss說,要看opengl,看了快乙個月,總算出了個像樣的東西,用c寫了個3d迷宮,
雖然只有350行
**,不過邊學邊寫,足足寫了一周時間,還是小有成就感的,活活活!
tips:上下左右鍵控制前進後退轉向,空格鍵切換俯檢視,滑鼠右鍵更換地圖(雖然只寫了兩
個……) 加了點**,免得太過單調。
效果圖:
int angle = angle_start ; //行走方向
int dir_x ; //行走方向向量
int dir_y ;
int map_size = 16 ;
char **map ;
int globalview = 0 ; //是否檢視俯檢視
char *map1[16] =
;char *map2[25] =
;// 載入牆紙
int readimage()
free(textureimage);
}return 1;
}// 判斷是否為牆
int wall(int x , int y)
// 計算行走方向向量
void calcdir()
// 繪製迷宮牆體
int drawcube(int x , int y)
// 繪製迷宮地板
int drawfloor(int x , int y)
// 標明當前位置和方向
int drawplayer()
// 繪製迷宮
void drawmap()
// 初始化繪製環境
void init()
// 繪製函式
void display(void)
glmatrixmode(gl_modelview) ;
glloadidentity() ;
drawmap() ;
glmatrixmode(gl_projection) ;
glloadidentity() ;
glenable(gl_depth_test) ;
gluperspective(90,1.0,0.01,16.0) ;
if(globalview == 0)
glulookat(px,py,0.0f,px+dir_x,py+dir_y,0.0f,0.0f,0.0f,1.0f) ;
else
glulookat(px,py,7.0f,px,py,0.0f,0.0f,1.0f,0.0) ;
glutswapbuffers();
}// 地圖選擇
void menufunc(int data)
angle = angle_start ;
px = px_start ;
py = py_start ;
calcdir() ;
}// 控制移動
void aheadandback(float pos)
// 鍵盤事件
void keyboard(unsigned char key, int x, int y)
// 鍵盤事件
void special(int key , int x , int y)
}// 空閒時呼叫
void idle(void)
// 視窗調整
void reshape(glsizei w , glsizei h)
// 主函式
int main(int argc , char** argv)
用qt畫3d圓柱
qwidget是在2d座標第中,要畫3d的就要將3d圖抽象到2d座標中來。當乙個3d圓柱放到平面座標中,如果柱面方向和眼睛水平,則是乙個矩形 如果柱面和眼睛方向水平則是乙個圓,如柱面方向和眼睛垂直並繞x軸旋轉一定角度,那麼就是兩個個橢圓,且底面橢圓不能完全看見。這裡為了是圓柱圓更像圓柱面,我畫的是最...
用scrollview製作3D效果的導航頁
第一步 新建乙個工程 3dscrollview 第二步 建立乙個類繼承與scrollview import 列舉出3d效果的型別 typedef ns enum nsuinteger,jjj3dscrollvieweffect inte ce jjj3dscorllview uiscrollview...
用NVPerfHUD來分析3D程式
nvperfhud 是乙個很好的3d 程式除錯工具,它是nvperfkit 的一部分,由nvidia 開發,在寫d3d 程式時 它不能檢視opengl 程式 加入簡單的語句就可以利用nvperfhud 來除錯察看顯示卡的工作情況了。最近在使用時,感覺越來越方便,所以在這裡說一下最近用的最多的兩個功能...