00.图形学入门之重新造轮子|软件光栅器
“纸上得来终觉浅,绝知此事要躬行。”
图形学的理论知识相当多,但终归还是要落到代码上来,毕竟这是一门工程性质的学科,想检验自己的理论知识就去实现它。
为什么要做软件光栅/h2>
图形学理论实践
我认为在一头冲进opengl、dx11/12、vulkan这些之前,我们可以先来关注一下这些图形api都是怎么运作的。同时我也刚学完了games101的课程,目前还没接触太多高质量实时渲染相关的知识。我认为在此之前先给自己101的课程来一个总结,来一个实践更容易巩固自己的相关知识基础,并且把自己在101的作业中实现的功能都尽量在自己的渲染器里实现一遍。
C++工程能力锻炼
这个也许是更重要的原因。理论学的再多也只是理论,就像你在大学里可能会学建筑力学、结构力学、工程地质学等等理论,但是如果不去工地上真真切切地戴着安全帽打一打灰,你也不可能成为一个优秀的工程师。这在所有工科都是通用的经验。C++素以复杂、难学出名,如果不去真的在写代码,很容易陷入“看啥啥简单”的陷阱。我自己的C++水平也非常的不乐观,所以我决定在项目中锻炼锻炼C++。
我们的目标
我目前的想法是先将games101作业123的实现内容移植过来,打造一个简单但是确实能渲染正确图像的渲染管线,并在此之上尽量多做一些内容。但不会很多,因为我们迟早都要使用图形api,那么在试水的软件光栅器里试图打造一些高级特性并没有什么意义。
至于软件光线追踪的相关内容我还在考虑,这也是games101作业567的内容,目前暂定,会做,但也不一定会做。
软件光栅需要的准备工作
首先很推荐大家去看一下闫令琪老师的games101现代计算机图形学基础的课程。这门课程深入浅出,作为一个中文课程而言讲的十分精彩,我就不过多赘述了:
https://www.bilibili.com/video/BV1X7411F744pm_id_from=333.337.search-card.all.click&vd_source=53cc792249a3c909fa464e73d9b37ff2
除此之外我们用到了一个开源项目tinyrenderer:
https://github.com/ssloy/tinyrenderer
这个项目本身也是一个课程,这个课程也做的相当精彩,推荐大家去学习一下。我们需要是用到其中tgaimage.cpp和tgaimage.h这两个文件来把我们渲染的结果保存为tga图像文件。
同时两个文件也提供了在某个特定坐标着特定RGB颜色的方法,这就足够我们来渲染一切了。
除此之外我们不需要任何第三方库。
我采用vs2019来构建我们的c++项目,原本想使用cmake,但是本来就是自己做着玩,visual studio实在太好用了。我们已经做到没有使用任何第三方库了,那么秉着多一事不如少一事的思想,在编译上就少踩点坑。
C++标准是20,倒不是我真的一定会用到很多新特性,但是现在企业面试都倾向于问C++11以后的新特性,那我也提前熟悉一下,不过也别指望我能用多好,我用的好的话也不会指望靠这个项目锻炼C++水平。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!