得到的繪圖結果如下圖所示,座標軸的原點位置永遠固定在螢幕座標的左下角為起點(50,50)處。同時根據滑鼠的移動,座標軸模型會在其原點上旋轉。
1.固定點繪製:
思路:為了在螢幕固定位置畫點p,我們可以先在空間座標上某個位置繪製一點(這一點在投影到螢幕中的位置好確定),然後再移動到相應的位置p』,使得p』投影到螢幕時位置正好為p。
當空間投影面如上定義時,我採用的方法是:先在投影面的座標原點o(0,0)處定義點p,這時點p對映到螢幕座標時應顯示在螢幕上的o點處。但真實的點應該定義在p』處。可見需要對其平移到p』處.那麼就要計算平移距離transx,transy.
投影面的平移距離是可以根據螢幕的平移距離計算出來的。螢幕座標o移動到p(50,50)處時,x向左平移w/2-50,y向下平移h/2-50。由於投影面與螢幕是成比例的,乙個畫素對應的空間座標長度就是20/h(或者( 寬比寬)20.0/h*w/w,他們是相同的)。因此畫素移動的距離為(w/2-50,h/2-50),則座標移動的距離為((w/2-50)*20/h,(h/2-50)*20/h).
2.座標軸繞固定點旋**
思路:簡單的旋轉變化,但是由於opengl的旋轉變化都是相對原點的,所以產生旋轉時,要先在原點位置處進行旋轉操作,後才能進行平移操作。
**:
#include using namespace std;
#includeglfloat transx,transy;
glfloat scale;
int primw=300;
int primh=300;
glfloat rotatex=0,rotatey=0;
glint mousepx,mousepy;
void rend(void)
void reshape(int w, int h)
else }
void motion(int x, int y)
{ int w,h;
w=glutget(glut_window_width);
h=glutget(glut_window_height);
if(0<=x && x<=w && 0<=y && y<=h)
{ rotatex=(mousepy-y)/(glfloat)h*360;
rotatey=(mousepx-x)/(glfloat)w*360;
/* cout<
opengl 螢幕座標
建立opengl模型過程 opengl座標變換很有特點,為了簡單描述先定義2個座標系 1 世界座標系 無論如何變換,世界座標系都不動,以螢幕中心為原點 0,0,0 你面對螢幕,你的右邊是x正軸,上面是y正軸,螢幕指向你的為z正軸。2 當前繪圖座標系 即區域性座標系 當前繪圖座標系是繪製物體時的座標系...
OpenGL 螢幕座標向OpenGL座標轉換
螢幕座標向opengl座標轉換 很多人用opengl繪圖會遇到乙個問題即螢幕座標向opengl座標轉換,在網上流傳著如下類似的 glint viewport 4 gldouble modelview 16 gldouble projection 16 glfloat winx,winy,winz g...
螢幕座標向OpenGL座標轉換
很多人用opengl繪圖會遇到乙個問題即螢幕座標向opengl座標轉換,在網上流傳著如下類似的 glint viewport 4 gldouble modelview 16 gldouble projection 16 glfloat winx,winy,winz gldouble posx,pos...