计算机图形学 | 图形思维的起点——朴素的软光栅

C++实现Bresenham直线光栅化算法:原理详解与代码实战 在计算机图形学中,光栅化是将连续几何图元(如直线、三角形)转换为离散像素网格的过程,是渲染管线的基础环节。其核心原理在于通过高效的算法,在离散的屏幕坐标系中,用最接近理想连续直线的像素序列进行逼近,以平衡视觉质量与计算性能。Bresenham算法作为经典的光栅化决策算法,通过巧妙的整数运算和误差递推,完全避免了浮点计算,实现了极高的绘制效率,在嵌入式图形库、软件渲染器及像素游戏引擎等对性能敏感的场景中具有重要技术价值。本文以C++为例,深入解析该算法的决策参数与递推原理,并提供处理所有斜率情况的通用实现、可 阅读详情

华中科技大学《计算机图形学》课程

MOOC地址:计算机图形学(HUST)

计算机图形学 | 图形思维的起点——朴素的软光栅

4.1 初次尝试——点和直线

扫描转换的概念

光栅扫描式图形显示器:有一个点阵单元发生器,通过控制每个点阵单元的亮度来显示一副完整的图形。

在这里插入图片描述

和CRT相似,液晶显示器、LED显示器也都有一个点阵单元发生器,这个点阵单元其实就是像素点阵。

在这里插入图片描述

图形的光栅化(图形的扫描转换)分成两步:

  1. 根据图形的定义在点阵单元上确定最佳逼近于图形的像素集,逼近的过程本质可以认为是连续量向离散量的转换;
  2. 给像素指定合适的颜色值。

这个过程叫做图形的光栅化(图形的扫描转换):

在这里插入图片描述

在这里插入图片描述

一般而言,光栅化阶段由GPU完成。

我们也可以由程序员完成从图元到像素点的转换,这种不借助硬件提供的API,直接由应用程序计算的过程,叫做软光栅。

约定:为像素点阵建立一个坐标系,先考虑二维图形的生成。

点

输入:点的坐标

输出:像素点的位置

在这里插入图片描述

直线

输入:直线两个端点的坐标P0(x0,y0)和P1(x1,y1)

输出:最佳逼近这条直线的像素点集

高质量直线的要求:

  1. 直线要直,不能有锯齿效果
  2. 直线的端点要准确,即无定向性和断裂情况
  3. 直线的亮度、色泽要均匀
  4. 画线的速度要快,还能处理不同线宽、颜色、线型

数值微分算法

数值微分法(Digital Differential Analyzer,简称DDA)。

一种直接从直线的微分方程生成直线的方法。

通过给定直线的两端点坐标P0(x0,y0)和P1(x1,y1),我们可以得到直线的微分方程:

在这里插入图片描述

Ɛ足够小,计算精度可以无限高。

在这里插入图片描述

但设备的精度是有限的,令ε=1/max(|△x|,|△y|),使得ε△x戒ε△y中会有一个变成单位步长、

这就使得,算法在最大位移方向上,每次总是走一步。

情况一:

斜率绝对值小于1:ε=1/|△x|

在这里插入图片描述

情况二:

斜率绝对值大于1:ε=1/|△y|

在这里插入图片描述

后者(也就是情况二)的效率更高。

在这里插入图片描述

DDA直线生成算法:

void DDAline(int x0, int y0, int x1, int y1)
{
    int dx, dy, eps1, k;
    float x, y, xIncre, yIncre;
    dx = x1 - x0;
    dy = y1 - y0;
    x = x0;
    y = y0;
    If(abs(dx) > abs(dy)) eps1 = abs(dx);
    else eps1 = abs(dy);
    xIncre = (float)dx / (float)eps1;
    yIncre = (float)dy / (float)eps1;
    for (k = 0; k <= eps1; k++)
    {
        putpixel((int)(x + 0.5), (int)(y + 0.5)); // 在对应坐标处输出像素点
        x += xIncre;
        y += yIncre;
    }
}

DDA直线生成算法特点:

在一个迭代算法中,如果每一步的x、y值是用前一步的值加上一个增量来获得的,那么,这种算法就称为增量算法。因此,DDA算法是一个增量算法。

优点:DDA算法直观、易实现

缺点:有浮点数和浮点运算,效率不高

中点的Bresenham算法

输入:直线两个端点的坐标P0(x0,y0)和P1(x1,y1)

输出:最佳逼近这条直线的像素点集

通过给定直线的两端点坐标P0(x0,y0)和P1(x1,y1),可得到直线斜截式表示:y=kx+b。

我们还可以写出它的隐式方程:F(x,y)=y-kx-b=0,其中k=Δy/Δx=y1-y0/x1-x0。

基本原理:

假定0≤k≤1,x是最大位移方向

在这里插入图片描述

通过中点不直线的位置关系引入误差项d,判断误差项的符号来选择候选点。

M在Q的下方,取Pu;M在Q的上方,取Pd。

构造判别式d=F(xM,yM)=F(xi+1,yi+0.5)=yi+0.5-k(xi+1)-b。

  • 当d<0时,取右上方Pu。
  • 当d=0时,任取一个,约定取Pd
  • 当d>0,取正右方的Pd

误差项递推:d﹤0

在这里插入图片描述

误差项递推:d≥0

在这里插入图片描述

d的初值

在这里插入图片描述

d的计算变成了增量计算,但计算过程仍然存在浮点数。

解决办法:将d放大2△x倍,消除浮点数。

在0≤k≤1情况下的整数的中点Bresenham算法:

  1. 输入直线的两端点P0(x0,y0)和P1(x1,y1)。
  2. 计算初始值△x、△y、d=△x-2△y、x=x0、y=y0。
  3. 绘制点(x,y)。
    判断d的符号
    若d<0,则(x,y)更新为(x+1,y+1),d更新为d+2△x-2△y;
    否则(x,y)更新为(x+1,y), d更新为d-2△y。
  4. 当直线没有画完时,重复步骤3,否则结束。

实例:

输入:直线两个端点的坐标P0(0,0)和P1(8,5)

输出:最佳逼近这条直线的像素点集

在这里插入图片描述

改进的Bresenham算法

更直观的想法:

假定0≤k≤1,x是最大位移方向,每次xi+1=xi+1,

  • d>0.5 yi+1=yi+1
  • d=0.5 yi+1=yi
  • d<0.5 yi+1=yi

在这里插入图片描述

d的变换规律:d的初值为0,d每次增加k,一旦向上走了一步则让d减去1。

在这里插入图片描述

改进一:

在这里插入图片描述

改进二:

在这里插入图片描述

在0≤k≤1情况下改进的Bresenham算法:

  1. 输入直线的两端点P0(x0,y0)和P1(x1,y1)。
  2. 计算初始值△x、△y、e=-△x、x=x0、y=y0。
  3. 绘制点(x,y)。
  4. e更新为e+2△y
    判断e的符号
    若e>0,则(x,y)更新为(x+1,y+1),同时将e更新为e-2△x;
    否则(x,y)更新为(x+1,y)。
  5. 当直线没有画完时,重复步骤3和4。否则结束。

实例:

输入:直线两个端点的坐标P0(0,0)和P1(8,5)

输出:最佳逼近这条直线的像素点集

在这里插入图片描述

4.2 如果是圆?

问题描述:圆的扫描转换

简化问题:只考虑圆心在原点的圆

那么对于任意圆呢?

答:先将圆的中心扫描转换到原点,再扫描转换回原本位置。

八分法画圆

圆的对称性分析:位于原点的圆,可以被4条直线得到8个区域。这就是八分法画圆的由来。

在这里插入图片描述

简化问题:只需要画出一个八分之一段圆弧即可。

八分法画圆的问题描述:绘出圆心在原点,半径为整数R的圆x2+y2=R2。

基本思想:绘制出下图中八分之一段圆弧,利用对称的方法绘制出另外七段。

方法一:利用简单方程

基本思想:利用函数方程,直接离散计算。

x为最大位移方向,x每次增加1,每次计算y后四舍五入。

在这里插入图片描述

方法二:利用极坐标方程

基本思想:利用极坐标方程,直接离散计算。

在这里插入图片描述

步长Δθ选择对圆弧效果的影响:步长越小,圆越圆滑。

中点画圆法

假定0≤k≤1,x是最大位移方向判别式d=F(x,y)=x2+y2-R2。

问题的简化:只考虑1/8段圆弧。

与八分法画圆一样,最大位移是x方向,x每次增加1,y减少1或者不变。

构造判别式:d=F(M)=(xi+1)2+(yi-0.5)2-R2。

  • 如果d>0,M在圆外,取Pd
  • 如果d<0,M在圆内,取Pu
  • 如果d=0,M在圆上,约定取Pu

第一种情况:d≤0,取Pu

第二种情况:d>0,取Pd

在这里插入图片描述

d的初值

在这里插入图片描述

d的整数化尝试

在这里插入图片描述

在这里插入图片描述

此时只需要判断d的符号。

中点Bresenham画圆法

  1. 输入圆的半径R
  2. 计算初始值
    d=1.25-R
    x=0
    y=R
  3. 绘制点(x,y)及其在八分圆中的另外七个对称点
  4. 判断d的符号
    若d≤0,先将d更新为d+2x+3,再将(x,y)更新为(x+1,y);
    否则,先将d更新为d+2(x-y)+5,再将(x,y)更新为(x+1,y-1)
  5. 当x<y时,重复步骤3和4,否则结束

4.3 如果是圆?

椭圆的隐式方程:F(x,y)=b2x2+a2y2-a2b2。

椭圆的对称性:关于x轴对称,关于y轴对称。

所以只需要画出第一象限的椭圆弧,其他按对称给出。

第一象限椭圆弧分析:

在这里插入图片描述

实际算法:用中点近似判断

在这里插入图片描述

于是,

在这里插入图片描述

上一个中点2a2(yi-0.5)>2b2(xi+1),下一个中点2a2(yi-0.5)<2b2(xi+1),根据中点从上半部分转入下半部分。

上半部分:

在这里插入图片描述

第一种情况:d1≤0,取Pu

在这里插入图片描述

第二种情况:d1>0,取Pd

在这里插入图片描述

误差项初值

在这里插入图片描述

下半部分:

在这里插入图片描述

第一种情况:d2>0,取Pl

在这里插入图片描述

第二种情况:d2≤0,取Pr

在这里插入图片描述

判断上半部分是否转如到下半部分?

在这里插入图片描述

计算下半部分中点的初值

在这里插入图片描述

椭圆中点Bresenham算法:

  1. 输入椭圆的长半轴a和短半轴b
  2. 计算初始值
    d=b2+a2(-b+0.25),x=0,y=b
  3. 绘制点(x,y)及其另外三个对称点
  4. 判断d的符号
    若d≤0,先将d更新为d+b2(2x+3),再将(x,y)更新为(x+1,y)
    否则,先将d更新为d+b2(2x+3)+a2(-2y+2),再将(x,y)更新为(x+1,y-1)
  5. 当2a2(y-0.5)>2b2(x+1)时,重复步骤3和4,否则转到步骤6
  6. 用上半部分计算的最后点(x,y)来计算下半部分中d的初值
    d20=F(M)=b2(x+0.5)2+a2(y-1)2-a2b2
  7. 绘制点(x,y)及其在四分象限上的另外三个对称点。
  8. 判断d的符号
    若d≤0,先将d更新为b2(2xi+2)+a2(-2yi+3),再将(x,y)更新为(x+1,y-1)
    否则,先将d更新为d+a2(-2yi+3),再将(x,y)更新为(x,y-1)
  9. 当y>0时,重复步骤7和8,否则结束。

4.4 遇见多边形

在这里插入图片描述

实例:

输入:多边形顶点序列P1(x1,y1)到P7(x7,y7)

输出:最佳逼近这个多边形的像素点集

在这里插入图片描述

X扫描线算法

算法步骤:

  1. 确定多边形所占有的最大扫描线数,得到多边形顶点的最小和最大y值(ymin和ymax)
    在这里插入图片描述

  2. 从y=ymin到y=ymax,每次用一条扫描线进行填充
    在这里插入图片描述

  3. 对一条扫描线填充的过程可分为四个步骤:求交、排序、交点配对、区间填色
    在这里插入图片描述

当扫描线与多边形顶点相交时,交点的取舍问题

策略:
交点个数=构成这个顶点的两条边位于扫描线上方的条数

在这里插入图片描述

交点个数为0的点在扫描转换时被舍弃。

视觉膨胀

在这里插入图片描述

策略:左闭右开,下闭上开

缺点:形状保持中心偏移半个像素

算法的效率问题

对一条扫描线填充的过程可分为四个步骤:求交、排序、交点配对、区间填色。

求交、排序的开销较大。

改进的出发点1:对于某一条扫描线,需要与所有的边求交吗?

改进的出发点2:扫描线和直线在Y方向上都有连贯性,那么交点可以怎么求?

改进的出发点3:每次都需要排序吗?

在这里插入图片描述

改进措施:

  1. 只与有效边求交
  2. 计算交点时采用增量计算
  3. 有的边变成无效边时,需要删除;新边加入时,才重新排序。

有序边表算法

数据结构

边表(EdgeTable):

在这里插入图片描述

新边(NewEdge):

在这里插入图片描述

新边结点排序原则:

  1. 先按交点的x坐标递增
  2. 若交点的x坐标相同,按增量递增

实例:

在这里插入图片描述

策略:交点个数=构成这个顶点的两条边位于扫描线上方的条数

将涉及到的几条边的ymax减去1,这样,对应的交点就不会再被计算。

在这里插入图片描述

有效边(ActiveEdge):指与当前扫描线相交的多边形的边,也称为活性边。

有效边表(ActiveEdgeTable,AET):把有效边按与扫描线交点x坐标递增的顺序存放在一个链表中,此链表称为有效边表。有效边表初始化为空。

实例:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

算法分析

优点:

  • 采用增量计算的方法进行交点计算
  • 仅仅在新边加入时排序(边数<<扫描线数)

缺点:桶表、链表的维护开销

边标志算法

输入:多边形顶点序列P1(x1,y1)到P7(x7,y7)

输出:最佳逼近这个多边形的像素点集

边缘填充算法:逐边向右取反

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

缺点:有重复访问的像素点

改进:栅栏填充算法

在这里插入图片描述

栅栏填充算法分为两个步骤:

  1. 打标记
  2. 填充
    具体规则:每个顶点设置一个标志位,初值为false。遇到标记点取反。
    若标志位为true,则填充;否则,不填充。

实例:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

改进:先画边界后填色

边标志算法的基本思想:

  1. 用一种特殊的颜色在帧缓存器中将多边形的边界勾画出来;
  2. 将着色的像素点依x坐标递增的顺序两两配对;
  3. 将每一对像素所构成的扫描线区间内的所有像素置为填充色。

边标志算法分为两个步骤:

  1. 对多边形的每条边进行直线扫描转换(以多边形边界所经过的像素打上边标志)
  2. 填充
    具体规则:每个顶点设置一个标志位,初值为false。遇到标记点取反。
    若标志位为true,则填充;否则,不填充。

实例:

在这里插入图片描述

算法分析

  • 边标志算法对每个象素仅访问一次。与边缘填充算法和栅栏填充算法相比,避免了对帧缓存中大量元素的多次赋值,但仍然需逐条扫描线地对帧缓存中的元素进行搜索和比较。
  • 当用软件实现本算法时,速度与Y向连贯性算法相当,但本算法用硬件实现后速度会有很大提高。

4.5 巧妙的区域填充

区域的定义

区域的定义:指已经表示成点阵形式的填充图形,它是像素集合。

两种表示形式:

  • 边界表示法:把位于给定区域的边界上的象素一一列举出来的方法称为边界表示法。
  • 内点表示法:枚举出给定区域内所有象素的表示方法称为内点表示。

在这里插入图片描述

区域的分类:4连通和8连通。

定义:4-邻接点8-邻接点

在这里插入图片描述

定义:4连通边界表示8连通边界表示

在这里插入图片描述

定义:4连通内点表示8连通内点表示

在这里插入图片描述

区域填充算法的分类:

由4连通和8连通,有:4连通算法和8连通算法。

针对内点表示还是边界表示,有:边界填充(边界表示)和泛填充(内点表示)。

种子填充思想

种子的定义:边界表示区域内的任意一点或者内点表示区域的任意一点。

边界填充算法

算法输入:种子点坐标(x,y),填充色和边界颜色。
数据结构:栈结构
算法输出:最佳逼近的像素点集

4-连通边界填充算法步骤:
种子象素入栈,栈非空时重复执行三步操作:

  1. 栈顶象素出栈;
  2. 将出栈象素置成填充色;
  3. 检查出栈象素的4-邻接点,若其中某个象素点不是边界色且未置成多边形色,则把该象素入栈。

实例:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

以此类推,后略。

4-连通泛填充算法步骤:
种子象素入栈;当栈非空时重复执行如下三步操作:

  1. 栈顶象素出栈;
  2. 将出栈象素置成填充色;
  3. 检查出栈象素的4-邻接点,若其中某个象素点是给定内部点的颜色且未置成新的填充色,则把该象素入栈。

分析与改进

问题1:8连通边界算法可以填充4连通的边界表示区域吗?

答:不能。

在这里插入图片描述

会导致填充错误。

问题2:8连通泛填充算法可以填充4连通的内点表示区域吗?

答:可以。

问题3:有重复入栈的现象,如何提高效率?

答:种子出栈时填充水平像素段。

在这里插入图片描述

在这里插入图片描述

4.6 属性:改变图元的模样

属性的定义

图元的外观由其属性来控制。

例如,线段可以是红色或蓝色,可以是实线或虚线,可以是粗线或细线等。区域的轮廓线作为线段可以有不同属性。区域的内部还有不同的属性。

如何实现属性

颜色

通过改变像素点的填充色来改变颜色。

线型

在这里插入图片描述

需要根据斜率的不同,调整像素模板。

线宽

在这里插入图片描述

线刷子的几个问题:

  1. 偶数个像素宽线宽会导致中心偏移半个像素
  2. 实际线宽比指定细,且对于不同的斜率的直线不同,这时需要根据斜率的不同,调整线刷子的方向
  3. 端点不自然,需要加额外的像素点
  4. 两条直线相交处也会有缺口,解决方法有:斜角连接、圆连接、斜切连接

另一种方法:方刷子

在这里插入图片描述

区域填充图案

图案对应像素模板:绘制像素点为1,其他为0。

在这里插入图片描述

指定填充纹理:

在这里插入图片描述

4.7 必不可少的反走样

走样的概念

走样现象:

  1. 阶梯状(锯齿感)
  2. 微小物体的忽略或时隐时现

走样的本质:用离散量表示连续量引起的失真。

在这里插入图片描述

反走样的方法

反走样的本质:用于减少或消除这种效果的技术。

最简单的方法:提高分辨率

在这里插入图片描述

受到这种方法的启发,我们可以先在高分辨率下取样计算,对几个象素属性进行平均,得到低分辨率下的像素属性。

于是我们得到下面2种方法:

过取样

过取样(supersampling),又叫后滤波。

简单过取样

在这里插入图片描述

降低锯齿感强的像素点的亮度,减弱整体锯齿感。

缺点:容易产生色泽不均匀的问题。

重叠过取样

在这里插入图片描述

基于加权模板的过取样

在这里插入图片描述

区域取样

区域取样(area sampling),又叫前滤波。

在这里插入图片描述

如何计算直线段不象素相交区域的面积?

在这里插入图片描述

可以利用一种求相交区域的近似面积的离散计算方法:

  1. 将屏幕象素分割成n个更小的子象素,
  2. 计算中心落在直线段内的子象素的个数m,
  3. m/n为线段不象素相交区域面积的近似值。

简单的区域取样特点:

  • 直线段对一个象素亮度的贡献不两者重叠区域的面积成正比
  • 相同面积的重叠区域对象素的贡献相同

加权区域取样原理:假想一个连续的加权曲面(或过滤函数)覆盖象素。当直线条经过该象素时,该象素的灰度值是在二者重叠区域上对滤波器(过滤函数)进行积分的积分值。

加权区域取样特点:

  • 接近理想直线的象素将被分配更多的灰度值;
  • 相邻两个象素的滤波器相交,有利于缩小直线条上相邻象素的灰度差。

在这里插入图片描述

从零到一:用生活化比喻拆解光栅化与光线追踪的渲染之路 本文通过生活化比喻,深入浅出地解析了计算机图形渲染的两大核心技术路径。光栅化如同高效的“十字绣”填色,通过投影与着色快速生成画面,满足实时交互需求;光线追踪则模拟物理光学,逆向追踪光线路径以生成物理精确的阴影、反射与全局光照,带来革命性真实感。文章对比了两者的核心原理、优势局限及现代混合渲染的融合趋势。 阅读详情

相关推荐

Bresenham算法:整数运算实现高效直线光栅化的C++实践

在计算机图形学中,光栅化是将几何图元转换为像素网格显示的核心过程。其核心原理是在离散的像素坐标系中,通过高效的决策机制确定哪些像素点需要被激活以最佳逼近连续图形。传统基于浮点运算的绘制方法存在性能瓶颈和精度问题,而Bresenham算法的技术价值在于完全使用整数加减和比较运算,实现了精确且高效的直线生成,避免了浮点计算和舍入误差。这种优化思想在嵌入式系统、低层图形驱动和算法设计中具有重要应用价值。本文以C++实现为例,深入解析了该算法如何通过决策参数进行误差累积,并处理所有方向的直线,是理解底层图形渲染和算

weixin_30715523的博客 480

简单软光栅实现

软光栅原理与实现

qq_35312463的博客 2535

C++实现Bresenham直线算法:整数运算绘制像素直线

在计算机图形学中,光栅化是将连续几何图形转换为离散像素的关键技术。其核心原理是通过高效的算法,在由像素组成的屏幕上近似模拟连续直线。Bresenham直线算法作为经典的光栅化算法,通过巧妙的整数运算和误差递推,完全避免了浮点计算,实现了高性能的直线绘制。这一技术价值在于其确定性、硬件友好性和低功耗特性,使其至今仍广泛应用于嵌入式显示驱动、GPU硬件光栅化器及图形库底层。在游戏开发、CAD软件和图形用户界面等场景中,该算法是构建图形渲染管线的基础。本文通过C++项目实战,深入解析Bresenham算法的整数决

weixin_29166013的博客 252

软光栅个人项目介绍,编写思路及后期整理

软光栅项目主要是在学习了计算机图形学相关知识之后,主要是Games101,202,tiny shader等教程,然后借鉴了很多前辈们的思路和框架逻辑编写的。 渲染帧率来说,blinn-phong渲染维持在80帧左右. PBR渲染维持在12帧左右 目前没有多线程和SIMD,后序添加后应该帧率会大幅提高。 渲染结果展示: Blinn-Phong着色: 莫娜 泳装符华(改模配布来自B站MMD up主) 三月七(素材来源同上) 银狼(素材同上) 希儿 旗袍琪亚娜 符华 PBR渲染(包括天空盒)结

weixin_44683202的博客 1776

3分钟搞懂欧式距离变换(EDT):从暴力算法到Felzenszwalb的演进史

本文系统梳理了欧式距离变换(EDT)从暴力算法到高效线性算法的演进历程。重点解析了光栅扫描算法和Felzenszwalb算法的核心思想与实现,并探讨了其在机器人路径规划中生成欧几里得符号距离场(ESDF)的关键应用,为开发者提供了清晰的算法选型与实战指南。

fern8的博客 980

软光栅化线和圆的实现原理

软光栅化线和圆的实现原理

计算机图形学(三)朴素的软光栅(直线扫描转换算法、bresenham算法)

软光栅 不借助硬件资源实现光栅化的方式,叫做软光栅。 扫描转换 直线扫描转换算法 数值微分算法——Digital Differential Analyzer 一种直接从直线的微分方程生成直线的方法。通过给定直线的两端点坐标P0 (x0 ,y0 )和P1 (x1 ,y1 ),我们可以得到直线的微分方程: 令ε=1/max(|△x|,|△y|) 情况一 斜率绝对值小于1:ε=1/|△x| 情况二 斜率绝对值大于1:ε=1/|△y| 令ε=1/m...

一直走,不要回头 1686

别再瞎调参数了!用MATLAB fmincon优化傅里叶级数,为你的机器人设计“完美”激励轨迹

本文详细介绍了如何利用MATLAB的fmincon优化器设计机器人激励轨迹,通过优化傅里叶级数参数,解决传统试错法的低效问题。文章涵盖了目标函数设计、约束条件转化及优化算法选择,帮助工程师实现高精度的系统辨识和动力学参数优化。

weixin_42613501的博客 242

计算机图形学复习笔记(问题回顾)

合肥工业大学计算机图形学考前复习问题收集

七七的博客 2841

PCL读取点云数据报错:Failed to find match for field ‘x‘/ ‘y‘/ ‘z‘.

原因:使用matlab生成的pcd文件,点云数据是双精度类型,pcl处理的点云数据是单精度类型。解决方案:使用matlab生成的点云坐标单精度化,然后在生成点云加以存储。

little_white138的博客 871

【有啥问啥】智能座舱CPD技术:毫米波雷达如何守护儿童安全?

本文深入探讨了智能座舱中CPD(Child Presence Detection)技术如何通过毫米波雷达保障儿童安全。毫米波雷达凭借其穿透性检测、微动感知等优势,成为儿童遗留车内的有效解决方案。文章详细解析了技术原理、系统集成方案及安装指南,为智能座舱安全技术提供了实用参考。

weixin_29193259的博客 359

软件光栅化(Sokolov的教程)一

计算机图形学 软件光栅化

qq_45498613的博客 789

VSCode+ESP-IDF开发环境搭建:从零开始创建你的第一个物联网项目(2024最新版)

本文详细介绍了如何在2024年使用VSCode和ESP-IDF搭建物联网开发环境,从零开始创建第一个物联网项目。内容包括环境准备、ESP-IDF配置、项目创建与结构解析、构建烧录步骤以及高级技巧和常见问题解决方案,帮助开发者快速上手ESP32开发。

weixin_29165725的博客 332

华科_图形学笔记_0401_图形思维的起点_朴素的软光栅(一)

计算机图形学_华中科技大学_中国大学MOOC(慕课) 4.1.1_初次尝试-点和直线(上):DDA算法 光栅扫描式图形显示器实际上可以看做是一个点积单元发生器 在这样一个设备上生成图形的过程,其实就是光栅化的过程,其可以分为两个过程 1.根据图形的定义在点阵单元上确定最佳逼近与图形的像素集,这个逼近的过程本质可以认为是连续量向离散量的转换 2.给像素指定合适的颜色值,这里可以通过光照,纹理等的计算,来得到对应像素的颜色值 这个过程就叫做图形的光栅化,也叫做图形的扫描转换

精密时空设计局 535

SAP 接口测试操作-业务顾问

业务顾问测试接口操作

weixin_43657667的博客 5163

verilog常用模块1——按键消抖模块详解

按键消抖模块key_filter 1. 原理介绍 如图,按键未按下时keys信号为高电平,按下则为低电平;通过检测keys信号电平,就可以判断按键状态。 但反作用弹簧会导致抖动现象,电平信号出现一段不确定波形 一般情况下,抖动的电平信号为1的持续时间不会超过20ms,只要通过对抖动波形的发生时长计时(计数),当为1的时长超过20ms,则可判定 进入了发生了按键按下/释放动作,并确定按键状态...

coin的博客 1万+

华科_图形学笔记_0402_图形思维的起点_朴素的软光栅(二)_03

计算机图形学_华中科技大学_中国大学MOOC(慕课) 4.5_巧妙的区域填充 提纲 区域的定义:指已经表示成点阵形式的填充图形,它是像素集合 一个点P的4-邻接点指的是它上下左右四个相邻的接点 一个点P的8-邻接点指的是它上下左右,左上,左下,右上,右下八个相邻的接点 填充是指从区域内的一个点开始,这个点叫种子点,由内向外将填充色扩展到整个区域内的过程 对于一个4连通边界表示区域,我们需要从区域内的一点出发,通过访问已知的4-邻接点,在不越出的前提下,遍历.

精密时空设计局 435

华为OD机考双机位C卷 - 补种未成活胡杨 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 补种未成活胡杨(OD上机考试双机位C卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 2419

第四章 图形思维的起点-朴素的软光栅 - 华科

软光栅:图元到像素点转换,不借助硬件提供的API,直接用应用程序进行计算。 本章学习最基本的图形扫描转换算法: 点 直线 圆 椭圆 多边形 约定 像素点阵的坐标系,左下角为原点。 直线扫描转换算法 数值微分算法—Digital Differential Analyzer, DDA 直接从直线微分方程生成直线的方法。是一种增量算法。 通过给定直线的两端点坐标P0(x0,y0)P_0(x_0,y_0)P0​(x0​,y0​)和P1(x1,y1)P_1(x_1,y_1)P

weixin_44403853的博客 298

多模态大模型在AI人工智能领域的创新实践探索

随着人工智能技术的飞速发展,单一模态的数据处理已经难以满足复杂现实场景的需求。多模态大模型通过融合多种模态的数据,如文本、图像、音频等,能够更全面、深入地理解和处理信息,为人工智能的发展带来了新的机遇和挑战。本文的目的在于深入探讨多模态大模型在AI人工智能领域的创新实践,包括其核心概念、算法原理、实际应用等方面,旨在为相关领域的研究人员和从业者提供全面的技术参考和实践指导。本文的范围涵盖了多模态大模型的基本原理、算法实现、数学模型、项目实战以及实际应用场景等多个方面。

大模型应用工坊 1317

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

华科_图形学笔记_0402_图形思维的起点_朴素的软光栅(二)_02

计算机图形学_华中科技大学_中国大学MOOC(慕课) 4.4.1_遇见多边形_上_X扫描线算法 在图形扫描转换中,需要表示一个区域 在三维真实感显示里面,表现物体的光照,材质效果,也需要对内部区域的颜色值进行处理 每个小三角形内部区域的每个像素点,都有对应的颜色值 "区域"的几种表示方法 "顶点表示"区域 多边形的扫描转换 X-扫描线思想 按照扫描线的顺序,计算扫描线与多边形的相交区间 求交:求扫描线与多边形边的焦点 排序:把这些焦点按照

精密时空设计局 416

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

计算机图形学

计算机图形学

ProgramNovice的博客 662

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

华科_图形学笔记_0402_图形思维的起点_朴素的软光栅(二)_01

计算机图形学_华中科技大学_中国大学MOOC(慕课) 4.2.1_如果是圆?(上):八分法画圆 圆的扫描转换算法 圆心位于原点的扫描转换 圆心在任意一点 圆具有非常良好的对称性 如果我们得到了其中一段圆弧的上面的像素点,就可以通过对称的方法,得到另外的7个点 于是要得到整个圆的扫描转换的像素集,只需要扫描转换1/8段圆弧即可,这就是八分法画圆 用简单的方程生成圆弧,利用函数方程,直接离散计算 X是最大位移方向 在绘制这1/8圆弧的时候,X每次走

精密时空设计局 589

Bresenham算法详解:从光栅化原理到嵌入式工程实践

在计算机图形学中,光栅化是将连续图形转换为屏幕像素的核心过程,而直线绘制是其中最基础的需求。Bresenham算法作为经典的直线光栅化算法,通过维护误差项,仅用整数加减和比较即可精确选择像素点,避免了浮点运算带来的性能开销。该算法在嵌入式GUI、单片机屏幕驱动、游戏渲染管线等场景中广泛应用,尤其适合MCU、FPGA等资源受限的硬件。本文从数学推导出发,详解算法的原理与实现,涵盖全象限处理、圆与椭圆扩展,并给出工程实践中的性能优化和避坑指南,帮助开发者深入掌握这一高效工具。

weixin_34414196的博客 405

探索未来复古:Consol3,CPU上的图形革命

探索未来复古:Consol3,CPU上的图形革命 项目简介 Consol3,一个颠覆传统的图形引擎,它独树一帜地选择在CPU上执行所有渲染任务,摒弃了依赖GPU的传统路径。这不仅是一次对软件渲染能力的极限挑战,也是一场回归,将3D视觉体验带回至经典的控制台显示。通过高度自给自足的设计——无外部依赖,完全依靠操作系统提供的基础——Consol3证明了即使在最朴素的环境中,也能构建出令人瞩目的图形效果...

gitblog_00050的博客 492

从长方形面积到微积分:累积思维的数学本质与应用

微积分中的积分思想源于简单的面积累积概念,通过将复杂图形分割为无限小的矩形单元实现精确计算。这种累积思维在数学中经历了从静态求和到动态积分的演进,最终形成了处理连续变化的强大工具。从计算机图形学的抗锯齿技术到物理引擎的数值模拟,积分方法在工程实践中展现出关键价值。理解黎曼和与极限过程的关系,掌握Python数值积分实现,是连接数学理论与编程应用的重要桥梁。本文通过面积计算、机器学习优化等案例,揭示累积思维如何成为贯穿初等数学到现代AI的核心方法论。

weixin_30568591的博客 420
上一篇: 使用 Qt Creator 创建 Hello World 程序
下一篇: 计算机图形学 | 实验三:绘制一个四边形
UestcXiye
博客等级 码龄8年 9032粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值