- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以基本上我试图了解像素以及 OpenGL 在使用 GL_POINTS 渲染它们时如何处理它们(如果它也适用于纹理缓冲区):
这是渲染到屏幕后上传的结果图像(我试图放更多更小的但我只允许两个链接)
首先是我编写的程序及其在更改以下值时的结果:
这里是处理上传像素和更新它们的代码,主要关注值变量,当我改变它时,我改变了图片的大小
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. IfGL_PROGRAM_POINT_SIZE
is enabled, then the point size comes from the output variable floatgl_PointSize
. If it is disabled, the point size is constant for all points in a primitive, and is set by theglPointSize
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/
当我将鼠标悬停在 GL_POINTS 上时,它会显示 #define GL_POINTS 0x0000 它属于原始类别 同样,GL_POINT 属于“多边形”类别,并且显示描述: #define GL
在现代硬件上,使用完整三角形 (GL_TRIANGLES) 绘制场景与仅绘制顶点 (GL_POINTS) 在性能上有什么不同吗? GL_POINTS 的初始化方式如下: glPointSize(1.0
我有这段代码应该在屏幕上绘制一些点: glBegin(GL_POINTS); for(int i = 0; i < x; i++) { for(int j = 0; j
我有一个火灾模拟,包含大量带纹理的GL_POINTS。每个粒子都有一个透明的背景,当从特定角度面对火焰时,混合工作正常。然而,从其他角度查看它会显示背景,这些背景应该是透明的,遮挡了在其他人后面渲染的
我正在 View 中间绘制(我想绘制)一个点,我在 AVD(Nexus 4、Android 4.4.2 - API 级别 19、Intel Atom (x86)、RAM 768 ,使用主机 GPU),
我有一个用纯色绘制粒子的着色器。我想让着色器对 FBO 纹理进行采样,以便每个粒子都可以作用于它“背后”的颜色。看起来应该很简单,但不是。 我已经简化了代码,这样我希望我的 FBO 被绘制在每个粒子的
我尝试使用下面的代码用opengl绘制一个正方形像素 glPointSize(5.0f); glBegin(GL_POINTS); glVertex3f(1.0f, 1.0f, 1.0f); glEn
我想用 GL_POINTS 绘制一些东西,但在 ~totalpoint/3 结果开始后与输入相差 1 个像素 我尝试了不同的 glOrtho 和 glViewport 参数,但没有任何改变 我的测试程
我正在尝试在 Android 中使用 OpenGL ES 生成随机等高线图。我创建了一个 Point 类用于在屏幕上绘制点,但我不知道绘制随机点的方法应该是什么。 例如,为了显示 2 个点,我创建了
如何在 opengl 中为 GL_POINTS 启用两侧照明?似乎 glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); 仅适用于构面,但不适用于 GL_P
我正在绘制 GL_POINTS 使用glDrawArrays(GL_POINTS, 0, numberOfPoints)使用 gl_PointSize 在我的顶点着色器中设置每个点的大小。我从 glm
我正在尝试向我的旧 OpenGL 程序添加一些着色器,该程序绘制了大量 GL_POINTS 和一些 GL_LINES。 我创建了这两个着色器: 顶点着色器: void main() { vec
如何使我的 GL_POINT 更大?我正在使用 glPointSize,但它只能工作到一定大小。所以如果我写 glPointSize(100); 大小相同 glPointSize(500); 如何使其
一段时间以来,我一直在使用 OpenGL 来制作 3D 应用程序,但我从来没有真正理解在生产阶段使用 GL_POINT 和 GL_LINES 原始绘图类型用于 3D 游戏。 (哪里)OpenGL 中的
pyglet 初学者。我在使用 pyglet.graphicss.draw() 绘制 GL_POINT 时遇到问题。我希望在下一个像素缓冲区上绘制这个 GL_POINT ,但似乎该函数不会保留在下一个
所以基本上我试图了解像素以及 OpenGL 在使用 GL_POINTS 渲染它们时如何处理它们(如果它也适用于纹理缓冲区): 这是渲染到屏幕后上传的结果图像(我试图放更多更小的但我只允许两个链接) 首
这是一个作业,我需要使用 OpenGL 来渲染一条线,但只使用 GL_POINTS。 我正在用 P1(-1,-1) 到 P2(1,-1) 的水平线对其进行测试。 我的函数使用直线函数 y=mx+c:
我有一个由很多点组成的场景,我用它绘制了 glBegin(GL_POINTS); glVertex3f(x[i],y[i],z[i]); // the points are displayed pro
我必须支持一些使用以下代码绘制点云的遗留代码: glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(3, GL_FLOAT, 0, (float
绘制大量点时,有没有办法改变点的大小?我知道有 glPointSize(float),但是有没有办法在“批处理”或数组中做到这一点? 我希望点具有基于数据属性的不同大小。例如每个点都有 x、y、z 和
我是一名优秀的程序员,十分优秀!