博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2000行代码实现软渲染引擎
阅读量:6867 次
发布时间:2019-06-26

本文共 1176 字,大约阅读时间需要 3 分钟。

代码地址:

终于实现了自己的软渲染器,图形学的学习暂时告一段落。代码参考知乎上的,自己加入了很多功能包括:

  • 将原来的Gouraud着色改为phong着色
  • 加入一个平行光和4个点光源,物体材质
  • 背面剔除
  • 利用libpng读取外部纹理
  • 实现双线性纹理滤波和mipmap
  • 完整实现3D裁剪算法
  • 简单的投影
  • 利用sdl2实现了mac、ios、windows多平台支持
  • 3D漫游和object简单封装

工程目录:

  • external:依赖库文件
  • project:多平台项目工程以及跟平台相关代码
  • resources:核心代码和资源

依赖库:

跨平台的多媒体开发函数库,非常好用,cocos2dx也使用到了它哦

版本是SDL2-2.0.5,我已经交叉编译成了静态库,可以直接使用

跨平台的png格式读取处理库,如果静态库有问题,可以下载源代码,自行编译

多平台支持:

目前支持mac、ios、windows三个平台,android就暂时不弄了,过程太繁琐。

(windows的release好像有问题)

下面是重点!!

想要通过该工程学习光栅化渲染的同学,请务必备好以下两本书籍:

  • 《3D数学基础:图形与游戏开发》(建议认真看完)
  • 《3D游戏编程大师技巧》上下册

还有其他一些其他资料可以辅助理解

《[计算机图形学].(美国)Peter.Shirley》

一个学习opengl的网站,讲解光影部分挺好

代码简介

tiny3D.h

核心的数学算法和光栅化渲染实现,掌握了它可以说你就彻底弄明白了光栅化渲染

数学部分,全部是重点,特别是矩阵操作等,透视矩阵和旋转矩阵,是重中之重。

光栅化部分,为了实现phong光照加入了重心坐标计算,可能还有更好的实现方法,有能力的同学可以重构之。

main.c

非核心代码,包括sdl和纹理处理,有能力的同学可以自己实现并移植到任何平台

关于学习方法

因为我也是通过参考大神韦易笑的代码来学习图形学的。这里我可以提供一些我的学习经验

首先要端正自己的学习态度,不要认为软渲染有多难,看整个实现也不过1000行左右代码,当然也不要被这微小的代码量所迷惑,量少就意味每一行代码每一个函数都潜藏着巨大的知识量。如果有不明白的,一定要查阅上面提到的两本书,比如和旋转的算法公式,最好都要弄明白推导过程。然后自己实现一遍代码,通过实践加深对原理的理解。

数学部分在于理解,光栅化部分在于实现

请认真实现自己的光栅化部分,每个人的实现方法都不同,也许你的实现会更高效

个人认为软渲染是学习图形学的一个关键点。

等你也实现了自己的软渲染引擎,再看unity3D和shader,就会有一种醍醐灌顶的感觉,甚至可以自行脑补其实现方法呢

下面是截图:

转载于:https://www.cnblogs.com/sdlwlxf/p/6540452.html

你可能感兴趣的文章
org.springframework.data.mapping.PropertyReferenceException: No property xxxx found for type Xxxx
查看>>
Gson解析json数据 亲自测试可用
查看>>
我与监控宝之间的点点滴滴
查看>>
delphi 数据库显示的TDBGrid配置
查看>>
对51CTO的看法
查看>>
userenv和sys_context函数
查看>>
是否会回到起点.回忆只能是回忆
查看>>
原创数据结构算法Flash动画演示课件-Action Script(AS)脚本实现
查看>>
基于Mysql主从同步的读写分离
查看>>
BA 的岗位要求3
查看>>
基于Hyper-V3.0搭建XenDesktop7之九 部署虚拟应用之模板准备
查看>>
JS如何捆绑TypeScript声明文件
查看>>
samba服务配置
查看>>
我的友情链接
查看>>
MyBatis之ResultMap标签
查看>>
[转]WinXP、Win7脚本自动加域及用户资料迁移
查看>>
使用链路聚合进行负载分担
查看>>
NumPy之array
查看>>
ado 设置过滤
查看>>
微软私有云POC部署文档
查看>>