计算机图形学-GAMES101-5

一、观测变换

 通过Viewing(观测)transformation,最终我们将世界坐标系中的物体投影到了一个xyz都处于【-1,1】的立方体中。那么接下来,我们该做什么?在这里插入图片描述

二、光栅化(Rasterization)

(1)透视投影的定义

 定义透视投影的视锥需要的参数:

  • 长宽比Aspect ratio:width / height
  • 垂直的可视角度:fovY
  • 远近平面的距离:n和f
    在这里插入图片描述
     通过长宽比和垂直的可视角度可以求出水平的可视角度。
     如下图所示,根据fovY和n可以计算出近平面的顶点坐标,再根据宽高比Aspect即可计算出近平面的高度,因此根据上述参数可以计算出所有屏幕的所有信息。远平面同理。

在这里插入图片描述
在这里插入图片描述
 因此我们只需要定义fov和宽高比Aspect以及n和f即可定义一个确定的视锥。

(2)屏幕像素

 屏幕的分辨率诸如1920×1080也叫做1080P,数字说明的都是像素的多少。
 屏幕是一个典型的光栅成像设备,把图像画在屏幕上的过程就是光栅化的过程。
 我们暂时认为像素是呈现颜色的最小单位,其实这是不对的。像素的颜色表示了一个灰度,一般是0~255,使用RGB三个值来表示一个颜色。
 屏幕空间中每一个像素使用一个(x,y)坐标来表示,屏幕上的像素就是从(0,0)到(width-1,height-1)。像素的中心其实位于(x+0.5,y+0.5)。
在这里插入图片描述

(3)投影立方体到屏幕的映射

 将【-1,1】的立方体映射到屏幕【0,width】和【0,height】。
在这里插入图片描述

  • 映射对应的变换矩阵:在这里插入图片描述
     上述变换将立方体空间【-1,1】变换到二维空间【0,width】×【0,height】。我们已经得到了一个二维的图片了,现在我们要把这个图像打散成像素,即光栅化。
  • 光栅化是指将图像中的基本图形即图元打碎成像素,将图元打碎成像素后得到每个像素应该显示的颜色,再将图像真正的显示在屏幕上。

(3)屏幕的成像

  • CRT成像设备会逐行逐列去绘制像素的颜色。隔行扫描:奇数行和偶数行交替绘制,在每一帧只绘制奇数行或偶数行。但是隔行扫描可能会造成严重的画面撕裂,特别是高速运动的画面。
    在这里插入图片描述

  • 低分辨率设备如计算器,高分辨率设备如智能手机的屏幕。一些屏幕设备分辨率已经超出了人类视网膜的分辨率,这种屏幕叫做视网膜屏幕。

  • 液晶显示器LCD通过液晶对光的扭曲,当光通过光栅时会被扭曲。
    在这里插入图片描述

  • 发光二极管LED,即要么发光要么不发光,可以发出不同的颜色。
    在这里插入图片描述

(4)如何光栅化

(4.1)从图形到像素

  • 三角形可以表达三维和二维的面,三角形是最基础的多边形,任何多边形都可以拆解成三角形,三角形内部永远都是一个平面,三角形内部外部定义清晰。
  • 根据三角形内点和三角形顶点的位置关系,可以得到颜色的一个渐变效果。
  • 光栅化中最重要的:判断一个像素和三角形的位置关系,更确切的来说考虑像素的中心点和三角形的位置关系。
  • 采样,即对某个定义的函数,以像素中心位置为自变量,带入得到的因变量。
    在这里插入图片描述

(4.2)采样

  • 定义函数inside,其中t代表三角形,xy为任意实数。
    在这里插入图片描述

  • 考虑屏幕上的每一个像素:在三角形内还是外在这里插入图片描述

  • 如果点在边上,要么不做处理,要么特殊定义。在OpenGL中认为如果点落在左边和上边则其处在三角形内,如果落在右边和下边则不在三角形内。

  • 根据三角形的顶点坐标,对x和y取最小和最大,得到三角形的包围盒(两个对角顶点),如下图蓝色区域所示。当循环像素判断是否在三角形内时,只需要循环包围盒内的三角形。(光栅化的加速)
    在这里插入图片描述

  • 更快速的光栅化加速如下图所示,适用于窄长刚好旋转45°处于对角线位置的三角形。在这里插入图片描述

  • 人眼对绿色最为敏感,对更多的绿色使得视觉效果更好。RGB值越大越亮。
    在这里插入图片描述

(5)锯齿和走样

  • 锯齿是光栅化中一直在解决的问题,出现锯齿的原因是我们对信号的采样率不够高,因此导致信号的走样。
    在这里插入图片描述

  • 走样即Aliasing,对应的还有反走样、抗锯齿
    在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

仰望—星空

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

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

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

打赏作者

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

抵扣说明:

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

余额充值