opengl編程學習筆記(三)(2D繪圖)

來源:互聯網
上載者:User

在opengl中可以繪製二維映像,分為兩種,BITMAP和image

1.bitmap和image的區別有:

bitmap中對映像的每個像素只儲存一位(0或1),用來表示用使用中色彩繪製還是不繪製,而image是映像的每個像素儲存可能很多位,儲存它的各個通道的顏色資訊;

bitmap是繪製在三位空間中的一群點,其中每個點都受各變換矩陣的影響,等同於一群Gl_begin(GL_POINTS)操作聯合在一起 ,而image是直接繪製在幀緩衝上,在繪製原點所投影到的螢幕座標處開始繪製,就是直接在二維螢幕上繪製,就像普通的二維繪製一樣,他只有那個繪製的原點受變換矩陣的影響,比如當原點的位置被裁剪掉之後,整張圖片也將消失。

bitmap是繪製在三位情境的一些點,也就是每個點都會有法向等資訊,回收光照等影響,拉近看還會發現點間的距離,image是直接寫入幀緩衝的,繪製的顏色就是最終看到的顏色, 像素點間不會有距離

2.bitmap的繪製步驟

glColor3f制定當前繪製的點的顏色

glRasterPos2f定義當前的繪製原點(OPENGL繪製的原點是在左下角的,即定義之後,都是從這點開始按照從左至右,從下至上繪製的)

只有當調用了 glRasterPos2f之後,他前面的glColor3f才會起作用,所以要先設定顏色,再定義原點

void glBitmap( GLsizei width,  繪製寬度的點數
  GLsizei height, 繪製高度 的點數
  GLfloat xorig, 在以原點的二維座標系中的X座標 
  GLfloat yorig, 在以原點的二維座標系中的Y座標 
  GLfloat xmove,繪製後原點的橫向位移
  GLfloat ymove,繪製後原點的縱向位移
  const GLubyte * bitmap 儲存的資料);
繪製儲存在記憶體中的資料

 其中bitmap中儲存的資料按照從左下角起8位對其(一個GLUBYTE),例如的資料就應該因該儲存為

 

0xc0, 0x00, 0xc0, 0x00, 0xc0,0x00, 0xc0, 0x00, 0xc0, 0x00,0xff, 0x00, 0xff, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00,0xff, 0xc0, 0xff, 0xc0。如果width不是八的倍數,比如是30個點,那麼這一行仍然要佔8的倍數位,應佔用4個位元組,最後面的兩位將被自動捨棄。

 

 bitmap更適合繪製顏色較單一,且需要能進行三維觀察的圖

他也可以繪製彩色圖,只是要每個點繪製前改變當前繪製顏色,

 

2.image的繪製步驟

 2.1glPixelStorei()設定資料的儲存和解讀方式,這裡可以進行的常用設定有

   GL_PACK_SWAP_BYTES改變一個像素各個成分(不是色彩通道的順序)的順序,比如原先的儲存順序為(顏色、深度、索引),顛倒後為(索引、深度、顏色),而一個顏色的通常都儲存為RGB。這個設定通常不用改變

  剪裁映像:比如我們只要繪製在記憶體中映像資料中的一個矩形地區,原圖為640*480,我們需要繪製從(10,10) 開始長100,寬100的地區到螢幕。我們需要先用glPixelStorei(GL_UNPACK_ROW_LENGTH,640)設定映像的原寬為640,再用glPixelStorei(GL_UNPACK_SKIP_ROWS,10)設定我們跳過了10行,然後用glPixelStorei(GL_UNPACK_SKIP_PIXELS,10)設定我們又把起點跳過了10個像素(列),最後調用glDrawPixels(100,100...)來繪圖。

  2.2glPixelTransferf設定像素的傳遞和映射,用這個操作,可以在儲存或讀取時將特定的顏色映射到一種顏色,或者將特定顏色的值擴大縮小等

 2.3glPixelZoom(x,y)設定幾何變換,這將設定最後映像的一個像素在X/Y方向上被放大的倍數,都是2則放大四倍,如果為負數在讀取時進行鏡像

 2.4調用glDrawPixels繪製儲存在記憶體中的映像到幀緩衝上

      或調用glReadPixels讀取幀緩衝上的資料到記憶體中(可以做用) 

      或調用glCopyPixels拷貝幀緩衝的一處資料到幀緩衝的另一處(覺得很適合做賽車遊戲的後視鏡 ^^)

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.