最容易填写的函数就是left。输入为旋转的角度,当前的eye与up这两个三维向量

void Transform::left(float degrees, vec3& eye, vec3& up) {

// YOUR CODE FOR HW1 HERE

}

1.Transform是一个类,在Transform.h中可查看,类中声名了四个方法

2.::

类作用域符,用法(class::name)一种从属关系

class A

{public:

int test();}

int A::test()//表示test是属于A的

{return 0;}

3.参数

float degrees:旋转的角度

eye和up是两个三维向量

变换使用矩阵来表示,可表示为矩阵向量的乘积

编写代码:

1>首先看rotate方法:

根据提示:Rotate仅仅根据标准的轴-角公式来建立一个旋转矩阵,使用标准的三角函数并把角度转换为弧度,简单地使用mat3 M; 来定义矩阵,所以这个方法中只是一个轴角公式的表示。

mat3 Transform::rotate(const float degrees, const vec3& axis) {

// YOUR CODE FOR HW1 HERE

//使用标准的三角函数并把角度转换为弧度

float angle = degrees*pi / 180;

//定义矩阵,以列为主的方式存储矩阵

mat3 m1(1,0,0,

0,1,0,

0,0,1);

mat3 m2(axis.x*axis.x, axis.x*axis.y, axis.x*axis.z,

axis.x*axis.y, axis.y*axis.y, axis.y*axis.z,

axis.x*axis.z, axis.y*axis.z, axis.z*axis.z);

mat3 m3(0, axis.z,-axis.y,

-axis.z,0, axis.x,

axis.y,-axis.x,0);

mat3 result;

result = cos(angle) * m1 + (1-cos(angle))*m2 + sin(angle)*m3;

// You will change this return call

return result;

}

2>再看left方法:

输入为旋转的角度,当前的eye与up这两个三维向量。注意你可能需要把度数转换为弧度来建立一个旋转矩阵(标准形式下)。你的任务是当用户向左移时,正确地更新eye和up向量.

3>Up

up函数稍稍复杂一些,但和left有一样的基本需求。你可能需要使用一些辅助函数,比如glm::cross 和辅助向量。同样的,你需要正确地更新eye和up向量

4>lookAt

最后,你需要根据eye和up向量编写代码计算变换矩阵。你可能需要回顾一下课程视频,特别是gluLookAat 的推导来完成这个工作。你可以定义一个u v w 坐标系(作为一个3维向量),建立一个辅助的4x4矩阵M 作为这个函数的结果返回。

CS184.1X 计算机图形学导论 HomeWork1的更多相关文章

  1. CS184.1X 计算机图形学导论(第五讲)

    一.观察:正交投影 1.特性:保持平行线在投影后仍然是平行的 2.一个长方体,对处在只有深度不同的位置上的同一物体来说,它的大小不会改变. 3.透视投影:平行线在远处会相交(例如铁轨) 4.glOrt ...

  2. CS184.1X 计算机图形学导论 罗德里格斯公式推导

    罗德里格斯公式推导 图1(复制自wiki) 按照教程里,以图1为例子,设k为旋转轴,v为原始向量. v以k为旋转轴旋转,旋转角度为θ,旋转后的向量为vrot. 首先我们对v进行分解,分解成一个平行于k ...

  3. CS184.1X 计算机图形学导论L3V2和L3V3(部分)

    组合变换 连接矩阵的优点是可以使用这些矩阵单独操作. 多个变换依然是一个矩阵. 连接矩阵不可交换,因为矩阵乘法不具有交换性. X3=RX2 X2=SX1 X3=R(SX1)=(RS)X1 X3≠SRX ...

  4. CS184.1X 计算机图形学导论 第3讲L3V1

    二维空间的变换 L3V1这一课主要讲了二维空间的变换,包括平移.错切和旋转. 缩放 缩放矩阵 使用矩阵的乘法来完成缩放 缩放矩阵是一个对角矩阵,对角线上的值对应缩放倍数 错切(shear) 错切可以将 ...

  5. CS184.1X 计算机图形学导论 作业0

    1.框架下载 在网站上下载了VS2012版本的作业0的框架,由于我的电脑上的VS是2017版的,根据提示安装好C++的版本,并框架的解决方案 重定解决方案目标为2017版本. 点击运行,可以出来界面. ...

  6. CS184.1X 计算机图形学导论(第四讲)

    一.齐次变换 1.平移变换 变换矩阵不能包含X,Y,Z等坐标变量 如果x坐标向右平移了5个单位长度,则x~=x+5.在变换矩阵中表示的时候添加一个w坐标变量.通过加入一个w坐标,可以实现平移变换 1& ...

  7. CS184.1X 计算机图形学导论(第三讲)

    第一单元(介绍关于变换的数学知识) :基本二维变换 模型坐标系,世界坐标系 1.缩放 Scale(规模,比例) Sx表示在x方向上放大的倍数,Sy表示在y方向上放大的倍数,因此X坐标乘以Sx,Y坐标乘 ...

  8. 分享:计算机图形学期末作业!!利用WebGL的第三方库three.js写一个简单的网页版“我的世界小游戏”

    这几天一直在忙着期末考试,所以一直没有更新我的博客,今天刚把我的期末作业完成了,心情澎湃,所以晚上不管怎么样,我也要写一篇博客纪念一下我上课都没有听,还是通过强大的度娘完成了我的作业的经历.(当然作业 ...

  9. 计算机图形学 - 图形变换(opengl版)

    作业题目: 图形变换:实现一个图形绕任意直线旋转的程序. 要求:把一个三维图形绕任意一条直线旋转,需要有初始图形,和旋转后的图形,最好也可以实时控制旋转. 最少要做出绕z轴旋转. 原理:http:// ...

随机推荐

  1. element中的表格处理:循环出表格数据

    最近要做一个表格,但是为了方便维护,我们需要把表格数据循环出来,方便加减节点: <template> <el-table :data="tableData" st ...

  2. linux运维、架构之路-keepalived高可用

    一.Keepalived介绍          Keepalived起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能,Ke ...

  3. Python 爬虫实战(1):分析豆瓣中最新电影的影评

    目标总览 主要做了三件事: 抓取网页数据 清理数据 用词云进行展示 使用的python版本是3.6 一.抓取网页数据 第一步要对网页进行访问,python中使用的是urllib库.代码如下: from ...

  4. 网页用html还是php

    首先,不管是html还是php,虽然这是两种不同的语言,但是都可以编写网页.不同的是,使用html编写网页是纯静态的网页,无法是运行在本地的,且无法和用户进行交互:而使用php编写的网页则是动态的,运 ...

  5. UE4-PS4开发渲染线程优化方法及记录

    先说方法: Launch 到 PS4 Devkit上,在PS4上输入Stat unit 看瓶颈在哪里.我们发现Frame 和Draw数值几乎一样,其余两项相对较小,这表明瓶颈在渲染线程上. 关于渲染线 ...

  6. Java并发指南14:JUC中常用的Unsafe和Locksupport

    本文转自网络,侵删 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutoria ...

  7. 获取响应状态Status信息、获取状态码Status Code

    一般服务器的响应状态有以下几种: 200 正常 400 未找到页面 403 拒绝 500 服务器错误 比如我们请求bootstrap中文网, 此时的状态码是200 OK表示正常,后面的from cac ...

  8. JS-闭包(Closures)和let声明块级作用域变量

    闭包: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures 闭包是函数和声明该函数的词法环境的组合. let: https ...

  9. mysql_DML_select_union

    使用union可以将多个select 语句的查询结果集组合成一个结果集.select 字段列表1 from table1union [all]select 字段列表2 from table2...说明 ...

  10. 电脑可以识别sd卡手机无法识别 的解决方法。 我成功了。 淘宝买的sd卡 不用退货了。 退的人肝疼

    https://wenku.baidu.com/view/822e471055270722192ef736.html 电脑可以识别 sd 卡手机无法识别 * (本教程只是本人实际操作方法,可以解决一部 ...