
GAMES101-计算机图形学
文章平均质量分 79
对GAMES101学习过程的一些记录,大作业好多参考资料链接失效了,等学完OpenGL再更新吧...
已完成作业合集:https://github.com/YANGTHEKING
作业框架下载:https://download.youkuaiyun.com/download/ycrsw/85862701
ycr的帐号
这个作者很懒,什么都没留下…
展开
-
【GAMES101】作业8 显式/半隐式欧拉与Verlet方法模拟绳子运动(含GIF)
目录1. 作业描述1.1 连接绳子的约束1.2 显式/半隐式欧拉法1.3 显式 Verlet1.4 阻尼1.5 你应该修改的函数2. 解2.1 Rope::rope2.2 Rope::simulateEuler2.3 Rope::simulateVerlet3. 库安装4. 附件1. 作业描述1.1 连接绳子的约束在 rope.cpp 中, 实现 Rope 类的构造函数。这个构造函数应该可以创建一个新的绳子 (Rope) 对象,该对象从 start 开始,end 结束,包含 num_nodes 个节点原创 2022-05-05 09:43:03 · 2720 阅读 · 0 评论 -
【GAMES101】作业8 库安装问题
环境配置直接使用assignment中给出的库安装命令容易出现Unable to locate package的提示,这里给出自测有效的配置流程:首先不可或缺的就是编译器与基本的函式库,如果系统没有安装的话,依照下面的方式安装:$ sudo apt-get install build-essential安装OpenGL Library$ sudo apt-get install libgl1-mesa-dev安装OpenGL Utilities$ sudo apt-get install原创 2022-05-04 18:23:13 · 1683 阅读 · 6 评论 -
【GAMES101】作业7 常见问题避坑
本文仅对作业7中的一些常见问题做总结,作业具体实现细节可见:【GAMES101】作业71. 渲染耗时过长?使用了多线程,但是一次spp为1000以上的渲染还是要几个小时?可能是global.hpp下的get_random_float()随机数生成函数存在问题,它会导致在重复调用该函数时,返回同一个值。解决方法:把其中定义的dev,rng,dist变量定义为静态变量(加个static修饰),这样最后的时间消耗就缩短了大概几十倍2. 渲染结果中光源区域为纯黑?作业给的伪代码中缺少了光线直接与光源相交的原创 2022-05-04 04:10:43 · 2606 阅读 · 0 评论 -
【GAMES101】作业7(提高)路径追踪 多线程、Microfacet(全镜面反射)、抗锯齿
这里写目录标题1. 作业描述1.1 修改的内容1.2 你需要迁移的内容1.3 代码框架2. 解2.1 迁移部分(Triangle::getIntersection、IntersectP、BVHAccel::getIntersection)2.2 修改部分3. 提高3.1 多线程3.2 Microfacet一些常见问题运行耗时过长?渲染结果较暗?1. 作业描述在之前的练习中,我们实现了 Whitted-Style Ray Tracing 算法,并且用 BVH等加速结构对于求交过程进行了加速。在本次实验中,原创 2022-05-01 22:50:25 · 3260 阅读 · 10 评论 -
【GAMES101】作业6(提高)含BVH与SAH加速查找算法(SVH)和快速排序算法
作业描述在之前的编程练习中,我们实现了基础的光线追踪算法,具体而言是光线传输、光线与三角形求交。我们采用了这样的方法寻找光线与场景的交点:遍历场景中的所有物体,判断光线是否与它相交。在场景中的物体数量不大时,该做法可以取得良好的结果,但当物体数量增多、模型变得更加复杂,该做法将会变得非常低效。因此,我们需要加速结构来加速求交过程。在本次练习中,我们重点关注物体划分算法 Bounding Volume Hierarchy (BVH)。本练习要求你实现 Ray-Bounding Volume 求交与 BVH原创 2022-04-24 01:28:51 · 3739 阅读 · 5 评论 -
【GAMES101】作业5 简单光线追踪与代码流程理解
作业描述在这部分的课程中,我们将专注于使用光线追踪来渲染图像。在光线追踪中最重要的操作之一就是找到光线与物体的交点。一旦找到光线与物体的交点,就可以执行着色并返回像素颜色。在这次作业中,我们需要实现两个部分:光线的生成和光线与三角的相交。本次代码框架的工作流程为:从 main 函数开始。我们定义场景的参数,添加物体(球体或三角形)到场景中,并设置其材质,然后将光源添加到场景中。调用 Render(scene) 函数。在遍历所有像素的循环里,生成对应的光线并将返回的颜色保存在帧缓冲区(framebu原创 2022-04-19 02:32:30 · 3403 阅读 · 1 评论 -
【GAMES101】作业4(提高)含Bazier曲线的反走样处理
作业描述Bézier 曲线是一种用于计算机图形学的参数曲线。在本次作业中,你需要实现 de Casteljau 算法来绘制由 4 个控制点表示的 Bézier 曲线 (当你正确实现该算法时,你可以支持绘制由更多点来控制的 Bézier 曲线)。你需要修改的函数在提供的 main.cpp 文件中。• bezier:该函数实现绘制 Bézier 曲线的功能。它使用一个控制点序列和一个OpenCV::Mat对象作为输入,没有返回值。它会使 t 在 0 到 1 的范围内进行迭代,并在每次迭代中使 t 增加一个原创 2022-04-14 01:18:37 · 6701 阅读 · 12 评论 -
【GAMES101】Bazier曲线的升降阶与Bazier曲面的拼接
Bezier曲线的升阶所谓升阶是指保持Bezier曲线的形状与方向不变,增加定义它的控制顶点数,即提高该Bezier曲线的次数设给定原始控制顶点p0,p1…pn,定义一条n次Bezier曲线增加一个顶点后,仍定义同一条曲线的新控制顶点为P0*,P1*,…,Pn+1*,则有:化简即得:三次Bezier曲线的升阶实例如下图所示:新的多边形更加靠近曲线。在80年代初,有人证明如果一直升阶升下去的话,控制多边形收敛于这条曲线Bezier曲线的降阶降阶是升阶的逆过程如果a3不等于0,想原创 2022-04-11 10:15:14 · 494 阅读 · 0 评论 -
【GAMES101】作业3(提高)与法线贴图原理和渲染管线框架分析
作业描述任务在这次编程任务中,我们会进一步模拟现代图形技术。我们在代码中添加了Object Loader(用于加载三维模型), Vertex Shader 与 Fragment Shader,并且支持了纹理映射。而在本次实验中,你需要完成的任务是:修改函数 rasterize_triangle(const Triangle& t) in rasterizer.cpp: 在此 处实现与作业 2 类似的插值算法,实现法向量、颜色、纹理颜色的插值。修改函数 get_projection_ma原创 2022-04-10 01:20:14 · 4238 阅读 · 13 评论 -
【GAMES101】作业2(提高)(附带解决黑边问题)
作业描述在上次作业中,虽然我们在屏幕上画出一个线框三角形,但这看起来并不是那么的有趣。所以这一次我们继续推进一步——在屏幕上画出一个实心三角形,换言之,栅格化一个三角形。上一次作业中,在视口变化之后,我们调用了函数rasterize_wireframe(const Triangle& t)。但这一次,你需要自己填写并调用函数 rasterize_triangle(const Triangle& t)。该函数的内部工作流程如下:创建三角形的 2 维 bounding box。遍历此原创 2022-04-03 23:21:21 · 4536 阅读 · 7 评论 -
【GAMES101】作业1(提高)与框架理解
作业描述本次作业的任务是填写一个旋转矩阵和一个透视投影矩阵。给定三维下三个点 v0(2.0, 0.0, −2.0), v1(0.0, 2.0, −2.0), v2(−2.0, 0.0, −2.0), 你需要将这三个点的坐标变换为屏幕坐标并在屏幕上绘制出对应的线框三角形 (在代码框架中,我们已经提供了 draw_triangle 函数,所以你只需要去构建变换矩阵即可)。简而言之,我们需要进行模型、视图、投影、视口等变换来将三角形显示在屏幕上。在提供的代码框架中,我们留下了模型变换和投影变换的部分给你去完成。原创 2022-04-01 03:09:45 · 10767 阅读 · 23 评论 -
【GAMES101】作业0与Lecture 04课后思考(透视投影使z轴坐标向远平面靠拢)
作业描述给定一个点 P=(2,1), 将该点绕原点先逆时针旋转 45◦,再平移 (1,2), 计算出变换后点的坐标(要求用齐次坐标进行计算)解代码:#include <iostream>#include <Eigen\Dense>#include <cmath>using namespace std;using namespace Eigen;void main(){ Vector3d v(2, 1, 1);//齐次坐标 Matrix3d m,原创 2022-03-28 01:01:07 · 1121 阅读 · 5 评论 -
【GAMES101】三维旋转矩阵中绕三个轴旋转的矩阵公式
GAMES101网课中设计到的小推导,其实一点也不难,只不过老师讲的概念比较绕,导致比较难记,所以在此记录下比较方便记忆的思路。首先给出结果公式:根据之前的二维的旋转矩阵(利用勾股定理和合角公式推导而得):我们会发现三维旋转中绕Z轴和X轴的旋转矩阵与二维的旋转矩阵类似。以绕x轴为例,写成直观的形式就是:y=cosα*y-sinα*zz=sinα*y+cosα*z但是唯独绕y轴时矩阵有些不一样,是为什么呢?其实这跟坐标轴间的正交关系有关(以右手定则为例,叉乘的顺序很重要):y叉乘z得x,原创 2022-03-21 12:13:27 · 5524 阅读 · 0 评论 -
【GAMES101】eigen常用语法
定义头和命名空间:#include <Eigen/Dense>using namespace Eigen;向量定义一个三维浮点向量:① Vector3f v(1.0f,2.0f,3.0f);② Vector3f v;V<<1.0f,2.0f,3.0f;定义一个三维整数向量:Vector3d v(1, 2, 3);//同样有两种,不再赘述定义一个二维整数/浮点向量:Vector2d v;Vector2f v;定义一个50(任意)维浮点向量:Vector原创 2022-03-27 23:44:55 · 841 阅读 · 0 评论