![](/img/trans.png)
[英]OpenGL glDrawArrays for GL_POINTS and GL_LINES are on different pixels for same points
[英]Trying to understand pixels and GL_POINTS in OpenGL
所以基本上我使用GL_POINTS渲染時,他們試圖讓我周圍的像素頭,以及如何的OpenGL與他們交易(如果它適用於質地緩沖區也):
下面是渲染到屏幕后的結果上傳的圖片(我試圖把更多的小的,但我只被允許兩個鏈接)
從這里開始是我編寫的程序及其更改以下所述值時的結果:
這是處理像素上傳和更新的代碼,主要注意值變量,當我更改它時,我更改圖片的大小
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 :
將點柵格化為給定窗口空間大小的屏幕對齊的正方形。 大小可以通過兩種方法給出:通過上一個活動頂點處理着色器階段或上下文狀態。 要從着色器設置點大小,請啟用帶參數
glEnable
(GL_PROGRAM_POINT_SIZE
),以從程序中設置點大小。 如果啟用了GL_PROGRAM_POINT_SIZE
,則點大小來自輸出變量floatgl_PointSize
。 如果它被禁用,點的大小是在原始的所有點不變,並通過設置glPointSize
功能。大小定義點正方形的每一側占用的窗口像素數。 該點的位置定義了該正方形的中心。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.