电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>电子资料>RenderHelp可编程渲染管线实现

RenderHelp可编程渲染管线实现

2022-05-30 | zip | 5.03 MB | 次下载 | 免费

资料介绍

授权协议 MIT
开发语言 C/C++
操作系统 跨平台
软件类型 开源软件

软件简介

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::map varying_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::function VertexShader;

每次调用时,渲染器会依次将三个顶点的编号 012 通过 index 字段传递给 VS 程序,方便从外部读取顶点数据。

像素着色器

渲染器对三角形内每个需要填充的点调用像素着色器:

// 像素着色器:输入 ShaderContext,需要返回 Vec4f 类型的颜色
// 三角形内每个点的 input 具体值会根据前面三个顶点的 output 插值得到
typedef std::function PixelShader;

像素着色程序返回的颜色会被绘制到 Frame Buffer 的对应位置。

绘制三角形

调用下面接口可以绘制一个三角形:

bool RenderHelp::DrawPrimitive()

该函数是渲染器的核心,先依次调用 VS 初始化顶点,获得顶点坐标,然后进行齐次空间裁剪,归一化后得到三角形的屏幕坐标。

然后两层 for 循环迭代屏幕上三角形外接矩形的每个点,判断在三角形范围内以后就调用 VS 程序计算该点具体是什么颜色。

 

下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1储能电源市场分析
  2. 7.99 MB  |  7次下载  |  免费
  3. 2储能电源市场分析报告
  4. 2.61 MB   |  6次下载  |  免费
  5. 3磁环电感定制时应该注意什么
  6. 0.32 MB   |  2次下载  |  免费
  7. 4具有DCS-Control™ 功能的 3V 到 17V 0.5A 降压转换器TPS6217x-Q1数据表
  8. 3.17MB   |  1次下载  |  免费
  9. 5labview文档教程资料(一)
  10. 24.29 MB   |  1次下载  |  免费
  11. 6集成电流镜的 TPS61391 85VOUT 升压转换器数据表
  12. 1.54MB   |  次下载  |  免费
  13. 7NCV7755 简单评估板数据手册
  14. 1.43 MB  |  次下载  |  免费
  15. 8低纹波开关电容降压调节器LM2772数据表
  16. 2.08MB   |  次下载  |  免费

本月

  1. 1ES9038PRO解码芯片的电路原理图介绍
  2. 0.25 MB   |  35次下载  |  5 积分
  3. 2UHD智能显示SoC VS680产品简介
  4. 0.46 MB   |  11次下载  |  免费
  5. 3STM32国内外发展现状
  6. 1.15 MB   |  11次下载  |  免费
  7. 4ATmega8芯片中文手册
  8. 2.45 MB   |  8次下载  |  1 积分
  9. 5TDK电容器产品指南
  10. 11.88 MB   |  7次下载  |  1 积分
  11. 6储能电源市场分析
  12. 7.99 MB  |  7次下载  |  免费
  13. 7传感芯片选型指南
  14. 3.60 MB   |  6次下载  |  免费
  15. 8储能电源市场分析报告
  16. 2.61 MB   |  6次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935086次下载  |  免费
  3. 2开源硬件-PMP21529.1-4 开关降压/升压双向直流/直流转换器 PCB layout 设计
  4. 1.48MB  |  420050次下载  |  免费
  5. 3Altium DXP2002下载入口
  6. 未知  |  233068次下载  |  免费
  7. 4电路仿真软件multisim 10.0免费下载
  8. 340992  |  191316次下载  |  免费
  9. 5十天学会AVR单片机与C语言视频教程 下载
  10. 158M  |  183316次下载  |  免费
  11. 6labview8.5下载
  12. 未知  |  81567次下载  |  免费
  13. 7Keil工具MDK-Arm免费下载
  14. 0.02 MB  |  73786次下载  |  免费
  15. 8NI LabVIEW中实现3D视觉的工具和技术
  16. 未知  |  70088次下载  |  免费