自制简易的软光栅渲染器(0)
playerzhou
无回复
项目地址:https://github.com/OmegaZhou/SimpleRenderer
前言
- 在学完闫令琪老师的games101课程后,为检验这段时间自己的学习成果,于是就准备自己尝试制作一个软光栅渲染器,顺便巩固一下学习成果
- 本项目同时参考了GitHub上的tinyrender项目,来逐步完成渲染器的核心功能,同时帮助我查缺补漏
- 同时我也参考了相应的知乎问答,对整个光栅渲染器的结构设计有了一个初步的想法
- 在实现本项目的技术选择上
- 在我研究了一下Windows原生的桌面编程相关的API后,感觉太过繁琐,加上不想引入像QT这样比较重的库,因此我决定直接使用自己比较熟悉的HTML5的canvas作为渲染结果的展示平台,这样可以省去许多繁琐的工作
- 同时,在本次项目中仅使用imageData来以像素为单位地直接操作canvas,从而避免使用canvas提供的相关绘制API
- 在相关代码的编写上,我选择使用typescript来帮助我完成类型限制、优化编写类的体验,但为能够直接在文件系统中打开网页访问,我并没有采用模块化的方式将js代码导入HTML文件中,而是以传统方式将所有js文件导入HTML文件
准备工作
- 首先我要完成的就是实现与canvas的直接交互工作,对其进行封装,这样在之后的编写过程中就可以不再与canvas直接打交道了
- 根据习惯,我准备采用的是左下角为原点的坐标系,并定义了
Color
类,表示像素的RGB颜色,并在此基础上定义了存储Color
的二维数组作为帧缓存frame_buffer
- 在研究了canvas所使用的
ImageData
格式之后,我完成了从frame_buffer
到ImageData
的映射工作(包括了将我使用的左下角为原点的坐标系转换为ImageData
使用的左上角为原点的坐标系),并封装为Frame
类的成员函数showImage
,将帧缓存导入canvas并显示 - 这样准备工作就做好了,之后就不用再考虑有关canvas操作的相关问题了
来一发吐槽