您好,登錄后才能下訂單哦!
在我們用OpenGL畫(huà)圖的時(shí)候免不了需要知道自己建立的opengl坐標(biāo)的x,y,z軸的極值(也就是最大表示范圍)。那么該如何來(lái)測(cè)試,下面一起來(lái)看看:
首先,你需要知道自己是按照什么視角來(lái)建立的坐標(biāo)系,我的是按照NeHe的那本書(shū)來(lái)的:
[cpp] view plain copy
void GLWidget::resizeGL(int width, int height)
{
if(0 == height)
height = 1;//To prevent a side is 0
glViewport(0, 0, (GLint)width, (GLint)height);//reset current window
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (width >= height)
gluPerspective(45.0, (GLdouble)width / (GLdouble)height, 0.1, 100.0);
else
gluPerspective(45.0, (GLdouble)height / (GLdouble)width, 0.1, 100.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
(1)視角確定:
關(guān)鍵就是這句話:gluPerspective(45.0, (GLdouble)height / (GLdouble)width, 0.1, 100.0);
表示視角是45度,z軸距離你的眼睛是從0.1倍到100倍,這兩個(gè)參數(shù)有什么呢?說(shuō)白了,它規(guī)定了你可以放大縮小的范圍,比如,你將100改成50,那么你最多只能縮小到50倍,而0.1那里的參數(shù)是不能設(shè)置成負(fù)數(shù)的,只能是正數(shù),那么,這里就設(shè)置了0.1,來(lái)盡量的跟人眼距離近點(diǎn)。
(2)z軸偏移量的初始值:(我測(cè)試的我的x軸最大為1的時(shí)候,z軸偏移量設(shè)置為-1.8正好)
[cpp] view plain copy
Scalez = -1.8f; //too small change to 0.1f, and -1.8f represents zero point(that mains
//the value is equal to normal view)
Scalez表示我的z軸偏移量。
(3)具體測(cè)試:
首先,在你的畫(huà)圖函數(shù)中先畫(huà)一個(gè)(-1.0f, 0.0f, 0.0f)到(1.0f, 0.0f, 0.0f)的直線,用這條直線來(lái)測(cè)試你的z軸偏移量為多少合適。
然后,在初始化函數(shù)中將你的z軸偏移量變量設(shè)為-0.1看看(即距離你人眼最近的那個(gè)點(diǎn)),Scalez為-0.1。如果直線橫穿屏幕,那么,減少Scanlez的值,一般可以以每次0.2的比例進(jìn)行減少,一直到你可以完整的看到一條直線,而且還未到邊境。例如,我的:(此時(shí),我的Scalez是-2.0f)
此時(shí),可以將你的Scalez值增加0.2(那么,此時(shí)我的Scalez為-1.8),如果看到橫穿了屏幕,那么此前的值就是當(dāng)你需要橫軸范圍是(-1,1)時(shí),Scanlez(縱軸偏移量)的值。這個(gè)時(shí)候我就知道了,我的縱軸偏移量應(yīng)該設(shè)為-1.8f,我的橫軸,縱軸才剛好合適。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。