光栅化 (Rasterization)

光栅化 (Rasterization)上一篇文章讨论了如何在多边形的某一点上分配光强度值,这里主要讨论如何为多边形确定实际的像素,即在栅格屏幕上的对应位置,这个过程称为光栅化(Rasterization)或者扫描转换(Scanconv

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

上一篇文章讨论了如何在多边形的某一点上分配光强度值,这里主要讨论如何为多边形确定实际的像素,即在栅格屏幕上的对应位置,这个过程称为光栅化(Rasterization)或者扫描转换 (Scan conversion)。

1 光栅化边

主要方法:DDA算法

起始点(xs,ys),终点(xe,ye)

Δy = 1,Δx 用 m 表示

∵ Δy/x= (ye-ys)/ (xe-xs), Δy = 1,

∴ m =  (xe-xs)/(ye-ys)

浮点数伪代码:

光栅化 (Rasterization)

整数伪代码:

光栅化 (Rasterization)

这里 x = xi, xf > 0 时,一开始 xf = -0.5,四舍五入,如果 xf > 0,则说明 mf > 0.5,所以近1。

光栅化 (Rasterization)

PS: div是整除,mod是取余,ye-ys为常数。

这里存在的一个问题是将3*3的正方形画成4*4,解决的办法是去掉第一个顶点或者去掉最后一个,这个根据个人习惯。

 

2 光栅化多边形

光栅化 (Rasterization)

光栅化多边形可以用链表数组 a[n] 来实现,a[i] 代表 yi 所包含的所有的 x 值的链表(linked list)。链表的元素结构是 A(value, pointer),pointer指向下一个元素。

如图所示,竖条的每一个小格代表一个 a[i],y的值是无序的,扫描中,每一条扫描线每产生一对 (x,y),找到对应y值,如果不存在这个y,则加入一个链表,即 a[n+1],然后 x 根据升序插入,因为是链表,所以可以插入。在得出多边形在屏幕中相应位置时,也要计算改像素点的光强并存储。

PS: a[0] 出现两个相同的 x 值4,是因为它处于转折点。

 

实现光栅后,接下来要做的事情是多边形填充,可参见转载的文章 多边形区域填充算法--扫描线填充算法

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168028.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月4日 上午7:46
下一篇 2022年8月4日 上午8:00


相关推荐

  • 【Unity3D入门教程】Unity3D之GUI浅析「建议收藏」

    【Unity3D入门教程】Unity3D之GUI浅析「建议收藏」一款典型的软件都会有交互界面,这些界面包括标签、按钮、拖动条等。Unity3D内置一些基本的GUI命令,可以在屏幕上绘制简单的交互控件。本文主要介绍传统的GUI。而最新加入的UGUI模块将在下一讲中介绍。

    2022年8月10日
    15
  • js/javascript获取数组长度

    js/javascript获取数组长度利用 JS javaScript 来获取数组的长度 例 vararr newArray arr 0 a arr 1 b varlen arr length 变量 len 就是数组的长度

    2026年3月19日
    2
  • java集合底层实现原理_java数据存入数组

    java集合底层实现原理_java数据存入数组modCount:记录当前集合被修改的次数在所有的集合实现类中(Collection与Map中),都会有一个 modCount 的变量出现,它的作用就是记录当前集合被修改的次数。下面以ArrayList 类进行说明:添加方法:删除方法:可以看出,两个操作都会影响元素的个数。 当我们使用迭代器或 foreach 遍历时,如果你在 foreach 遍历时,自动调用迭代器的迭代方法,此时在遍历过程中调用了集合的add,remove方法时,modCount就会改变,而迭代器记录的modCount

    2022年8月8日
    11
  • android更新ui的方式_android ui界面模板

    android更新ui的方式_android ui界面模板该楼层疑似违规已被系统折叠隐藏此楼查看此楼1.status_bar_latest_event.xml的修改:源代码:xmlns:android=”http://schemas.android.com/apk/res/android”>1.通知条目高度的修改:上面的65.0sp和64.0sp就是高度2.通知条目下面一般都有一条白线,透明方法:①drawable-mdpi文件夹内divid…

    2026年1月17日
    4
  • linux中bz2解压命令

    linux中bz2解压命令linux 中 bz2 解压命令 tarjxvffile tar bz2

    2026年3月18日
    2
  • XPS文件转换为PDF不再愁!全新XPS/EPS文档处理神器Aspose.Page来啦!

    XPS文件转换为PDF不再愁!全新XPS/EPS文档处理神器Aspose.Page来啦!近月,针对Aspose.XPS和Aspose.EPS做了一些改动,将其合并成Aspose.Page,同样可以使用现有许可证访问这两种产品的所有功能。Aspose.Page(点击下载)是集成On-PremiseAPI,以.NET和Java应用程序中创建,操作或转换XPS,EPS和PS文件。或使用免费应用程序即时查看或转换文件。功能亮点Aspose.Page允许文档转换。例如,您可以将XPS…

    2022年5月4日
    80

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号