使用FPGA制作简单的三维渲染器

简介

这是我在 Verillog数字系统设计(A001908) 上的课程设计。使用FPGA的开发板NEXYS4 DDR 设计一个3D渲染器,最终在VGA显示屏上输出一个3D的立方体。
FPGA(Field-Programmable Gate Array),即现场可编程门阵列。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
渲染(英语:render,或称为绘制)在电脑绘图中,是指以软件由模型生成图像的过程。模型是用语言或者数据结构进行严格定义的三维物体或虚拟场景的描述,它包括几何、视点、纹理、照明和阴影等信息。图像是数字图像或者位图图像。彩現用于描述:计算视频编辑软件中的效果,以生成最终视频的输出过程。

思路

算法层面

根据计算机图形学基础知识,要在2维屏幕上显示3维图形,需要对3维点阵进行4步的矩阵变换 。

图1 图片来源网络
考虑到其中每一步都涉及矩阵的运算,计算量较大同时可以并行完成。使用FPGA并行电路设计加速运行速度。

硬件层面

为了将上述变换后的图像显示出来,需要一个RAM来存储当前显存数据,并且需要根据VGA的显示原理,输出合适的信号。

代码实现

整个程序由一个顶层文件,和两个底层文件构成。
顶层文件:VGA_RAM.v 用于整合各个模块功能,完成设计目的
底层文件:
 Math_3D.v 用于计算前述思路中算法层面的计算输出二维点坐标数据
 display:vga1024x768.v 用于根据坐标数据输出VGA信号
由于代码近一千行,篇幅有限,故不在此展示,放置于Github中
https://github.com/Yufr0/FPGA_3D_CUBE

运行展示

0-1
1

参考

http://www.cnblogs.com/graphics/archive/2012/07/25/2582119.html
3D数学基础:图形与游戏开发

总结

对于初学Verillog的我来说这是一个有挑战的项目,一开始我甚至都不确定是否能够把它做出来。最后经过十多天的不断尝试,不断纠正错误,最后终于将其完成。通过完成这个项目,我更加熟悉了计算机图形学的变换矩阵,理解的FPGA背后的工作原理。

Show Comments