日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

输出图元

發布時間:2023/12/14 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 输出图元 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

輸出圖元

  • OpenGL中指定二維世界坐標系統
  • OpenGL畫點函數
  • OpenGL畫線函數

圖形軟件包中用于描述各種圖形元素的函數稱為 圖形輸出原語,或簡稱為 圖元。描述對象幾何要素的輸出圖元一般稱為 幾何圖元

OpenGL中指定二維世界坐標系統

可利用gluOtho2D命令設定一個二維笛卡爾坐標系。該函數的變量是指定顯示圖形的x和y坐標范圍的四個值。由于gluOtho2D函數指定正交投影,因此也要確定坐標值放進了OpenGL投影矩陣中。此外,我們可以將世界坐標范圍設定前的投影矩陣定義為一個單位矩陣。這樣可保證坐標值不會受以前設置的投影矩陣的影響。因此,可通過下列語句定義屏幕顯示窗口的坐標系統:

glMatrixMode(GL_PROJECTION) glLoadIdentity() gluOrtho2D(xmin,xmax,ymin,ymax)

如此,顯示的窗口被指定為其左下角位于坐標(xmin,ymin)處,右上角位于坐標(xmax,ymax)處。
隨后可使用gluOrtho2D語句描述的坐標系統來指定一個或多個要顯示的圖元。如果一個圖元的坐標系范圍完全在顯示窗口的坐標范圍內,則該圖元將完整地顯示出來。否則,僅僅在顯示窗口坐標范圍內的圖元被顯示。同樣,在建立圖形的幾何描述時,所有OpenGL圖元的位置必須用gluOrtho2D函數定義的坐標系統中的絕對坐標給出。

OpenGL畫點函數

要描述一個點的幾何要素,只需在世界坐標系中制定一個位置。然后該坐標系位置和場景中已有的其他幾何描述一起被傳遞給觀察子程序。除非制定其他屬性值,OpenGL圖元按默認的大小和顏色來顯示。默認的圖元顏色是白色,而默認的點大小等于單一屏幕像素大小。
使用下面的函數指定一個點位置的坐標值:
glVertex* ()
這里的星號表示該函數要有后綴碼。這些后綴碼用于指明空間維數、坐標值變量的數據類型和可能的向量形式坐標描述。在glBegin函數和glEnd函數之間必須插入對glVertex函數的調用。
glBegin函數的變量用于指定要顯示的輸出圖元的類型,而glEnd函數沒有變量。對于點的繪制,glBegin函數的變量是符號常量GL_POINTS。因此,一個點位置的OpenGL描述形式是:

glBegin(GL_POINTS) glVertex* () glEnd()

OpenGL中的坐標位置可以有二維、三維或四維。glVertex的后綴為2,3,4表示其坐標位置的維數。四維描述意味著齊次坐標表示。由于OpenGL將二維作為三維的特殊情況來處理,任意(x,y)坐標描述等同于三維坐標描述(x,y,0)。此外,OpenGL在內部用四維坐標表示頂點,因此上面的描述等同于四維坐標(x,y,0,1)。
需要指出在坐標的數值描述中使用什么數據結構。這由glVertex函數的第二個后綴來完成。用于指定數值數據類型的后綴是:i(整數)、s(短整數)、f(浮點數)和d(雙精度浮點數)。
最后,glVertex中可以使用顯式的坐標值或引入矩陣形式坐標位置的單個變量。如果使用矩陣形式坐標位置,則需要第三個后綴碼:v(“向量”)
下面為一個點繪制的例子:

from OpenGL.GLUT import * from OpenGL.GLU import * from OpenGL.GL import *def point():glClear(GL_COLOR_BUFFER_BIT)glColor3f(0.0,0.4,0.2) #點的顏色為綠色glBegin(GL_POINTS)glVertex2i(50,100)glVertex2i(75,150)glVertex2i(100,200)glEnd()glFlush()def init():glClearColor(1.0,1.0,1.0,0.0)glMatrixMode(GL_PROJECTION)gluOrtho2D(0.0,150.0,0.0,250.0)if __name__=="__main__":glutInit()glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB)glutInitWindowPosition(50,100)glutInitWindowSize(400,300)glutCreateWindow(u'Point')init()glutDisplayFunc(point)glutMainLoop()

運行后,結果如下圖所示:

也可定義點的坐標值以矩陣的形式描述。在Python中,可采用元組和列表的形式。繪制程序如下:

def point():glClear(GL_COLOR_BUFFER_BIT)glColor3f(0.0,0.4,0.2)point1=[50,100]point2=(75,100)point3=[100,200]glBegin(GL_POINTS)glVertex2iv(point1)glVertex2iv(point2)glVertex2iv(point3)glEnd()glFlush()

OpenGL畫線函數

在OpenGL中,和選擇一個點位置一樣,使用glVertex函數選擇單個端點的坐標位置。有三個OpenGL符號常量可以用于指定如何把這一串端點位置連接成一組直線段。默認情況下,每一符號常量顯示白色實線。
(1)GL_LINES可連接每一對相鄰端點而得到一組直線段。通常,由于OpenGL僅在線段共享一個頂點時承認其相連;交叉但不共享頂點的線段則不被承認其相連。如果只描述了一個端點則什么也不會顯示,如果列出的端點數為奇數則最后一個端點不被處理。
(2)GL_LINE_STRIP可以獲得折線。此時,顯示從第一個端點到最后一個端點之間一組首尾相連的線段。如果不列出至少兩個坐標位置,則什么也不顯示。
(3)GL_LINE_LOOP生成封閉折線。將最后一個端點與第一個端點相連接。如下是一個繪制五角星的程序:

from OpenGL.GLUT import * from OpenGL.GLU import * from OpenGL.GL import * points=[[80,80],[20,20],[40,120],[70,20],[10,80]]def star():glClear(GL_COLOR_BUFFER_BIT)glColor3f(0.0,0.4,0.2) #線的顏色為綠色glBegin(GL_LINE_LOOP)for point in points:glVertex2iv(point)glEnd()glFlush()def init():glClearColor(1.0,1.0,1.0,0.0)glMatrixMode(GL_PROJECTION)gluOrtho2D(0.0,150.0,0.0,150.0)if __name__=="__main__":glutInit()glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB)glutInitWindowPosition(50,100)glutInitWindowSize(400,300)glutCreateWindow(u'Stat')init()glutDisplayFunc(star)glutMainLoop()

結果如圖所示:

總結

以上是生活随笔為你收集整理的输出图元的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。