14.4 OpenGL图元装配和光栅化:点

2024-02-13 14:52
文章标签 opengl 装配 光栅 图元 14.4

本文主要是介绍14.4 OpenGL图元装配和光栅化:点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点 Points

在OpenGL中,点的绘制通过生成一组围绕顶点的方形或圆形片段实现。

每个顶点关联一个点大小属性,控制该点所呈现形状的大小。如果启用了程序点大小模式(通过Enable(GL_PROGRAM_POINT_SIZE)),则从最后一个顶点处理阶段输出(可能被裁剪过的)内置变量gl_PointSize获取点的实际大小,并将其限制在实现相关的点大小范围内。若gl_PointSize写入的值小于等于零或者未写入值,则结果未定义。

当禁用程序点大小模式时,可使用PointSize(float size)函数指定点的大小,默认值为1.0。

如果启用了多重采样,实现可能会选择对点的alpha通道进行淡化而不是让点宽低于某个阈值。在这种情况下,光栅化的点宽度根据给定公式计算,并且会有一个淡化系数(fade factor)。

  • width = ( derived_size ≥ threshold ) ? derived_size : threshold;
  • fade = ( derived_size ≥ threshold ) ? 1:power(derived_size / threshold, 2);

点淡化阈值(threshold)可通过调用PointParameter*函数并设置pnamePOINT_FADE_THRESHOLD_SIZE来指定。

此外,点精灵纹理坐标的原点可以通过PointParameter*命令设置,其中pnamePOINT_SPRITE_COORD_ORIGIN,param可以是LOWER_LEFTUPPER_LEFT,默认值为UPPER_LEFT。这样可以控制点精灵上纹理坐标的定位方式。

void glPointSize( float size );
  • 以像素为单位,设置渲染点的大小。
void glPointParameter{if}( enum pname, T param );
void glPointParameter{if}v( enum pname, const T *params );
  • 设置点参数(POINT_FADE_THRESHOLD_SIZE、POINT_SPRITE_COORD_ORIGIN)。

基本点的光栅化 Basic Point Rasterization

  • 当一个点进行光栅化时,它会以点坐标(x, y)为中心,边长等于GL_POINT_SIZE的正方形区域内,为每个像素生成片段(fragment)。
  • 对于点精灵的纹理贴图,内置的片段着色器变量gl_PointCoord提供了在点精灵正方形区域内的标准化纹理坐标(s 和 t)。
  • 计算这些纹理坐标 s 和 t 的公式取决于通过POINT_SPRITE_COORD_ORIGIN指定的原点,其可以是LOWER_LEFTUPPER_LEFT
    • 如果是LOWER_LEFT,s从左到右从0到1水平变化,t从下到上从0到1垂直变化。
    • 如果是UPPER_LEFT,s从左到右从0到1水平变化,t从上到下从0到1垂直变化。
  • 实现并不需要支持所有可能的点大小,但必须提供宽度为1.0的支持。
  • 如果请求的宽度不受支持,则使用最接近的支持宽度替代。

点光栅化的状态 Point Rasterization State

  • 浮点类型的点宽度(Point Width);
  • 顶点程序点大小模式(Vertex Program Point Size Mode);
  • 点精灵纹理坐标原点(Point Sprite Texture Coordinate Origin);
  • 浮点类型的点淡化阈值大小(Point Fade Threshold Size);

点的多重采样光栅化 Point Multisample Rasterization

MULTISAMPLE模式被启用,并且帧缓冲区的SAMPLE_BUFFERS值为1时,表明系统支持多重采样。在这种情况下,点的光栅化过程会发生变化:

  • 点的光栅化不再简单地对应于单个像素,而是对每个与点中心区域相交的帧缓冲区像素的所有采样点生成片段(fragment)。这个中心区域是一个边长等于当前点宽度的正方形。
  • 如果某个采样点位于这个正方形区域内,则对应的覆盖位(coverage bit)会被置为1,否则为0。这意味着对于一个像素内的多个子采样点,如果它们与点的边界有交集,那么该像素将被部分或全部覆盖。
  • 与这些样本点相关的所有数据(例如颜色、深度、纹理坐标等)都取自正在被光栅化的那个点的数据,而不是根据样本位置进行插值。
  • 尽管采用了多重采样,但支持的点尺寸集合与不使用多重采样的点精灵(Point Sprites)相同。也就是说,即使在多采样环境下,点的大小仍然受到同样范围的支持和限制。

这篇关于14.4 OpenGL图元装配和光栅化:点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/705823

相关文章

读Spring实战(第四版)概括—装配Bean

很久很久以前读过Spring实战(第三版),因为第三版和第四部差异还是特别明显的,在整体思想上有了比较重大的改变,比如用注解和JavaConfig替换Xml以及现在非常火热的Springboot在书的最后也有提到。OK,开始看书,书本的第一章讲了一下Spring存在的目的(简化Java开发)和Spring的功能,以及Spring3->Spring4增加了哪些功能,那我就从第二章开始概括本书,以给我

OPENGL顶点数组, glDrawArrays,glDrawElements

顶点数组, glDrawArrays,glDrawElements  前两天接触OpenGL ES的时候发现里面没有了熟悉的glBegin(), glEnd(),glVertex3f()函数,取而代之的是glDrawArrays()。有问题问google,终于找到答案:因为OpenGL ES是针对嵌入式设备这些对性能要求比较高的平台,因此把很多影响性能的函数都去掉了,上述的几个函数都被移除了。接

OpenGL ES学习总结:基础知识简介

什么是OpenGL ES? OpenGL ES (为OpenGL for Embedded System的缩写) 为适用于嵌入式系统的一个免费二维和三维图形库。 为桌面版本OpenGL 的一个子集。 OpenGL ES管道(Pipeline) OpenGL ES 1.x 的工序是固定的,称为Fix-Function Pipeline,可以想象一个带有很多控制开关的机器,尽管加工

OpenGL雾(fog)

使用fog步骤: 1. enable. glEnable(GL_FOG); // 使用雾气 2. 设置雾气颜色。glFogfv(GL_FOG_COLOR, fogColor); 3. 设置雾气的模式. glFogi(GL_FOG_MODE, GL_EXP); // 还可以选择GL_EXP2或GL_LINEAR 4. 设置雾的密度. glFogf(GL_FOG_DENSITY, 0

opengl纹理操作

我们在前一课中,学习了简单的像素操作,这意味着我们可以使用各种各样的BMP文件来丰富程序的显示效果,于是我们的OpenGL图形程序也不再像以前总是只显示几个多边形那样单调了。——但是这还不够。虽然我们可以将像素数据按照矩形进行缩小和放大,但是还不足以满足我们的要求。例如要将一幅世界地图绘制到一个球体表面,只使用glPixelZoom这样的函数来进行缩放显然是不够的。OpenGL纹理映射功能支持将

OpenGL ES 2.0渲染管线

http://codingnow.cn/opengles/1504.html Opengl es 2.0实现了可编程的图形管线,比起1.x的固定管线要复杂和灵活很多,由两部分规范组成:Opengl es 2.0 API规范和Opengl es着色语言规范。下图是Opengl es 2.0渲染管线,阴影部分是opengl es 2.0的可编程阶段。   1. 顶点着色器(Vert

初步了解VTK装配体

VTK还不太了解,根据资料, vtk.vtkAssembly 是 VTK库中的一个重要类,允许通过将多个vtkActor对象组合在一起来创建复杂的3D模型。 import vtkimport mathfrom vtk.util.colors import *filenames = ["cylinder.stl","sphere.stl","torus.stl"]dt = 1.0renW

【Spring Boot】 SpringBoot自动装配-Condition

目录 一、前言二、 定义2.1 @Conditional2.2 Condition2.2.1 ConditionContext 三、 使用说明3.1 创建项目3.1.1 导入依赖3.1.2 添加配置信息3.1.3 创建User类3.1.4 创建条件实现类3.1.5 修改启动类 3.2 测试3.2.1 当user.enable=false3.2.2 当user.enable=true 3.3

最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)

文章目录 一、自动配置概念二、半自动配置(误~🙏🙏)三、源码分析1、验证DispatcherServlet的自动配置2、源码分析入口@SpringBootApplication3、@SpringBootConfiguration的@Configuration4、@EnableAutoConfiguration的@AutoConfigurationPackage和@Import5、Auto

OpenGL/GLUT实践:流体模拟——数值解法求解Navier-Stokes方程模拟二维流体(电子科技大学信软图形与动画Ⅱ实验)

源码见GitHub:A-UESTCer-s-Code 文章目录 1 实现效果2 实现过程2.1 流体模拟实现2.1.1 网格结构2.1.2 数据结构2.1.3 程序结构1) 更新速度场2) 更新密度值 2.1.4 实现效果 2.2 颜色设置2.2.1 颜色绘制2.2.2 颜色交互2.2.3 实现效果 2.3 障碍设置2.3.1 障碍定义2.3.2 障碍边界条件判定2.3.3 障碍实现2.3.