日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

gluPerspective的具体含义

發(fā)布時(shí)間:2023/12/15 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gluPerspective的具体含义 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

OpenGL有兩種投影:正射投影(垂直投影)和透視投影。透視投影通過指定一個(gè)平截頭體來定義視見體的范圍,平截頭體如下圖所示:

void gluPerspective (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar)

fovy是眼睛上下睜開的幅度,角度值,值越小,視野范圍越狹小(瞇眼),值越大,視野范圍越寬闊(睜開銅鈴般的大眼);

zNear表示近裁剪面到眼睛的距離,zFar表示遠(yuǎn)裁剪面到眼睛的距離,注意zNear和zFar不能設(shè)置設(shè)置為負(fù)值(你怎么看到眼睛后面的東西)。

aspect表示裁剪面的寬w高h(yuǎn)比,這個(gè)影響到視野的截面有多大。

下圖中又三個(gè)模型,這時(shí)我們想要看到全部三個(gè)模型,繪制方法見代碼:

void display(void) {glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除屏幕及深度緩存glLoadIdentity(); // 重置當(dāng)前的模型觀察矩陣//glutSolidSphere(1.0, 400, 16); //繪製一個(gè)球體/*當(dāng)您調(diào)用glLoadIdentity()之后,您實(shí)際上將當(dāng)前點(diǎn)移到了屏幕中心,X坐標(biāo)軸從左至右,Y坐標(biāo)軸從下至上,Z坐標(biāo)軸從里至外。OpenGL屏幕中心的坐標(biāo)值是X和Y軸上的0.0f點(diǎn)。中心左面的坐標(biāo)值是負(fù)值,右面是正值。移向屏幕頂端是正值,移向屏幕底端是負(fù)值。移入屏幕深處是負(fù)值,移出屏幕則是正值。glTranslatef(x, y, z)沿著 X, Y 和 Z 軸移動(dòng)。根據(jù)前面的次序,下面的代碼沿著X軸左移1.5個(gè)單位,Y軸不動(dòng)(0.0f),最后移入屏幕6.0f個(gè)單位。注意在glTranslatef(x, y, z)中當(dāng)您移動(dòng)的時(shí)候,您并不是相對(duì)屏幕中心移動(dòng),而是相對(duì)與當(dāng)前所在的屏幕位置。*/glPushMatrix();glTranslatef(-2.5f,0.0f,-6.0f); // 左移 1.5 單位,并移入屏幕 6.0glRotatef(rtri,0.0f,1.0f,0.0f); // 繞Y軸旋轉(zhuǎn)三角形glBegin(GL_TRIANGLES); // 繪制三角形glColor3f(1.0, 0.0, 0.0);glVertex3f( 0.0f, 1.0f, 0.0f); // 上頂點(diǎn)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(); // 三角形繪制結(jié)束glPopMatrix();//繪制四棱錐//glLoadIdentity();glPushMatrix();glTranslatef(4.0f, -0.5f, -6.0f);glRotatef(rtri, 0.0f, 1.0f, 0.0f);glBegin(GL_TRIANGLES);//繪製上頂點(diǎn) 左側(cè)面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);//右側(cè)面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);//右后側(cè)面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);//左后側(cè)面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();//設(shè)置當(dāng)前使用的顏色為白色glColor3f(1.0, 1.0, 1.0);glFlush();rtri += 0.3;rquad += 0.2; }

可以設(shè)置gluPerspective函數(shù)為:?

?

gluPerspective(60.0f, fAspect, 1.0f, 800.0f);

?

如果Fovy的值無限接近180,則什么也看不到,想象你怎么將眼睛睜開的上下角度是平角,不可能吧;

這里設(shè)置為170,如圖:

如果Fovy的值等于0,則什么也看不到(我閉上眼睛就是天黑);

Fovy值在0-180的范圍內(nèi),值越大,感覺物體越遠(yuǎn),值越小,感覺物體越近;

Fovy=10.0時(shí):

Fovy值在180-360的范圍內(nèi),你會(huì)發(fā)現(xiàn)渲染的圖像反轉(zhuǎn)了過來(不是鏡像),就相當(dāng)于你和你看到的東西一起倒了過來(腦補(bǔ)一下你眼前的東西跟你一起頭朝地,腳朝上);

Fovy=270時(shí)的效果:

下面是Fovy=90的效果:

?

?

是不是反過來了(注意,我這里三角形(左邊)和四棱錐(右邊)都有旋轉(zhuǎn),主要看這三個(gè)模型的相對(duì)位置)。

zNear的值可以設(shè)置的很小,zFar的值可以設(shè)置的很大,這樣看的范圍更深一些;

如果一個(gè)模型的z坐標(biāo)為ptz,ptz大于zFar或者ptz小于zNear你都將看不到改模型;

?

?

?

總結(jié)

以上是生活随笔為你收集整理的gluPerspective的具体含义的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。