我按照網上的例子,畫了這樣一個圖形。如下圖:

對應的OpenGL函式是這樣:
glTranslatef(0.0f, 0.0f, -6.0f); //移動物體到顯示區
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); //以邊線方式繪制三角形
//繪制3個三角形的三個頂點
glBegin(GL_TRIANGLES);
glVertex3f(-0.6f, 0.0f, 0.0f);
glVertex3f(0.6f, 0.0f, 0.0f);
glVertex3f(0.0f, 0.15f, 0.6f);
glVertex3f(-0.6f, 0.0f, 0.0f);
glVertex3f(0.0f, 0.15f, 0.6f);
glVertex3f(0.0f, 0.9f, 0.6f);
glVertex3f(0.0f, 0.9f, 0.6f);
glVertex3f(0.0f, 0.15f, 0.6f);
glVertex3f(0.6f, 0.0f, 0.0f);
glEnd();
關鍵的是glVertex3f(x,y,z);
這個數值跟螢屏當中的螢屏坐標的關系,想請教這方面的朋友。
我在三角形頂部這里滑鼠單擊,獲取的坐標數值是:如下圖所示:

我就想知道,現在我想滑鼠任意的畫線,這個坐標點確定了,如何轉換成opengl的坐標數值,包括模型的坐標值。
uj5u.com熱心網友回復:
// 目標:測驗OpenGL視窗視口坐標// 結果:glutInitWindowSize(640, 480); 指定的是windows概念中視窗(看得見,可移動,
// 最大化,最小化等操作)大小,以像素為單位 .
// OpenGL中的視窗和視口是邏輯上的概念,其中視窗范圍是畫圖時指定頂點坐標使用的坐標,
// 而視口范圍是將windows中概念中實際視窗映射成的范圍
#define GLUT_DISABLE_ATEXIT_HACK
void myInit(void)
{
glClearColor(1.0, 1.0, 1.0, 0.0); // 設定背景色為白色
glColor3f(0.0f, 0.0f, 0.0f); // 繪圖顏色為黑色
glPointSize(4.0); // 設定點大小為4x4像素
// 1. 如果不做任何處理,OpenGL默認坐標范圍為 x=[-1,1] y=[-1,1]
// 2. 只指定世界視窗坐標范圍,默認視口坐標范圍與世界視窗一樣,按世界視窗繪圖即可
/*glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, 500, 0.0, 100);*/
// 3. 同時指定世界視窗坐標和視口范圍,會發生從世界視窗坐標轉換為視口坐標,按世界視窗繪圖即可
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-2, 2, -1, 1);
glViewport(73, -250, 11, 100);
}
uj5u.com熱心網友回復:
可否轉換呢?給一個提示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/284688.html
標籤:圖形處理/算法
