OpenGL入門二——變換

一、預備知識

  1. 齊次座標:https://blog.csdn.net/zhanxi1992/article/details/106222998
  2. 圖形學變換——平移、旋轉和縮放 https://blog.csdn.net/zhanxi1992/article/details/106532991

二、實現

  1. 八面體頂點數據
const int NumVertices = 24;	// 8個面,每個面1個三角形,每個三角形3個頂點,共24個頂點
point4 points[NumVertices] =
{
	// 立方體頂點座標數組
	// 上半部分
	vertices[0], vertices[1], vertices[2],
	vertices[0], vertices[2], vertices[3],
	vertices[0], vertices[3], vertices[4],
	vertices[0], vertices[4], vertices[1],
	// 下半部分
	vertices[1], vertices[5], vertices[2],
	vertices[2], vertices[5], vertices[3],
	vertices[3], vertices[5], vertices[4],
	vertices[4], vertices[5], vertices[1],
};
  1. 顏色數據
// 右邊圖形頂點顏色數組
color4 colorsRight[NumVertices] =
{
	// 上半部分
	colors[RED], colors[RED], colors[RED],
	colors[GREEN], colors[GREEN], colors[GREEN],
	colors[BLUE], colors[BLUE], colors[BLUE],
	colors[YELLOW], colors[YELLOW], colors[YELLOW],

	// 下半部分
	colors[HALF_RED], colors[HALF_RED], colors[HALF_RED],
	colors[HALF_GREEN], colors[HALF_GREEN], colors[HALF_GREEN],
	colors[HALF_BLUE], colors[HALF_BLUE], colors[HALF_BLUE],
	colors[HALF_YELLOW], colors[HALF_YELLOW], colors[HALF_YELLOW],
};

// 左邊圖形頂點顏色數組(注意和points中頂點序列對應)
color4 colorsLeft[NumVertices] =
{
	// 上半部分
	colors[WHITE], colors[RED], colors[GREEN],
	colors[WHITE], colors[GREEN], colors[BLUE],
	colors[WHITE], colors[BLUE], colors[YELLOW],
	colors[WHITE], colors[YELLOW], colors[RED],

	// 下半部分
	colors[RED], colors[BLACK], colors[GREEN],
	colors[GREEN], colors[BLACK], colors[BLUE],
	colors[BLUE], colors[BLACK], colors[YELLOW],
	colors[YELLOW], colors[BLACK], colors[RED],
};
  1. 透視矩陣
matProj = Perspective(15.0, aspectRatio, 15.0, 35.0);	// 透視投影變換
  1. 變換矩陣
    注:因爲矩陣的運算符合結合律,所有對於點p的一系列變換可轉換爲所有變換矩陣的乘積,在圖形學中稱爲變換的級聯。即p’= ABCp = A(B(Cp)),越先變換的離 p 點最近,這裏的 P 是列矩陣。
// 創建變換矩陣 p'= ABCp = A(B(Cp))
mat4 transform = matProj		 // 投影矩陣
	* Translate(0.0, 0.0, -25.0) // 沿z軸平移
	* RotateY(RotateAngle)	     // 繞y軸旋轉
	* RotateX(Azimuth);		     // 繞x軸旋轉

三、控制

方向鍵控制旋轉
按 w 鍵切換線框模式
按 R 鍵 增加旋轉速度, r 鍵 降低旋轉速度

四、預覽與源碼

在這裏插入圖片描述
Demo源碼: https://github.com/WarZhan/Graphics-Demo/tree/master/Octahedra.

歡迎關注個人公衆號,實時推送最新博文!
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章