簡體   English   中英

試圖了解OpenGL中的像素和GL_POINTS

[英]Trying to understand pixels and GL_POINTS in OpenGL

所以基本上我使用GL_POINTS渲染時,他們試圖讓我周圍的像素頭,以及如何的OpenGL與他們交易(如果它適用於質地緩沖區也):

下面是渲染到屏幕后的結果上傳的圖片(我試圖把更多的小的,但我只被允許兩個鏈接)

http://i.imgur.com/hcdloMD.png

http://i.imgur.com/9GBtK9m.png

從這里開始是我編寫的程序及其更改以下所述值時的結果:

這是處理像素上傳和更新的代碼,主要注意值變量,當我更改它時,我更改圖片的大小

   glDisable(GL_POINT_SMOOTH);
   int i = 0, j=0, k=0;

   GLuint vao;

   glGenVertexArrays(1, &vao);
   glBindVertexArray(vao);

   GLfloat point[3] = {-1.0f, -1.0f, 0.0f};
   GLfloat color[3];

   float value = 3.0f;

   float incrementX = value/640.0f;
   float incrementY = value/480.0f;


   while(j<256){
      //initialize starting position for x for each line 
      point[0] = -1.0f; 

      //run the width
      while(k<256){         
         //upload vertex position to GL server 
         glVertexAttrib3fv(0,point);      

         //deals with updating colour
         color[2] = data[i+0]/255.0f;            //B
         color[1] = data[i+1]/255.0f;            //G
         color[0] = data[i+2]/255.0f;            //R
         //upload texture data to GL server
         glVertexAttrib3fv(1, color);

         //draws array
         glDrawArrays(GL_POINTS, 0, 1);
         //deals with updating incrementors
         point[0]+=incrementX;   //moving forward in appropriate units for the size of width
         k++;
         i+=3;
      }
      //restart width
      k=0;;
      j++; 
      //update height
      point[1]+=incrementY;    

   }

   glXSwapBuffers ( dpy, glxWin );
   sleep(6);

我的問題是關於實際像素

我明白這一點實際上已經沒有任何區域,所有的OpenGL看到的是點在2D平面的位置,它使得當它被擴大會發生什么意義

然而,當我使圖像小我感到困惑的像素級別時,它變得越來越小,會發生什么,讓我們說,因為它向0即0.000001趨向

確定屏幕上的像素有限制嗎?

這是否意味着當說是給定像素正常大小的1/100時,opengl實際上將像素划分為合適的圖像?

因為可以將圖像縮小到一個點

當然,opengl仍不將單個顏色繪制到屏幕上一個像素的一部分嗎? 還是因為點位置始終僅在一個像素內,所以通過反復繪制到一個像素來迭代產生的顏色?

還是將一個像素進一步划分為更小的像素大小?

編輯:

我對沒有大小點的假設是不是一個假設,但我從“紅書”讀

“點由單個頂點表示。頂點表示在四維齊次坐標的點。 這樣,一個點確實沒有區域,因此在OpenGL它是真正用於顯示的正方形區域中的類似物(或繪制緩沖液)。當渲染分,OpenGL的確定哪些像素由點使用一組被稱為光柵化規則的規則覆蓋。用於在OpenGL光柵化的點的規則是非常簡單---樣品被認為是由點所覆蓋,如果它落在在以窗口坐標中的點位置為中心的正方形內。”

所以我想我要了解的是這里的柵格化過程

您認為點圖元的面積為零是不正確的。

點有大小。 它們默認為1px,但是可以通過glPointSize函數或gl_PointSize着色器變量來更改其屏幕空間大小長度。

OpenGL Wiki

將點柵格化為給定窗口空間大小的屏幕對齊的正方形。 大小可以通過兩種方法給出:通過上一個活動頂點處理着色器階段或上下文狀態。 要從着色器設置點大小,請啟用帶參數glEnableGL_PROGRAM_POINT_SIZE ),以從程序中設置點大小。 如果啟用了GL_PROGRAM_POINT_SIZE ,則點大小來自輸出變量float gl_PointSize 如果它被禁用,點的大小是在原始的所有點不變,並通過設置glPointSize​功能。

大小定義點正方形的每一側占用的窗口像素數。 該點的位置定義了該正方形的中心。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM