计算机图形学入门06:视口变换

在前面的内容中,在MVP变换(模型变换,视图变换,投影变换)完后,所有的物体位置都变换到了**-1, 1³** 的标准立方体里,下一步要把物体绘制到**屏幕(Screen)**上。

1.什么是屏幕?

对于图形学来说把屏幕抽象的认为是一个二维数组 ,数组中的每一个元素是一个像素(Pixel) ,屏幕是一个典型的光栅(Raster)成像设备 。**光栅化(Rasterize)**是指把东西画在屏幕上的过程。

像素(Pixel)

在屏幕上排列的最小单位,在本文中,像素可以简单理解为一块统一颜色的小方块,颜色有红、绿、蓝混合而成。现实中,屏幕的大小用分辨率表示,例如一个屏幕的分辨率为1920x1080,那么它就有1920x1080个像素排列在屏幕上。

屏幕空间

相当于在屏幕上建立一个坐标系,如上图。任何屏幕空间的像素点都可以用**(x,y)** 来表示,其中x,y都是整数。

假设x为width,y为height,那么像素的索引是从**(0,0)** 到**(width-1,height-1)** 。像素(x,y)的中心点是**(x+0.5,y+0.5)** 。而整个屏幕覆盖范围是**(0,0)** 到**(width,height)**。

2.视口变换

现在已经知道了什么是屏幕,那么要将**-1, 1³** 的标准立方体变换到从**0, widthx0, height** 的屏幕空间上,这个叫做视口(Viewport)变换 。这里先不考虑z轴,那么就是将**-1,1²** 的标准立方体变换到屏幕上**。**如下图所示:

可以发现,视口变换需要经过两个步骤,首先进行缩放变换 ,将标准立方体x 轴和y 轴长度分别缩放到width和height,由于-1到1的距离是2,所以缩放长度分别为width/2和height/2。然后是进行平移变换,将标准立方体的中点从原点平移到屏幕中心(width/2,height/2)。

可得出视口变换矩阵如下:

3.下一步是?

视口变换完成后,物体到屏幕的所有变换都完成了,那么我们要把这些结果信息真正的变成图,也就是说变成屏幕上的像素,这里就是下一章要讲的光栅化

相关推荐
_Emma_16 天前
【DRM&Graphic】Linux图形与显示框架
linux·驱动开发·图形渲染·显示器
算力百科小星17 天前
2026 算力平台测评:智星云、Vast.ai、Lambda Labs 口碑与实力对比
图形渲染·gpu算力·gpu租用
郝学胜-神的一滴18 天前
[简化版 GAMES 101] 计算机图形学 13:从光栅化到着色——赋予三维像素光影灵魂
c++·计算机视觉·unity·godot·图形渲染·opengl·unreal
DBBH19 天前
AI帮我忙之webgpu实时路径追踪 下级 three.js接入OIDN
图形渲染·webgpu
成都渲染101云渲染666621 天前
CR15新功能介绍以及CR15云渲染流程
ue5·图形渲染·blender·maya·corona
charlie11451419121 天前
通用GUI编程技术——图形渲染实战(五十)——命中测试与鼠标事件路由:精确交互
c++·windows·架构·交互·图形渲染
做cv的小昊21 天前
计算机图形学:【Games101】学习笔记08——光线追踪(辐射度量学、渲染方程与全局光照、蒙特卡洛积分与路径追踪)
图像处理·笔记·学习·计算机视觉·游戏引擎·图形渲染·概率论
RReality21 天前
【Unity UGUI】血条 / 进度条(HP Bar)
ui·unity·游戏引擎·图形渲染
郝学胜-神的一滴22 天前
中级OpenGL教程 009:用环境光告别模型死黑
前端·c++·unity·godot·图形渲染·opengl·unreal
charlie11451419122 天前
通用GUI编程技术——图形渲染实战(四十八)——Owner-Draw控件:让标准控件焕然一新
图形渲染