【GAMES101】Lecture05 Rasterizaion 1 (Triangles) 光栅化之三角形

2024-03-10 08:52

本文主要是介绍【GAMES101】Lecture05 Rasterizaion 1 (Triangles) 光栅化之三角形,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 0 引言
  • 1 MVP后要做什么呢?
    • 1.1 MVP是什么
    • 1.2 Canonical Cube to Screen 标准立方体到屏幕
    • 1.3 Rasterizing Triangles into Pixels 将三角形光栅化为像素
  • 2 Rasterization:Drawing to Raster Display
    • 2.1 Polygon Meshes
    • 2.2 Triangle Meshes
    • 2.3 Triangles - Fundamental Shape Primitives 基本形状基元
  • 3 A Simple Approach: Sampling 采样:简单的光栅化方法

请添加图片描述

  • 🙋‍♂️ 作者:海码007
  • 📜 专栏:计算机图形学专栏
  • 💥 标题:【GAMES101】Lecture05 Rasterizaion 1 (Triangles) 光栅化之三角形
  • ❣️ 寄语:对知识永远有兴趣!
  • 🎈 最后:文章作者技术和水平有限,如果文中出现错误,希望大家能指正

0 引言

在进行了上一课所学的内容后,模型物体全都都被映射到 【-1, 1】的区间里,那下一步该怎么办呢?也就是光栅化。

透视投影

  • 近裁剪平面的l、r、b、t分别代表左、右、底、顶。它们定义了视锥体在近裁剪平面上的四个边界。
  • FOV代表视场角(Field of View),是指从相机或眼睛位置观察场景时,能够看到的水平和垂直范围。通常以角度为单位来表示,较大的FOV意味着更广阔的视野,而较小的FOV则意味着更窄的视野。 FOV的大小直接影响到观察者在场景中的感知和交互体验。
  • FOV(Field of View)是指从相机或眼睛位置观察场景时,能够看到的水平和垂直范围的角度。而FOVY(Field of View Vertical)是FOV的一个子集,专指在垂直方向上能够看到的范围的角度。FOV包含了水平和垂直两个方向的视野范围,而FOVY只关注垂直方向上的视野范围。
  • 在这里插入图片描述

要将FOVY(垂直视场角)转换为裁剪平面的边界值(l、r、b、t),您需要考虑相机的投影方式以及近裁剪平面的位置。

假设您使用的是透视投影(perspective projection),可以使用以下步骤将FOVY转换为裁剪平面的边界值:

  1. 首先,根据FOVY计算出近裁剪平面(near plane)上的一半高度(h_near)。

    ( h_{\text{near}} = \tan\left(\frac{\text{FOVY}}{2}\right) \times \text{near} )

    其中,( \text{near} ) 是近裁剪平面的距离。

  2. 然后,根据相机的纵横比(aspect ratio)计算出近裁剪平面上的一半宽度(w_near)。

    ( w_{\text{near}} = h_{\text{near}} \times \text{aspect ratio} )

    其中,aspect ratio是屏幕或视口的宽度与高度之比。

  3. 最后,使用这些计算出的宽度和高度值来确定裁剪平面的边界值:

    • 左边界(l):( -w_{\text{near}} )
    • 右边界(r):( w_{\text{near}} )
    • 底边界(b):( -h_{\text{near}} )
    • 顶边界(t):( h_{\text{near}} )

这样,您就可以将FOVY转换为近裁剪平面的边界值。

在这里插入图片描述

1 MVP后要做什么呢?

1.1 MVP是什么

MVP代表Model View Projection,是计算机图形学中常用的一种矩阵变换顺序,用于将模型的顶点坐标变换到裁剪空间(Clip Space)中,从而实现透视投影和最终的屏幕显示。MVP变换由三个矩阵相乘组成:

  1. Model Matrix(模型矩阵):将模型的局部坐标系变换到世界坐标系中,包括平移、旋转和缩放等操作。

  2. View Matrix(视图矩阵):将世界坐标系中的坐标变换到观察者(相机)的视图空间中,通常包括相机的位置和方向。

  3. Projection Matrix(投影矩阵):将视图空间中的坐标变换到裁剪空间中,进行透视投影或正交投影,通常包括视场角、纵横比、近裁剪平面和远裁剪平面等参数。

MVP变换的顺序是先将模型的顶点坐标乘以模型矩阵,再乘以视图矩阵,最后乘以投影矩阵,得到裁剪空间中的坐标。这个过程通常在图形渲染管线的顶点着色器中完成。
在这里插入图片描述

1.2 Canonical Cube to Screen 标准立方体到屏幕

什么是屏幕?

在这里插入图片描述

光栅其实就是屏幕(德语定义的Raster就是Screen)

在这里插入图片描述

像素是什么呢?

在这里插入图片描述

屏幕空间

在这里插入图片描述

如何映射到屏幕空间呢?

在这里插入图片描述
在这里插入图片描述

1.3 Rasterizing Triangles into Pixels 将三角形光栅化为像素

在这里插入图片描述

2 Rasterization:Drawing to Raster Display

2.1 Polygon Meshes

在这里插入图片描述

2.2 Triangle Meshes

在这里插入图片描述
在这里插入图片描述

2.3 Triangles - Fundamental Shape Primitives 基本形状基元

在这里插入图片描述

在这里插入图片描述

3 A Simple Approach: Sampling 采样:简单的光栅化方法

在这里插入图片描述

这篇关于【GAMES101】Lecture05 Rasterizaion 1 (Triangles) 光栅化之三角形的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/793704

相关文章

【WebGPU Unleashed】1.1 绘制三角形

一部2024新的WebGPU教程,作者Shi Yan。内容很好,翻译过来与大家共享,内容上会有改动,加上自己的理解。更多精彩内容尽在 dt.sim3d.cn ,关注公众号【sky的数孪技术】,技术交流、源码下载请添加微信号:digital_twin123 在 3D 渲染领域,三角形是最基本的绘制元素。在这里,我们将学习如何绘制单个三角形。接下来我们将制作一个简单的着色器来定义三角形内的像素

CSS实现DIV三角形

本文内容收集来自网络 #triangle-up {width: 0;height: 0;border-left: 50px solid transparent;border-right: 50px solid transparent;border-bottom: 100px solid red;} #triangle-down {width: 0;height: 0;bor

双指针(5)_单调性_有效三角形的个数

个人主页:C++忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C++忠实粉丝 原创 双指针(5)_单调性_有效三角形的个数 收录于专栏【经典算法练习】 本专栏旨在分享学习C++的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1. 题目链接: 2.题目描述 : 3.解法 :     解法一(暴力枚举) :     算法思路 :     代码展示 : 暴力枚

利用向量积(叉积)计算三角形的面积和多边形的面积(hdu2036)

开始撸计算几何题目了。。。。。。。 预备知识:叉乘求多边形面积 参考证明资料: 公式证明: http://www.cnblogs.com/xiexinxinlove/p/3708147.html 高中知识: http://wenku.baidu.com/view/867e6edfad51f01dc281f11a.html #include<stdio.h>#inclu

GAMES101(5~6节,光栅化)

光栅化Rasterization 透视投影已知field和近平面,如何推导宽度? 根据三角函数:tan field / 2 = (height / 2) / ||n||近平面,从而可以求出高度 因为知道宽高比,所以可以求出宽度,高度 * 宽/高 视口变换 经过MVP变换,顶点位于正则化空间坐标,是一个在 [-1,1] ^3 之间的 x, y, z 坐标构成(标准立方体),我们下一步需要做

拼接三角形

/********************************************************************************* 问题描述: 牛牛手里有N根木棒,分别编号为1~N,现在他从N根里想取出三根木棒,使得三根木棒构成一个三角形,你能计算出牛牛有多少种取法吗?(考虑两种取法中使用的木棒编号有一个不一样就认为是不同的取法)。  输入描述: 首先输

OpenGL/GLUT实践:实现反弹运动的三角形动画与键盘控制(电子科技大学信软图形与动画Ⅱ实验)

源码见GitHub:A-UESTCer-s-Code 文章目录 1 运行效果2 实验过程2.1 环境配置2.2 绘制三角形2.2.1 渲染函数2.2.2 主函数2.2.3 运行结果 2.3 调整窗口大小2.4 简单动画与按键控制2.4.1 简单旋转2.4.2 键盘控制 2.5 窗口反弹动画2.5.1 处理窗口大小变化2.5.2 渲染函数2.5.3 定时器2.5.4 控制速度

CSS详解:绘制三角形过程

前言 本文旨在用最简单的方式展示CSS border绘制三角形的各种方法,虽然用css 绘制三角形已经不是什么新鲜事了,不过,这篇文章将会尽力展示最全的三角形各种绘制方式。 附送一个三角形在线生成器 原理-盒子模型 如上图,这是一个盒子模型的结构,分为四个区域,content、padding、border, margin 。而本次示例主要用到的是盒子模型中的content和

★ 算法OJ题 ★ 力扣611 - 有效三角形的个数

Ciallo~(∠・ω< )⌒☆ ~ 今天,椎名日和将和大家一起做一道双指针算法题--有效三角形的个数~ 目录 一  题目 二  算法解析 三  编写算法 一  题目 二  算法解析 给三个数,判断是否能构成三角形的条件:两个较小的数相加大于第三个数。 解法⼀:暴力求解 算法思路:三层 for 循环枚举出所有的三元组,并且判断是否能构成三⻆形。(会超时)

MATLAB 计算三角形的外接圆心和半径(84)

MATLAB 计算三角形的外接圆心和半径(84) 一、算法介绍二、算法实现1.代码 一、算法介绍 计算三角形的外接圆心和半径,可视化显示结果 二、算法实现 1.代码 % 设置三个点的坐标A = [1, 1];B = [4,