资料介绍
软件简介
RenderHelp 是可编程渲染管线实现,全中文注释,帮助初学者学习渲染原理。
特性介绍
- 单个 RenderHelp.h 文件,从画点开始实现可编程渲染管线,无外部依赖。
- 模型标准,计算精确,使用类 Direct3D 接口。
- 包含一套完整的矢量/矩阵库。
- 包含一套位图 Bitmap 库,方便画点、画线、加载纹理、纹理采样等。
- 使用 C++ 编写顶点着色器 (Vertex Shader) 和像素着色器 (Pixel Shader),方便断点和调试。
- 使用 Edge Equation 精确计算三角形覆盖范围,处理好邻接三角形的边界。
- 使用重心坐标公式计算 varying 插值。
- 使用 1/w 进行透视矫正,绘制透视正确的纹理。
- 使用二次线性插值进行采样,更好的渲染效果。
- 核心渲染实现仅 200 行,突出易读性。
- 写满中文注释,每一处计算都有解释。
- 多个教程例子,从如何画三角形到模型以及光照。
编译运行
随便找个 sample_
开头的例子文件直接 gcc 单文件编译即可:
gcc -O2 sample_07_specular.cpp -o sample_07_specular -lstdc++
在 Mac 下好像要加个 -std=c++17
,我应该没用啥 17 的东西,不过没环境不太确定。某些平台下可能要加一个 -lm
,显示声明一下链接数学库。
运行:
./sample_07_specular
然后得到一个图片文件 output.bmp
:
编程接口
着色器变量
主要使用一个 ShaderContext 的结构体,用于 VS->PS 之间传参,里面都是一堆各种类型的 varying。
// 着色器上下文,由 VS 设置,再由渲染器按像素逐点插值后,供 PS 读取 struct ShaderContext { std::mapvarying_float; // 浮点数 varying 列表 std::map varying_vec2f; // 二维矢量 varying 列表 std::map varying_vec3f; // 三维矢量 varying 列表 std::map varying_vec4f; // 四维矢量 varying 列表 };
顶点着色器
外层需要提供给渲染器 VS 的函数指针,并在渲染器的 DrawPrimitive
函数进行顶点初始化时对三角形的三个顶点依次调用:
// 顶点着色器:因为是 C++ 编写,无需传递 attribute,传个 0-2 的顶点序号 // 着色器函数直接在外层根据序号读取响应数据即可,最后需要返回一个坐标 pos // 各项 varying 设置到 output 里,由渲染器插值后传递给 PS typedef std::functionVertexShader;
每次调用时,渲染器会依次将三个顶点的编号 0
, 1
, 2
通过 index
字段传递给 VS 程序,方便从外部读取顶点数据。
像素着色器
渲染器对三角形内每个需要填充的点调用像素着色器:
// 像素着色器:输入 ShaderContext,需要返回 Vec4f 类型的颜色 // 三角形内每个点的 input 具体值会根据前面三个顶点的 output 插值得到 typedef std::functionPixelShader;
像素着色程序返回的颜色会被绘制到 Frame Buffer 的对应位置。
绘制三角形
调用下面接口可以绘制一个三角形:
bool RenderHelp::DrawPrimitive()
该函数是渲染器的核心,先依次调用 VS 初始化顶点,获得顶点坐标,然后进行齐次空间裁剪,归一化后得到三角形的屏幕坐标。
然后两层 for 循环迭代屏幕上三角形外接矩形的每个点,判断在三角形范围内以后就调用 VS 程序计算该点具体是什么颜色。
- 可编程控制器AC500用户手册 1次下载
- 可编程逻辑器件PLD课件下载 31次下载
- MC14541B可编程定时器芯片数据手册 7次下载
- 基于可编程逻辑的SDRAM控制方法设计 8次下载
- 系统可编程闪存中的RISC微控制器LGT8XM 0次下载
- ADXL355低噪声可编程文件下载 0次下载
- 可编程控制器原理及应用 21次下载
- 三菱可编程逻辑控制器密码破解软件下载 6次下载
- 现场可编程门阵列简介 76次下载
- 可编程逻辑阵列fpga和cpld说明 25次下载
- 可编程加减计时器的设计与实现的程序免费下载 11次下载
- EDA技术与可编程ASIC的设计实现 0次下载
- 高速可编程遥感卫星数据模拟源的设计与实现
- EDA技术与可编程ASIX的设计实现方案
- 可编程GOLD码的VHDL实现
- 什么是现场可编程逻辑阵列?它有哪些特点和应用? 481次阅读
- 现场可编程门阵列的原理和应用 456次阅读
- 现场可编程门阵列是什么 2217次阅读
- 可编程逻辑器件测试方法 1160次阅读
- 可编程电源的结构 可编程电源的使用事项 856次阅读
- 可编程电源的原理 可编程电源的优缺点 2150次阅读
- 实现可编程逻辑电路的三种主要技术 2124次阅读
- 可编程控制器的特点有哪些 8439次阅读
- 使用AT89C51实现的微型可编程控制器的讲解 2601次阅读
- 采用5管单元的SRAM结构实现CPLD可编程电路的设计 1855次阅读
- 可编程电源应用与选型详解 1.3w次阅读
- GPU管线各个阶段知识点详细的分析理解 5324次阅读
- GPU原理 GPU渲染流程 9300次阅读
- 可编程控制器基本知识_可编程控制器原理及应用 5.8w次阅读
- 可编程电源简介 2067次阅读
下载排行
本周
- 1Keysight B1500A 半导体器件分析仪用户手册、说明书 (中文)
- 19.00 MB | 4次下载 | 免费
- 2使用TL431设计电源
- 0.67 MB | 2次下载 | 免费
- 3BT134双向可控硅手册
- 1.74 MB | 2次下载 | 1 积分
- 4一种新型高效率的服务器电源系统
- 0.85 MB | 1次下载 | 1 积分
- 5LabVIEW环形控件
- 0.01 MB | 1次下载 | 1 积分
- 6PR735,使用UCC28060的600W交错式PFC转换器
- 540.03KB | 1次下载 | 免费
- 751单片机核心板原理图
- 0.12 MB | 1次下载 | 5 积分
- 8BP2879DB支持调光调灭的非隔离低 PF LED 驱动器
- 1.44 MB | 1次下载 | 免费
本月
- 1开关电源设计原理手册
- 1.83 MB | 54次下载 | 免费
- 2FS5080E 5V升压充电两串锂电池充电管理IC中文手册
- 8.45 MB | 23次下载 | 免费
- 3DMT0660数字万用表产品说明书
- 0.70 MB | 13次下载 | 免费
- 4UC3842/3/4/5电源管理芯片中文手册
- 1.75 MB | 12次下载 | 免费
- 5ST7789V2单芯片控制器/驱动器英文手册
- 3.07 MB | 11次下载 | 1 积分
- 6TPS54202H降压转换器评估模块用户指南
- 1.02MB | 8次下载 | 免费
- 7STM32F101x8/STM32F101xB手册
- 1.69 MB | 8次下载 | 1 积分
- 8基于MSP430FR6043的超声波气体流量计快速入门指南
- 2.26MB | 7次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935119次下载 | 10 积分
- 2开源硬件-PMP21529.1-4 开关降压/升压双向直流/直流转换器 PCB layout 设计
- 1.48MB | 420061次下载 | 10 积分
- 3Altium DXP2002下载入口
- 未知 | 233084次下载 | 10 积分
- 4电路仿真软件multisim 10.0免费下载
- 340992 | 191367次下载 | 10 积分
- 5十天学会AVR单片机与C语言视频教程 下载
- 158M | 183335次下载 | 10 积分
- 6labview8.5下载
- 未知 | 81581次下载 | 10 积分
- 7Keil工具MDK-Arm免费下载
- 0.02 MB | 73807次下载 | 10 积分
- 8LabVIEW 8.6下载
- 未知 | 65987次下载 | 10 积分
评论
查看更多