gpt4 book ai didi

c++ - 试图了解 OpenGL 中的像素和 GL_POINTS

转载 作者:行者123 更新时间:2023-11-28 05:51:44 25 4
gpt4 key购买 nike

所以基本上我试图了解像素以及 OpenGL 在使用 GL_POINTS 渲染它们时如何处理它们(如果它也适用于纹理缓冲区):

这是渲染到屏幕后上传的结果图像(我试图放更多更小的但我只允许两个链接)

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 看到的只是这个点作为二维平面中的一个位置,它可以理解当它被放大时会发生什么

然而,当我使图像越来越小时,我对像素级别上发生的事情感到困惑,当它变得越来越小时,可以说它趋向于 0,即 0.000001

屏幕上的像素肯定有限制吗?

这是否意味着 opengl 实际上会划分像素以使图像适合给定像素的正常大小的 1/100?

因为图像可以越来越小到点就是一个点

确定 opengl 不是仍在将各种颜色绘制到屏幕上一个像素的部分吗?或者它通过重复绘制到一个像素来迭代的颜色,因为点位置总是只在一个像素内?

还是将一个像素进一步划分为更小的像素尺寸?

编辑:

我关于点没有大小的假设不是假设,而是我从“红皮书”上读到的

“点由单个顶点表示。顶点表示四维齐次坐标中的一个点。因此,一个点实际上没有面积,因此在 OpenGL 中它实际上是一个正方形区域的类比显示(或绘制缓冲区)。渲染点时,OpenGL 确定使用一组称为的规则,哪些像素被该点覆盖光栅化规则。在 OpenGL 中光栅化一个点的规则相当直截了当——如果样本落在以点在窗口坐标中的位置为中心的正方形内,则该样本被认为被点覆盖。”

所以我想我想了解的是这里的光栅化过程

最佳答案

您假设点图元的面积为零是不正确的。

点有大小。它们默认为 1 像素,但它们的屏幕空间大小长度可以通过 glPointSize 函数或 gl_PointSize 着色器变量进行更改。

来自OpenGL wiki :

Points are rasterized as screen-aligned squares of a given window-space size. The size can be given in two methods: by the last active vertex processing shader stage or by the context's state. To set the point size from a shader, enable the glEnable with argument (GL_PROGRAM_POINT_SIZE) to set the point size from the program. If GL_PROGRAM_POINT_SIZE is enabled, then the point size comes from the output variable float gl_PointSize​. If it is disabled, the point size is constant for all points in a primitive, and is set by the glPointSize​ function.

The size defines the number of window pixels that each side of the point's square takes up. The point's position defines the center of that square.

关于c++ - 试图了解 OpenGL 中的像素和 GL_POINTS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35117735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com