Graphics-PA1

算法框架

遍历每一个像素点,使用透视相机模型,根据当前像素点的坐标生成真实世界坐标系的光线,与空间中所有物体求交

  • 没有交点,就将这个像素设置为背景颜色

  • 有交点,根据求交算法的具体逻辑,此时hit中会存与起始点最近的交点,根据此交点着色即可。着色时,遍历所有光源,对于单个光源,根据光源到交点的位置、光源颜色以及物体材质利用Phong模型计算即可。

细节实现

透视相机模型

这个模型主要使用小孔成像原理,根据图像上一个点的坐标,计算出真实场景中光线的参数。

图像坐标到相机坐标系光线

将相机坐标系中相机到画布的距离定为1,给定angle后,可以得知相机空间中一个单位距离对应画布上的像素数

则相机空间中光线R的参数为:

相机坐标系到真实坐标系

根据相机的外参对光线参数进行变换。则在真实坐标系下,光线的参数为

求交算法

直线与球面求交

球有三个参数,圆心位置,半径r,以及材质material

解方程



当前hit的最小值,就将hit设置为,法向量即

直线与平面求交

平面方程
所以一个平面有三个参数,A,b以及材质material,其中A也是平面的法向量。

直线与平面可以直接由方程解出
当前hit的最小值,就将hit设置为,法向量即平面的法向量

直线与三角形求交

三角形有三个参数,三个顶点的坐标 以及材质material
根据三个顶点的坐标,可以得到其所在平面的法向量

利用三角形的重心坐标,, 只需解方程: 即$ 

=P_0-R_o E_1=P_0-P_1,E_2=P_0-P_2,S=P_0-R_o $

根据 Cramer 法则,我们可以写出: $ =

$

当前hit的最小值,且$0,,+ tnormal$

Phong 模型着色

直接应用公式即可