當我地在游中渲染大量3D模型時,如果3D模型離視口很遠時,在屏幕上繪畫可能只是幾個像素,其中解卻方法是3D模型轉為2D圖像,然後作為紋理映射到四邊形.當視口靠近時再切換為3D模型.廣告牌作用是確保2D圖像此終面向視口.演示程式中按前後鍵移動相機,按左右鍵旋轉相機,仙人掌此終面向視口:下載
1.獲取當前『模型視圖矩陣』
typedef struct MATRIX4X4_TYP{
float M[4][4]; //以數組形式儲存
} MATRIX4X4, *MATRIX4X4_PTR;
glGetFloatv(GL_MODELVIEW_MATRIX, (float*)matrix.M);
2.提取視口右則向量
VECTOR3D right;
Init_VECTOR3D(&right, matrix.M[0][0], matrix.M[1][0], matrix.M[2][0]);
3.提取視口右則向量
VECTOR3D up;
Init_VECTOR3D(&up,matrix.M[0][1],matrix.M[1][1], matrix.M[2][1]);
4.移動廣告牌(四邊形)中心位置
glPushMatrix();
glTranslatef(position->x, position->y, position->z);
5.準備繪畫廣告牌(四邊形)
glBegin(GL_QUADS);
6.法線朝向
glNormal3f(0.0f, 0.0f, 1.0f);
7.重新計算廣告牌(四邊形)頂點位置,以實現廣告牌法線此終朝向視口
VECTOR3D Vertex;
glTexCoord2f(0.0f, 0.0f); glVertex3fv(((right + up) * -size).M); // 左上角
glTexCoord2f(1.0f, 0.0f); glVertex3fv(((right – up) * size).M); // 右下角
glTexCoord2f(1.0f, 1.0f); glVertex3fv(((right + up) * size).M); // 右上角
glTexCoord2f(0.0f, 1.0f); glVertex3fv(((up – right) * size).M); // 左上角
8.完成繪畫廣告牌(四邊形)
glEnd();
glPopMatrix();// 彈出矩陣
你必須登入才能發表留言。