Rasterization(Triangles)
定义Frustum
field-of-view:垂直可视角度(角度fovY)
aspect ratio:高宽比(宽 : 高)
Canonical Cube to Screen
What is a screen?
- An array of pixels
- Size of the array: resolution
- A typical kind of raster display (光栅化设备)
Raster == screen in German
- Rasterize == drawing onto the screen
Pixel (FYI, short for “picture element”)
- For now: A pixel is a little square with uniform color
- Color is a mixture of (red, green, blue)
Defining the screen space
Rasterization: Drawing to Raster Displays
Triangles - Fundamental Shape Primitives
Why triangles?
Most basic polygon
- Break up other polygons
Unique properties
- Guaranteed to be planar
- Well-defined interior
- Well-defined method for interpolating values at vertices over triangle (barycentric interpolation)
Approch: Sampling A 2D Indicator Function
用像素中心对屏幕空间采样
c++
1 | for (int x = 0; x < xmax; ++x) |
包围盒
On Real Displays
三星屏幕绿色更多,因为人眼对绿色更敏感
Problems
- Jaggies(锯齿)
- Aliasing(走样)
光栅化图形学致力于解决的问题:如何抗锯齿、反走样
作业1
Questions
- get_model_matrix(float rotation_angle): 逐个元素地构建模型变换矩
阵并返回该矩阵。在此函数中,你只需要实现三维中绕z 轴旋转的变换矩阵,
而不用处理平移与缩放。 - get_projection_matrix(float eye_fov, float aspect_ratio, float
zNear, float zFar): 使用给定的参数逐个元素地构建透视投影矩阵并返回
该矩阵。 - [提高项5 分] 在main.cpp 中构造一个函数,该函数的作用是得到绕任意
过原点的轴的旋转变换矩阵。
Eigen::Matrix4f get_rotation(Vector3f axis, float angle)
Answer
Tips
角度转换为弧度制
参数zNear,zFar是正数,n、f 是坐标(负数)
abs()
求绝对值transpose()
矩阵转置但如果想要transpose可以赋值给自身,用
transposeInPlace()
矩阵提取元素
A(i, j)
做完后感觉本次作业是对前两节课的一次很好的知识点梳理与复习,对Transformation的实际理解更加深刻了!√
过程理解:先架好相机,然后有个视角 得到个视锥,然后透视投影到标准立方体上,然后视口投影到屏幕上
Code
c++
1 | Eigen::Matrix4f get_model_matrix(float rotation_angle) |
编译
shell
1 | mkdir build // 创建build文件夹以保留的工程文件。 |