计算机图形学-GAMES101-3

一、transformation-变换

(1)Scale

  • 缩放变换示意图
    在这里插入图片描述

  • 图形每个像素对应坐标的计算公式
    在这里插入图片描述

  • 写成缩放矩阵的形式
    在这里插入图片描述

  • 非均匀缩放
    在这里插入图片描述

(2)Reflection Matrix

  • 镜面变换示意图
    在这里插入图片描述

  • 图形每个像素对应坐标的计算公式
    在这里插入图片描述

  • 写成镜像矩阵的形式
    在这里插入图片描述

(3)Shear Matrix

  • 切变变换示意图
    在这里插入图片描述

  • 写成切片矩阵的形式
    在这里插入图片描述

(4)Rotate

  • 旋转变换示意图
    在这里插入图片描述

  • 旋转默认以原点为旋转中心,旋转方式为逆时针旋转。在这里插入图片描述

  • 旋转矩阵
    在这里插入图片描述

(5)总结

  • 我们要做变换,就要找到变换前坐标和变换后坐标之间的一种关系,根据这种关系将原坐标变换为新坐标,并将坐标和变换写成矩阵形式。
    在这里插入图片描述

二、齐次坐标

(1)平移

  • 平移变换示意图
    在这里插入图片描述

  • 图形每个像素对应坐标的计算公式
    在这里插入图片描述

  • 由于是相加,所以我们只能写成这种形式:
    在这里插入图片描述

  • 可以发现平移变换不是线性变换,无法表述为之前变换的形式,即坐标矩阵乘以一个矩阵的形式。有没有一个办法可以统一的表示所有的变换方式呢?

(2)No free lunch

  • 没有付出就没有收获,诸如动态规划是一种用空间换时间的求解算法,想要更好的表达方式,就需要牺牲一些东西。使用齐次坐标即可统一表述方式。

  • 使用齐次坐标实现平移变换。在这里插入图片描述

(3)齐次坐标的介绍

  • 点和向量齐次坐标的表示,向量w=0代表了向量的平移不变性。
    在这里插入图片描述

  • 也表述了向量+向量=向量、点-点=向量 等运算规则。
    在这里插入图片描述

  • 扩展齐次坐标下点w分量的含义
    在这里插入图片描述

三、齐次坐标的变换

(1)变换

  • Affine Transformations在这里插入图片描述

  • 任何一个 Affine Transformations都可以写为变换矩阵形式。
    在这里插入图片描述

  • 变换对应的矩阵
    在这里插入图片描述

(2)逆变换

  • 逆变换对应原变换矩阵的逆矩阵(AM=B,AM-M=B-M,A=B-M)。
    在这里插入图片描述

(3)变换顺序的讨论

  • 变换的顺序:缩放->旋转->平移。因为定义旋转是围绕原点,所有必须保证旋转时未经过平移,因此旋转在平移之前。因为定义缩放一般是我们针对原图形进行的横纵向缩放,即缩放时我们认为图形的横向为x轴纵向为y轴,而旋转会导致图形横向和纵向偏移,所以缩放需要在旋转之前进行。

  • 所有任何复杂的变换都可以通过这些基本变换得到,即定义在一个变换矩阵中。如果当对图形进行过旋转和平移了,还想对其进行缩放,可以先将图形逆变换到缩放阶段,然后执行缩放变换,再执行原本的旋转和平移变换即可。

  • 注意矩阵乘法类似于函数映射y=F(x),所以变换矩阵M和位置矩阵x的乘法为Mx,为左乘。对坐标的变换如下图,会从右到左依次应用各个变换矩阵。
    在这里插入图片描述

  • 矩阵从右到左逐个应用。也可也认为是,从An×A(n-1)×…×A1=M,即计算出变换矩阵M应用到坐标上。
    在这里插入图片描述

  • 如果有一个变换,它要求基于原点以外一个点旋转,或者是要求基于x轴和y轴以外的轴进行缩放,那该怎么办?对于绕原点以外的点旋转,我们只需要平移物体,使得旋转点平移到原点(保证了旋转点和物体的相对位置不变),再开始绕着原点旋转,这样就得到了应该旋转得到的效果,只不过我们还要将物体平移回去而已。而对于缩放也是一样,我们将旋转轴旋转到x轴上,进行x轴上的缩放,然后再旋转回原本的缩放方向即可。注意变换矩阵是从右到左的变换顺序。
    在这里插入图片描述

  • 存在变换顺序是因为变换的规则是固定的,而针对上述本身就打破了变换规则的变换,需要打破变换顺序才可以得到实现。但是无论在任何时候,我们想要旋转物体,只需要保证旋转中心在原点,我们需要缩放物体,只需要保证缩放轴在x或y轴上。这样我们可以先通过简单的变换使得旋转中心在原点或者缩放轴在x轴上,我们即可实施不规则的旋转或缩放。任何变换都是有对应的关系的,如果你能设计出一种变换关系,那你也可以不基于这些基本的变换,比如之间绕某个点旋转。

四、三维变换

(1)三维的齐次坐标

  • 添加z坐标即可。在这里插入图片描述

  • w不等于0,则点的坐标为:
    在这里插入图片描述

  • 三维变换矩阵,其中3X3为线性变换,旁边一列为平移变换在这里插入图片描述

  • 变换的顺序,上图矩阵等价下图计算过程,因此变换顺序也是先线性变换后平移。
    在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在这部分的课程中,我们将专注于使用光线追踪来渲染图像。在光线追踪中 最重要的操作之一就是找到光线与物体的交点。一旦找到光线与物体的交点,就 可以执行着色并返回像素颜色。在这次作业中,我们需要实现两个部分:光线的 生成和光线与三角的相交。本次代码框架的工作流程为: 1. 从 main 函数开始。我们定义场景的参数,添加物体(球体或三角形)到场景 中,并设置其材质,然后将光源添加到场景中。 2. 调用 Render(scene) 函数。在遍历所有像素的循环里,生成对应的光线并将 返回的颜色保存在帧缓冲区(framebuffer)中。在渲染过程结束后,帧缓冲 区中的信息将被保存为图像。 3. 在生成像素对应的光线后,我们调用 CastRay 函数,该函数调用 trace 来 查询光线与场景中最近的对象的交点。 4. 然后,我们在此交点执行着色。我们设置了三种不同的着色情况,并且已经 为你提供了代码。 你需要修改的函数是: • Renderer.cpp 中的 Render():这里你需要为每个像素生成一条对应的光 线,然后调用函数 castRay() 来得到颜色,最后将颜色存储在帧缓冲区的相 应像素中。 • Triangle.hpp 中的 rayTriangleIntersect(): v0, v1, v2 是三角形的三个 顶点, orig 是光线的起点, dir 是光线单位化的方向向量。 tnear, u, v 是你需 要使用我们课上推导的 Moller-Trumbore 算法来更新的参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仰望—星空

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值