计算机图形学光栅化实验_光栅化算法

计算机图形学光栅化实验_光栅化算法光栅化光栅化的任务将在投影变换中得到的正则立方体显示在屏幕上屏幕screen像素(pixels)的集合。屏幕的大小使用分辨率(resolution)来刻画。经典的光栅显示设备像素pixel像素是一个具有统一颜色的小立方体颜色由三部分组成red,green,blue屏幕空间​ 屏幕被划分成一个个正方体,称为像素。像素使用坐标(x,y)(x,y)(x,y)来表示,其中心是(x+0.5,y+0.5)(x+0.5,y+0.5)(x+0.5,y+0.5),

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

Jetbrains全家桶1年46,售后保障稳定

光栅化

光栅化的任务

将在投影变换中得到的正则立方体显示在屏幕上

屏幕 screen

  • 像素(pixels)的集合。

  • 屏幕的大小使用分辨率(resolution)来刻画。

  • 经典的光栅显示设备

像素 pixel

  • 像素是一个具有统一颜色的小立方体

  • 颜色由三部分组成red, green, blue

屏幕空间

​ 屏幕被划分成一个个正方体,称为像素。像素使用坐标 ( x , y ) (x, y) (x,y)来表示,其中心是 ( x + 0.5 , y + 0.5 ) (x+0.5, y+0.5) (x+0.5,y+0.5), 范围是 ( 0 , 0 ) (0,0) (0,0) ( w i d t h − 1 , h e i g h t − 1 ) (width-1,height-1) (width1,height1)

光栅化的步骤

光栅化主要分为两步

  1. 将正则立方体的 X , Y X,Y X,Y轴坐标变换到 [ 0 , w i d t h ] × [ 0 , h e i g h t ] [0,width]\times[0,height] [0,width]×[0,height]
  2. 将得到的图形画到屏幕像素上。

光栅化第一步 视口变换 viewport transformation

先缩放然后平移,变换过程中与z无关,变换矩阵如下所示。
( w i d t h 2 0 0 w i d t h 2 0 h e i g h t 2 0 h e i g h t 2 0 0 1 0 0 0 0 1 ) \begin{pmatrix} \frac{width}{2} & 0 & 0 & \frac{width}{2}\\ 0 & \frac{height}{2} & 0 & \frac{height}{2}\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1 \end{pmatrix} 2width00002height0000102width2height01

光栅化第二步 光栅化三角形到像素

这里关心的问题是如何将连续的三角形平面放到不连续的像素中显示。

最简单的光栅化方法:通过采样来解决,将像素中心在三角形内部的像素采样出来,然后用这些采样出来的像素点来代表三角形。

这里,判断点 P P P在三角形内部的方法使用了叉积,首先规定规定一个走向,如 A A A-> B B B-> C C C,然后按走向来依次计算3个叉积,如下所示
a ⃗ = A P ⃗ × A B ⃗ b ⃗ = B P ⃗ × B C ⃗ c ⃗ = C P ⃗ × C A ⃗ \vec{a}=\vec{AP}\times\vec{AB}\\ \vec{b}=\vec{BP}\times\vec{BC}\\ \vec{c}=\vec{CP}\times\vec{CA} a
=
AP
×
AB
b
=
BP
×
BC
c
=
CP
×
CA

P P P在三角形内部,则 a ⃗ , b ⃗ , c ⃗ \vec{a},\vec{b},\vec{c} a
,b
,c
的方向相同。

但是采样会带来新的问题——走样 aliasing,这些问题都被称为sampling artifacts,例如

  • 锯齿(jaggies),空间采样不充分导致的。

  • 摩尔纹(moire),图像采样不充分导致的。

  • wagon wheel effect,时间采样不充分导致的。

解决上述问题的方法——反走样,其基本思路是在采样之前进行模糊化处理(pre-filter),然后再采样。模糊化处理实际上是在采样之前使用低通滤波器过滤掉高频部分,目的是使边缘模糊化。

实际的做法是使用超采样(supersampling MSAA),其基本思路是将一个像素再划分为多个小的部分来采样,然后每个像素的值是像素中所有的小的部分的平均值。

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • FTP协议讲解

    FTP协议讲解FTP概述文件传输协议(FTP)作为网络共享文件的传输协议,在网络应用软件中具有广泛的应用。FTP的目标是提高文件的共享性和可靠高效地传送数据。在传输文件时,FTP客户端程序先与服务器建立连接,然后向服务器发送命令。服务器收到命令后给予响应,并执行命令。FTP协议与操作系统无关,任何操作系统上的程序只要符合FTP协议,就可以相互传输数据。本文主要基于LINUX平台,对FTP…

    2022年6月21日
    26
  • 电驴(eMule)下载_电驴链接怎么用

    电驴(eMule)下载_电驴链接怎么用先保证服务器连接。在电骡服务器界面右边的“从URL更新server.met”字样下边的小框里输入“http://upd.emule-security.org/server.met”,然后点击“更新”,下载新的服务器列表即可。Kad连接http://upd.emule-security.org/nodes.dathttp://kademlia.ru/download/nodes.dath…

    2025年8月19日
    1
  • Linux测试环境搭建apache+mysql+php

    Linux测试环境搭建apache+mysql+php

    2022年3月4日
    46
  • python 函数def

    python 函数def一、不同层级的调用importcountcount.add(2,3)print(count.add(2,3))在不同层级引用函数,不能直接引用,否则会报错:importcountModul

    2022年7月5日
    26
  • 【android开发】Android防止内存溢出浅析

    【android开发】Android防止内存溢出浅析

    2021年11月16日
    44
  • python ==和is_python中is是什么意思

    python ==和is_python中is是什么意思前置知识点当我们创建一个对象时,我们要知道它内部干了些什么1.创建了一个随机id,开辟了一片内存地址2.自动声明了这个对象的类型type3.给这个对象赋值value小例子a=1pri

    2022年7月30日
    5

发表回复

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

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