计算机图形学-GAMES101-5

news/2024/7/21 7:26:52 标签: 图像处理, 计算机图形学, CG, GAMES101

一、观测变换

 通过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,对应的还有反走样、抗锯齿
    在这里插入图片描述


http://www.niftyadmin.cn/n/331847.html

相关文章

如何在代码开发中便捷使用 ChatGPT 协助开发

在五一节前后,抽空测试了下网上推荐的开发环境和开发插件,在这里推荐给前后端代码开发的同胞们。 方法一:IDEA 安装 插件 bito 习惯使用 IDEA 开发代码的同胞,可以尝试直接在 IDEA 中安装插件 bito,注意操作过程中需要…

DSSR122 4899001-NK汽车电子电气架构进化的终点在哪里

​ DSSR122 4899001-NK汽车电子电气架构进化的终点在哪里 随着人们对汽车性能要求的不断提高,越来越多的汽车电子/电气(E/E)架构系统被集成到汽车中,成为智能交通、自动驾驶、智能城市等更广泛生态系统的组成部分。汽车行业自动化…

《程序员面试金典(第6版)》面试题 16.24. 数对和

题目描述 设计一个算法,找出数组中两数之和为指定值的所有整数对。一个数只能属于一个数对。 题目传送门 示例 1: 输入: nums [5,6,5], target 11 输出: [[5,6]]示例 2: 输入: nums [5,6,5,6], target 11 输出: [[5,6],[5,6]]提示: nums.length &…

阿里P6经验分享,这8种不同类型的自动化测试框架,你会吗?

以下为作者观点: 在自动化测试中,框架提供了一种组织和执行测试案例的结构化方式。它们提供了一套准则和最佳实践,使测试人员能够编写可重复使用、可维护和可扩展的测试脚本。在这篇文章中,我们将讨论自动化测试中不同类型的框架…

融云 WICC 2023 定档!「出海嘉年华」穂城来袭!

集赞获纸质版《作战地图》 阔别一年,通信行业年度盛会 WICC 即将重磅回归。移步【融云全球互联网通信云】回复“地图”免费领 6 月 2 日(周五),融云与白鲸出海联合主办、以“聚势突围,布局全球”为主题的“WICC 社交…

docker 安装 prometheus,grafana,node-exporter 监控工具

:https://download.csdn.net/download/qq_42208305/87792827 加载离线镜像 : 监控端安装: docker load -i prometheus.tar docker load -i grafana.tar 被监控端安装: docker load -i node-expo…

一文4000字从0到1用WebDriver+Selenium实现浏览器自动化

前言 Selenium是一款可以自动化操作浏览器的开源项目,最初的目的是浏览器功能的自动化测试,但是随着项目的发展,人们根据它的特性也用来做一些更多的有意思的功能而不仅仅是UI的自动化测试工具。就像Selenium官方网站上描述的那样&#xff0…

【Linux】有名管道介绍及使用

目录 有名管道有名管道使用 橙色 有名管道 有名管道(FIFO)和匿名管道(pipe)有一些特点是相同的,不一样的地方在于: FIFO在文件系统中作为一个特殊文件存在,但文件中是没有内容的, FIFO中的内容存放在内存中。当使用FIFO的进程退出后, FIFO文…