Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
204 commits
Select commit Hold shift + click to select a range
7f8df3e
Format
logic-three-body Jan 8, 2021
9f4f1eb
版本2
logic-three-body Jan 8, 2021
da58840
Add explanation and understand that angle control the Rotation Matrix…
logic-three-body Jan 8, 2021
ce96879
更新提高部分
logic-three-body Jan 8, 2021
d1935a2
调试提高部分
logic-three-body Jan 8, 2021
943c829
Well Done !
logic-three-body Jan 8, 2021
9ad62a6
可以输出图像
logic-three-body Jan 12, 2021
5c4a726
越界问题已经改进,详见代码版本更改
logic-three-body Jan 12, 2021
268a61c
Output
logic-three-body Jan 12, 2021
583a771
Add explanation
logic-three-body Jan 13, 2021
b849993
Try other model
logic-three-body Jan 13, 2021
09bc867
尝试其他模型
logic-three-body Jan 13, 2021
8166d16
更改文件读取操作
logic-three-body Jan 15, 2021
6a41552
改变模型贴图路径
logic-three-body Jan 20, 2021
2d6958e
基本代码填充准备研究
logic-three-body Jan 26, 2021
9cb0178
填充
logic-three-body Jan 26, 2021
8257b1f
getIntersection
logic-three-body Jan 26, 2021
fab067b
准备研究作业7
logic-three-body Jan 27, 2021
385db8b
补充代码
logic-three-body Jan 27, 2021
2dc60b4
添加参考项目
logic-three-body Jan 27, 2021
d825dff
渲染出的第一张图
logic-three-body Jan 27, 2021
8cef35d
Path Tracing.exe 渲染 -> binary_SingleThread_SSP16
logic-three-body Jan 28, 2021
8240c8e
binaryMutiThreadSSP50
logic-three-body Jan 28, 2021
7ed6818
测试更高SSP
logic-three-body Jan 28, 2021
17f8ace
SSP200 MutiThread
logic-three-body Jan 28, 2021
b718d03
binaryMutiThreadSSP08
logic-three-body Jan 28, 2021
7c56cf4
binaryMutiThreadSSP400
logic-three-body Jan 28, 2021
2f518b7
binaryMutiThreadSSP400
logic-three-body Jan 28, 2021
721484d
耗时
logic-three-body Jan 28, 2021
723db4a
SingleThread SSP50
logic-three-body Jan 29, 2021
d18ab0c
实现XYZ旋转变换
logic-three-body Apr 19, 2021
a6491a0
研究缩放变换
logic-three-body Apr 19, 2021
ff15894
实现平移矩阵
logic-three-body Apr 19, 2021
6831aa8
先缩放后旋转最后平移变换
logic-three-body Apr 19, 2021
44619ea
添加model变换视频记录
logic-three-body Apr 19, 2021
7346112
可写入路径文件
logic-three-body Apr 19, 2021
9f448f0
实现正交投影
logic-three-body Apr 19, 2021
66d8b55
更新数据
logic-three-body Apr 19, 2021
7c6822e
Merge branch '作业2' into 作业1
logic-three-body Apr 20, 2021
33507b4
添加并测试pipeline.props项目配置文件
logic-three-body Apr 20, 2021
0c0d97d
Prepare write my own render
logic-three-body Apr 20, 2021
aa108e3
更改结果路径
logic-three-body Apr 20, 2021
85a7062
TGA写入的文件损坏
logic-three-body Apr 20, 2021
2d21b42
TGA写入文件
logic-three-body Apr 20, 2021
f8b7cad
set函数意义
logic-three-body Apr 20, 2021
750344f
测试read函数,output2为未垂直反转,output3为垂直反转flip_vertically
logic-three-body Apr 20, 2021
24dae0e
研究画线函数,固有思维的画线
logic-three-body Apr 20, 2021
129e0d5
加大时间步长,点变得更加离散
logic-three-body Apr 20, 2021
a49541e
更改项目结构
logic-three-body Apr 20, 2021
ae57f7d
第二次尝试画线函数的问题
logic-three-body Apr 20, 2021
0804eaf
Bresenham’s Line
logic-three-body Apr 23, 2021
7acf1a5
未能正确绘制人头
logic-three-body Apr 23, 2021
cb6b9b0
画线函数的问题
logic-three-body Apr 23, 2021
33f6753
画线函数精度问题
logic-three-body Apr 23, 2021
c998b6c
数据记录
logic-three-body Apr 23, 2021
c6a2233
尝试1 (见更改点)
logic-three-body Apr 23, 2021
ddb7a32
尝试2
logic-three-body Apr 23, 2021
ad96098
尝试2
logic-three-body Apr 23, 2021
073ab01
绘制出大概人图像,但整体仍错乱
logic-three-body Apr 23, 2021
8d1ce9f
尝试3准备
logic-three-body Apr 23, 2021
4eb3feb
尝试3准备
logic-three-body Apr 23, 2021
8ffd129
更正错误,见更改
logic-three-body Apr 23, 2021
f4581b2
绘制模型线框
logic-three-body Apr 23, 2021
4db1768
添加数据量文件
logic-three-body Apr 23, 2021
4284ad4
封装wireframe函数
logic-three-body Apr 25, 2021
fa6188f
设计光栅化器,功能:绘制模型线框,绘制三角形
logic-three-body Apr 25, 2021
3db3785
测试光栅化器绘制模型线框
logic-three-body Apr 25, 2021
09e69a4
更改程序结构
logic-three-body Apr 26, 2021
7acf287
更改命名规则
logic-three-body Apr 26, 2021
20d21c3
绘制三角形
logic-three-body Apr 26, 2021
885311e
深度
logic-three-body Apr 26, 2021
334c276
更改程序结构
logic-three-body Apr 26, 2021
875fc5c
水平扫描
logic-three-body Apr 26, 2021
2a06802
绘制三角形
logic-three-body Apr 26, 2021
9b84a99
利用新生成的图理解文中的boundary
logic-three-body Apr 26, 2021
737e7ea
重要节点
logic-three-body Apr 26, 2021
48360a2
重构光栅化器结构
logic-three-body Apr 26, 2021
879744f
将读写图片功能封装入光栅化器
logic-three-body Apr 26, 2021
20c2df5
准备测试绘制三角形函数
logic-three-body Apr 26, 2021
253fb3d
绘制三角形成功
logic-three-body Apr 26, 2021
a6863c7
测试三角形
logic-three-body Apr 26, 2021
5897d04
三角形有露缝
logic-three-body Apr 26, 2021
6ae76f3
原版也有露缝
logic-three-body Apr 26, 2021
405bfae
利用DrawInterpolateTrangile很快绘制,但DrawFillTrangile非常慢
logic-three-body Apr 26, 2021
810fded
尝试光照
logic-three-body Apr 26, 2021
0098445
参考正确光照方向
logic-three-body Apr 26, 2021
b90354e
FillTrangile确实也比较快
logic-three-body Apr 26, 2021
2a46386
YBuffer
logic-three-body Apr 29, 2021
26132d0
研究YBUFFER in 2D
logic-three-body Apr 29, 2021
9cb150e
YBuffer,在我的坐标系下应该是离图片上侧近
logic-three-body Apr 29, 2021
795febd
更改框架勘误(见test.cpp更改min->max)
logic-three-body Apr 29, 2021
11afec8
需要正确的ZBuffer索引
logic-three-body Apr 30, 2021
9e27e39
索引仍有问题
logic-three-body Apr 30, 2021
1254755
ZBuffer会越界
logic-three-body Apr 30, 2021
0e3a222
探索大于小于的关系
logic-three-body Apr 30, 2021
8835802
转换坐标轴,将z轴反转,见main更改
logic-three-body Apr 30, 2021
8708e85
转化NDC标准坐标系[0,1]
logic-three-body Apr 30, 2021
70b2844
int精度太差,见生成的test3.tga
logic-three-body Apr 30, 2021
1e11c0c
绘制图像为黑色
logic-three-body Apr 30, 2021
8678c86
与tinyrender看齐(目前所有变换均在模型空间)
logic-three-body Apr 30, 2021
428905d
增加函数重载
logic-three-body Apr 30, 2021
07f5caf
draw model
logic-three-body May 2, 2021
402552a
调试完整C++项目
logic-three-body May 3, 2021
aba96e0
绘制模型问题
logic-three-body May 3, 2021
135e304
计算精度问题
logic-three-body May 3, 2021
59bd2a7
正交和透视
logic-three-body May 3, 2021
8a1db0c
绘制模型,即将测试变换矩阵
logic-three-body May 3, 2021
823b119
需要用世界坐标来计算光照而不是屏幕坐标
logic-three-body May 3, 2021
3585c01
更改命名规范
logic-three-body May 3, 2021
814daa7
封装函数
logic-three-body May 3, 2021
cf57620
精度问题
logic-three-body May 3, 2021
6b35db2
模型画崩了
logic-three-body May 3, 2021
d7c2a96
精度问题很神奇,见test16.tga和本次更改draw函数
logic-three-body May 3, 2021
52d5a45
精度测试
logic-three-body May 3, 2021
207f86a
惨不忍睹
logic-three-body May 3, 2021
d4357f8
运用world2screen函数代替viewport函数
logic-three-body May 3, 2021
a980f6f
成功绘制,viewport函数不如直接world2screen效果好
logic-three-body May 3, 2021
85a5620
int和float精度区别
logic-three-body May 3, 2021
5d9011e
尝试绘制其他模型
logic-three-body May 3, 2021
ab34cbb
封装函数
logic-three-body May 3, 2021
13d6dbe
绘制其他模型会出问题
logic-three-body May 3, 2021
1f8aee9
绘制出了奇奇怪怪的东西
logic-three-body May 3, 2021
54aab48
灯光方向很重要
logic-three-body May 3, 2021
8f20338
ViewPort矩阵问题
logic-three-body May 4, 2021
413c3b1
找好相机点位才可以渲染出图
logic-three-body May 4, 2021
e2bf5dc
开始利用三角形理解变换
logic-three-body May 6, 2021
8438802
测试viewport
logic-three-body May 6, 2021
3503236
准备测试多三角形
logic-three-body May 6, 2021
66b265d
部分坐标无法绘制成功
logic-three-body May 6, 2021
5a08332
Merge branch '作业3' into 作业1
logic-three-body May 6, 2021
34de6b9
深度测试
logic-three-body May 6, 2021
8b5958d
test6透视投影,test7正交投影
logic-three-body May 6, 2021
b5c4ce9
测试相机参数
logic-three-body May 6, 2021
c3f6979
调试摄像机参数
logic-three-body May 6, 2021
47d0c76
利用three.js html来验证三角形以及变换
logic-three-body May 6, 2021
3b5b6d2
遮挡判断
logic-three-body May 6, 2021
a5bb199
需要搞明白eye,center ,up三个量的交互
logic-three-body May 6, 2021
1873727
摄像机参数设置
logic-three-body May 7, 2021
4d047a9
画的第一张外部模型图
logic-three-body May 7, 2021
e08a2a9
测试遮挡关系
logic-three-body May 7, 2021
5e765d6
光照反向测试
logic-three-body May 7, 2021
da964a0
光源测试
logic-three-body May 7, 2021
bebc7e7
透视灯光
logic-three-body May 7, 2021
4e152bc
归一化光照
logic-three-body May 7, 2021
1c7b990
准备进入shader阶段
logic-three-body May 7, 2021
f1eb8e3
准备研究高罗得着色
logic-three-body May 8, 2021
2bdb8f4
正交透视区别
logic-three-body May 8, 2021
1b8b415
龙模型面顶点索引为负值
logic-three-body May 8, 2021
bcf7d45
读取外部模型,准备更改obj文件格式
logic-three-body May 8, 2021
a72b955
tinyrender的模型加载需要 顶点索引值/uv索引值/法线索引值 缺一不可,导出的正确格式详见blender导出obj“几何数据”
logic-three-body May 8, 2021
c3cd743
视图模型过小
logic-three-body May 8, 2021
a0b7160
模型在视图中过小
logic-three-body May 8, 2021
0f35312
摄像机参数调整
logic-three-body May 9, 2021
75a9dc2
更改导出缩放比例
logic-three-body May 9, 2021
af87cc9
读取龙模型
logic-three-body May 9, 2021
c3c8f4c
灯光方向
logic-three-body May 9, 2021
23af33a
正向视角,注意灯光方向
logic-three-body May 9, 2021
fcfe1fe
从Z轴正向看
logic-three-body May 9, 2021
fa54a7b
锁定此视角,准备打光,旋转将利用model矩阵完成
logic-three-body May 9, 2021
612b97f
锁定光线和视角
logic-three-body May 9, 2021
9052106
准备测试shader框架
logic-three-body May 10, 2021
c8fd4a5
高罗得着色成功
logic-three-body May 10, 2021
f16a2ca
旋转小奶牛
logic-three-body May 12, 2021
3dc5dc8
release版很丝滑
logic-three-body May 12, 2021
c3c83ad
材质小牛转到某角度程序会崩溃
logic-three-body May 12, 2021
824cd36
旋转小牛 phong材质
logic-three-body May 12, 2021
ef39352
旋转小牛bump
logic-three-body May 12, 2021
6d35794
displacement 贴图 旋转某角度程序会崩溃
logic-three-body May 12, 2021
1bc37be
displacement逐帧绘制
logic-three-body May 12, 2021
46ad8fb
各材质逐帧绘制
logic-three-body May 12, 2021
8cba5c6
更改部分名称
logic-three-body May 12, 2021
9dd2e9b
整理目录,尝试其他模型
logic-three-body May 12, 2021
88a5d82
读入龙模型,噪点较多
logic-three-body May 12, 2021
be02558
放大龙后噪点减少
logic-three-body May 12, 2021
3d42318
渲染1k和2k龙图
logic-three-body May 12, 2021
25bd0be
调节变量size可以控制光栅化器大小以及输出图片大小
logic-three-body May 12, 2021
f3745ac
渲染8k龙图
logic-three-body May 12, 2021
ae70b9d
screentogif 生成 gif
logic-three-body May 12, 2021
741ef58
更新readme
logic-three-body May 12, 2021
b50ab02
Merge branch '作业6' into 作业1
logic-three-body May 14, 2021
9b98dad
准备raytrace
logic-three-body May 14, 2021
7867405
update structure
logic-three-body Jun 1, 2021
14f978a
Merge branch '作业7' into 作业1
logic-three-body Jun 1, 2021
b7ddd45
update readme
logic-three-body Jun 8, 2021
49dd2d2
finish readme in assignment1
logic-three-body Jun 8, 2021
ecf2d7c
add readme
logic-three-body Jun 18, 2021
dd65bc2
finish MSAA
logic-three-body Jun 24, 2021
c31f16b
update readme
logic-three-body Jun 24, 2021
fa8b99e
Revert "update readme"
logic-three-body Jun 24, 2021
18beaa5
update readme
logic-three-body Jun 24, 2021
5c52dd4
update readme
logic-three-body Jun 24, 2021
3983b90
change name to submit
logic-three-body Jun 30, 2021
083e9d1
update Beizer readme
logic-three-body Jul 12, 2021
8ee8a4d
update readme assign5
logic-three-body Jul 26, 2021
1b2a7a8
update assignment 8
logic-three-body Jul 28, 2021
4a38975
Merge branch 'master' of github.com:logic-three-body/GameS101_Introdu…
logic-three-body Jul 28, 2021
02848df
finish readme
logic-three-body Jul 28, 2021
b163b2e
update spot
logic-three-body Aug 3, 2021
ccfafaf
update model
logic-three-body Aug 3, 2021
1883535
update readme
logic-three-body Aug 3, 2021
f819f59
update dragon
logic-three-body Aug 13, 2021
67b4164
add 2 lights
logic-three-body Aug 13, 2021
10472b3
mkdir handin
logic-three-body Aug 16, 2021
13dd214
Update README.md
logic-three-body Dec 18, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ bld/
[Bb]in/
[Oo]bj/
[Ll]og/
handin/

# Visual Studio 2015 cache/options directory
.vs/
Expand Down Expand Up @@ -260,3 +261,8 @@ paket-files/
__pycache__/
*.pyc
*.sln
Bezier_curve/
Roate_Project/handin/
Roate_Project/img/img/
MassSpringSystem/CGL/
*.avi
137 changes: 0 additions & 137 deletions 02Z-Buffer_rasterize/02Z-Buffer_rasterize.cpp

This file was deleted.

Binary file added 02Z-Buffer_rasterize/img/supersampling.PNG
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added 02Z-Buffer_rasterize/img/supersampling2.PNG
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
216 changes: 114 additions & 102 deletions 02Z-Buffer_rasterize/main.cpp
Original file line number Diff line number Diff line change
@@ -1,128 +1,140 @@
// clang-format off
// clang-format off
#include <iostream>
#include <opencv2/opencv.hpp>
#include "rasterizer.hpp"
#include "global.hpp"
#include "Triangle.hpp"

constexpr double MY_PI = 3.1415926;

inline double DEG2RAD(double deg) { return deg * MY_PI / 180; }
Eigen::Matrix4f get_view_matrix(Eigen::Vector3f eye_pos)
{
Eigen::Matrix4f view = Eigen::Matrix4f::Identity();
Eigen::Matrix4f view = Eigen::Matrix4f::Identity();

Eigen::Matrix4f translate;
translate << 1,0,0,-eye_pos[0],
0,1,0,-eye_pos[1],
0,0,1,-eye_pos[2],
0,0,0,1;
Eigen::Matrix4f translate;
translate << 1, 0, 0, -eye_pos[0],
0, 1, 0, -eye_pos[1],
0, 0, 1, -eye_pos[2],
0, 0, 0, 1;

view = translate*view;
view = translate * view;

return view;
return view;
}

Eigen::Matrix4f get_model_matrix(float rotation_angle)
{
Eigen::Matrix4f model = Eigen::Matrix4f::Identity();
return model;
Eigen::Matrix4f model = Eigen::Matrix4f::Identity();
return model;
}

Eigen::Matrix4f get_projection_matrix(float eye_fov, float aspect_ratio, float zNear, float zFar)
{
// TODO: Copy-paste your implementation from the previous assignment.
Eigen::Matrix4f projection;

return projection;
// TODO: Use the same projection matrix from the previous assignments
Eigen::Matrix4f projection = Eigen::Matrix4f::Identity();
float n = zNear, f = zFar;
float t = -n * tan(eye_fov / 2.0);//Use -n because the left-hand coordinate used in the framework
// float t=fabs(n)*tan(eye_fov/2.0); //即为倒置三角形
float r = t * aspect_ratio;
float b = -t, l = -r;
projection << (2.0*n) / (r - l), 0, (r + l) / (l - r), 0,
0, (2.0*n) / (t - b), (t + b) / (b - t), 0,
0, 0, (n + f) / (n - f), (2.0*n*f) / (f - n),
0, 0, 1, 0;

return projection;
}

int main(int argc, const char** argv)
{
float angle = 0;
bool command_line = false;
std::string filename = "output.png";

if (argc == 2)
{
command_line = true;
filename = std::string(argv[1]);
}

rst::rasterizer r(700, 700);

Eigen::Vector3f eye_pos = {0,0,5};


std::vector<Eigen::Vector3f> pos
{
{2, 0, -2},
{0, 2, -2},
{-2, 0, -2},
{3.5, -1, -5},
{2.5, 1.5, -5},
{-1, 0.5, -5}
};

std::vector<Eigen::Vector3i> ind
{
{0, 1, 2},
{3, 4, 5}
};

std::vector<Eigen::Vector3f> cols
{
{217.0, 238.0, 185.0},
{217.0, 238.0, 185.0},
{217.0, 238.0, 185.0},
{185.0, 217.0, 238.0},
{185.0, 217.0, 238.0},
{185.0, 217.0, 238.0}
};

auto pos_id = r.load_positions(pos);
auto ind_id = r.load_indices(ind);
auto col_id = r.load_colors(cols);

int key = 0;
int frame_count = 0;

if (command_line)
{
r.clear(rst::Buffers::Color | rst::Buffers::Depth);

r.set_model(get_model_matrix(angle));
r.set_view(get_view_matrix(eye_pos));
r.set_projection(get_projection_matrix(45, 1, 0.1, 50));

r.draw(pos_id, ind_id, col_id, rst::Primitive::Triangle);
cv::Mat image(700, 700, CV_32FC3, r.frame_buffer().data());
image.convertTo(image, CV_8UC3, 1.0f);
cv::cvtColor(image, image, cv::COLOR_RGB2BGR);

cv::imwrite(filename, image);

return 0;
}

while(key != 27)
{
r.clear(rst::Buffers::Color | rst::Buffers::Depth);

r.set_model(get_model_matrix(angle));
r.set_view(get_view_matrix(eye_pos));
r.set_projection(get_projection_matrix(45, 1, 0.1, 50));

r.draw(pos_id, ind_id, col_id, rst::Primitive::Triangle);

cv::Mat image(700, 700, CV_32FC3, r.frame_buffer().data());
image.convertTo(image, CV_8UC3, 1.0f);
cv::cvtColor(image, image, cv::COLOR_RGB2BGR);
cv::imshow("image", image);
key = cv::waitKey(10);

std::cout << "frame count: " << frame_count++ << '\n';
}

return 0;
float angle = 0;
bool command_line = false;
std::string filename = "output.png";

if (argc == 2)
{
command_line = true;
filename = std::string(argv[1]);
}

rst::rasterizer r(700, 700);

Eigen::Vector3f eye_pos = { 0,0,5 };


std::vector<Eigen::Vector3f> pos
{
{2, 0, -2},
{0, 2, -2},
{-2, 0, -2},
{3.5, -1, -5},
{2.5, 1.5, -5},
{-1, 0.5, -5}
};

std::vector<Eigen::Vector3i> ind
{
{0, 1, 2},
{3, 4, 5}
};

std::vector<Eigen::Vector3f> cols//颜色
{
{217.0, 238.0, 185.0},
{217.0, 238.0, 185.0},
{217.0, 238.0, 185.0},
{185.0, 217.0, 238.0},
{185.0, 217.0, 238.0},
{185.0, 217.0, 238.0}
};

auto pos_id = r.load_positions(pos);
auto ind_id = r.load_indices(ind);
auto col_id = r.load_colors(cols);

int key = 0;
int frame_count = 0;

if (command_line)
{
r.clear(rst::Buffers::Color | rst::Buffers::Depth);

r.set_model(get_model_matrix(angle));
r.set_view(get_view_matrix(eye_pos));
r.set_projection(get_projection_matrix(45, 1, 0.1, 50));

r.draw(pos_id, ind_id, col_id, rst::Primitive::Triangle);
cv::Mat image(700, 700, CV_32FC3, r.frame_buffer().data());
image.convertTo(image, CV_8UC3, 1.0f);
cv::cvtColor(image, image, cv::COLOR_RGB2BGR);

cv::imwrite(filename, image);

return 0;
}

while (key != 27)
{
r.clear(rst::Buffers::Color | rst::Buffers::Depth);

r.set_model(get_model_matrix(angle));
r.set_view(get_view_matrix(eye_pos));
r.set_projection(get_projection_matrix(45, 1, 0.1, 50));

r.draw(pos_id, ind_id, col_id, rst::Primitive::Triangle);

cv::Mat image(700, 700, CV_32FC3, r.frame_buffer().data());
image.convertTo(image, CV_8UC3, 1.0f);
cv::cvtColor(image, image, cv::COLOR_RGB2BGR);
auto path = "result2x2.png";
cv::imwrite(path, image);
cv::imshow("image", image);

key = cv::waitKey(10);

std::cout << "frame count: " << frame_count++ << '\n';
}

return 0;
}
// clang-format on
Loading