gluPerspective的具体含义
OpenGL有兩種投影:正射投影(垂直投影)和透視投影。透視投影通過指定一個平截頭體來定義視見體的范圍,平截頭體如下圖所示:
void gluPerspective (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar)fovy是眼睛上下睜開的幅度,角度值,值越小,視野范圍越狹小(瞇眼),值越大,視野范圍越寬闊(睜開銅鈴般的大眼);
zNear表示近裁剪面到眼睛的距離,zFar表示遠裁剪面到眼睛的距離,注意zNear和zFar不能設置設置為負值(你怎么看到眼睛后面的東西)。
aspect表示裁剪面的寬w高h比,這個影響到視野的截面有多大。
下圖中又三個模型,這時我們想要看到全部三個模型,繪制方法見代碼:
void display(void) {glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除屏幕及深度緩存glLoadIdentity(); // 重置當前的模型觀察矩陣//glutSolidSphere(1.0, 400, 16); //繪製一個球體/*當您調用glLoadIdentity()之后,您實際上將當前點移到了屏幕中心,X坐標軸從左至右,Y坐標軸從下至上,Z坐標軸從里至外。OpenGL屏幕中心的坐標值是X和Y軸上的0.0f點。中心左面的坐標值是負值,右面是正值。移向屏幕頂端是正值,移向屏幕底端是負值。移入屏幕深處是負值,移出屏幕則是正值。glTranslatef(x, y, z)沿著 X, Y 和 Z 軸移動。根據前面的次序,下面的代碼沿著X軸左移1.5個單位,Y軸不動(0.0f),最后移入屏幕6.0f個單位。注意在glTranslatef(x, y, z)中當您移動的時候,您并不是相對屏幕中心移動,而是相對與當前所在的屏幕位置。*/glPushMatrix();glTranslatef(-2.5f,0.0f,-6.0f); // 左移 1.5 單位,并移入屏幕 6.0glRotatef(rtri,0.0f,1.0f,0.0f); // 繞Y軸旋轉三角形glBegin(GL_TRIANGLES); // 繪制三角形glColor3f(1.0, 0.0, 0.0);glVertex3f( 0.0f, 1.0f, 0.0f); // 上頂點glColor3f(0.0, 1.0, 0.0);glVertex3f(-0.5f,0.0f, 0.0f); // 左下glColor3f(0.0, 0.0, 1.0);glVertex3f( 0.5f,0.0f, 0.0f); // 右下glEnd(); // 三角形繪制結束glPopMatrix();//繪制四棱錐//glLoadIdentity();glPushMatrix();glTranslatef(4.0f, -0.5f, -6.0f);glRotatef(rtri, 0.0f, 1.0f, 0.0f);glBegin(GL_TRIANGLES);//繪製上頂點 左側面glColor3f(1.0f, 0.0f, 0.0f);glVertex3f(0.0f, 1.0f, 0.0f);glColor3f(0.0f, 1.0f, 0.0f);glVertex3f(-1.0f, 0.0f, 0.0f);glColor3f(0.0f, 0.0f, 1.0f);glVertex3f(0.0f, 0.0f, 1.0f);//右側面glColor3f(1.0f, 0.0f, 0.0f);glVertex3f(0.0f, 1.0f, 0.0f);glColor3f(0.0f, 0.0f, 1.0f);glVertex3f(0.0f, 0.0f, 1.0f);glColor3f(0.0f, 1.0f, 0.0f);glVertex3f(1.0f, 0.0f, 0.0f);//右后側面glColor3f(1.0f, 0.0f, 0.0f);glVertex3f(0.0f, 1.0f, 0.0f);glColor3f(0.0f, 1.0f, 0.0f);glVertex3f(0.0f, 0.0f, -1.0f);glColor3f(0.0f, 0.0f, 1.0f);glVertex3f(0.0f, 0.0f, -1.0f);//左后側面glColor3f(1.0f, 0.0f, 0.0f);glVertex3f(0.0f, 1.0f, 0.0f);glColor3f(0.0f, 0.0f, 1.0f);glVertex3f(0.0f, 0.0f, -1.0f);glColor3f(0.0f, 1.0f, 0.0f);glVertex3f(-1.0f, 0.0f, 0.0f);glEnd();glPopMatrix();//繪制茶壺glPushMatrix();glTranslatef(0.0f, 0.0f, -8.0f);glutWireTeapot(2.0f);glPopMatrix();//設置當前使用的顏色為白色glColor3f(1.0, 1.0, 1.0);glFlush();rtri += 0.3;rquad += 0.2; }可以設置gluPerspective函數為:?
?
gluPerspective(60.0f, fAspect, 1.0f, 800.0f);?
如果Fovy的值無限接近180,則什么也看不到,想象你怎么將眼睛睜開的上下角度是平角,不可能吧;
這里設置為170,如圖:
如果Fovy的值等于0,則什么也看不到(我閉上眼睛就是天黑);
Fovy值在0-180的范圍內,值越大,感覺物體越遠,值越小,感覺物體越近;
Fovy=10.0時:
Fovy值在180-360的范圍內,你會發現渲染的圖像反轉了過來(不是鏡像),就相當于你和你看到的東西一起倒了過來(腦補一下你眼前的東西跟你一起頭朝地,腳朝上);
Fovy=270時的效果:
下面是Fovy=90的效果:
?
?
是不是反過來了(注意,我這里三角形(左邊)和四棱錐(右邊)都有旋轉,主要看這三個模型的相對位置)。
zNear的值可以設置的很小,zFar的值可以設置的很大,這樣看的范圍更深一些;
如果一個模型的z坐標為ptz,ptz大于zFar或者ptz小于zNear你都將看不到改模型;
?
?
?
總結
以上是生活随笔為你收集整理的gluPerspective的具体含义的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 努比亚Z50 Ultra真机正面曝光:真
- 下一篇: B站去年给Up主分了91亿元!But:公