您的位置:首页 > 其它

软件渲染笔记 01 概述与环境搭建

2018-02-11 21:49 239 查看

概述

学OpenGL时,总觉得有些概念不清不楚,想跟深入了解底层.于是,经过一些搜索调研,觉得两个教程比较好: 一个是davrous的3d soft engine. 一个是 ssloy的tinyrenderer. 由于编程语言以及完整的考虑,本系列文章是依据tinyrenderer整理的学习笔记.

这里引用tinyrenderer的写作动机:

In this series of articles, I want to show the way OpenGL works by writing its clone (a much simplified one). Surprisingly enough, I often meet people who cannot overcome the initial hurdle of learning OpenGL / DirectX.

简单的讲:通过这一系列教程,读者将会实现一个简小版的OpenGL.从而在学各种图形API的时候可以更清楚的理解底层代码的真正含义.1

工作流

原作中,只给出了源码,内含一个
makefile
.对于使用linux平台的同学来说应该是驾轻就熟的.由于笔者使用的是windows系统,而且走了一些弯路,这里给出我经过实验的一些结论以及我最后采取的工作流方案.

首先,笔者使用的是windows系统.很自然而然的就使用了
Visual studio
.但是有两个缺陷:

1. 使用visual studio写程序生成tga图片,还得另外用支持查看tga图片格式的软件来查看.

2. 查看tga图片格式的软件,经过几次尝试发现都无法正常刷新得到新生成的图片.

后来想到在类linux平台上来实现可能会比较方便,又实验了两种方案:

1. cgwin+emacs

2. wsl2+vscode

cgwin上的emacs本身就支持查看tga格式的图片,而且有GUI界面.用起来挺方便的.但是由于笔者的emacs掌握有限,总是觉得有些不便.所以最后采用了wsl+vscode.

但是vscode本身并无查看tga图片的功能,所以我在wsl上安装了imagemagick,然后在make中在生成tga的图片后,自动转化为png格式.另外,vscode本身可以配置命令行为wsl的bash.用起来的感觉自认为对于emacs掌握不是很熟练的人来说还是很舒适的.

代码

这里只列出主要代码并进行分析:

#include "tgaimage.h"

const TGAColor white = TGAColor(255, 255, 255, 255);
const TGAColor red   = TGAColor(255, 0,   0,   255);

int main(int argc, char** argv) {
TGAImage image(100, 100, TGAImage::RGB);//画布大小为100*100
image.set(23, 20, red); //(23,20)坐标的格子被设为红色.
image.flip_vertically(); //(0,0)坐标的格子从左下角开始,如果不加这一行的话,(0,0)在左上角.
image.write_tga_file("output.tga");
return 0;
}


点击这里下载完整代码

注意:

1. 不熟悉makefile的同学如果感兴趣可以参考我的另一篇博文Makefile 简明教程.或者直接在当前目录使用
make
即可生成最终图片;
make clean
删除非代码文件.

2. makefile里面的convert指令如果没有的话,就安装imagemagick.

实现的简版OpenGL颇为有限,只能生成图片文件.无法实现各种动态效果.但是考虑到作者做出这样的决定是让对第三方的图形库依赖性尽可能的降低以及让图形学相关代码更突出,这样的思路对于初学者还是很有好处的.
windows subsystem for linux
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: