论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
软件与程序人生
›
后端开发
›
.Net
›
使用 .NET 8.0 和 OpenGL 创建一个简易的渲染器 ...
使用 .NET 8.0 和 OpenGL 创建一个简易的渲染器
前进之路
金牌会员
|
2024-5-2 03:15:53
|
显示全部楼层
|
阅读模式
楼主
主题
968
|
帖子
968
|
积分
2904
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
前言
我个人对三维渲染领域的开发有着浓厚的兴趣,尽管并未在相关行业工作过,我的了解还很片面。去年,在与群友聊天时,他们推荐了一本《Unity Shader入门精要》,说适合像我这样想自学的新人,于是我打开了通往新世界的大门。这本书涵盖了很多基础的渲染知识,如光照、阴影、各种风格的渲染等等。对于有兴趣的同学,可以在京东读书中在线阅读,无需购买纸质版。 在学习过程中,我发现使用Unity Shader编写着色器非常方便,它很好地封装了渲染概念中的Pipeline、Pass等要点。因此,我萌生了一个想法:是否可以模仿Unity Shader来开发一款属于自己的渲染器呢?
必备的技术点 (不分先后)
线性代数 - 在编写Shader时,了解线性代数是至关重要的,因为许多内置函数与线性代数相关,帮助你理解代码含义。
图形学基础 - 了解图形学基础也是必要的,即使只对图形库的作用和渲染流程有基本了解。
图形库API - 掌握图形库API是开发渲染器的核心,可以根据个人偏好选择适合自己的API,如OpenGL、Vulkan、DirectX等。
编程基础 - 编程基础也是必备技能。
这些知识结合起来,可以帮助你更好地开发自己的渲染器。
项目搭建和所需依赖
Silk.NET.OpenGL - OpenGL 的 C# 包装器。
Silk.NET.Shaderc、Silk.NET.Shaderc.Native - 用于以 SPIR-V 方式编译 GLSL。注意,OpenGL 4.6 支持 SPV Shader。
Silk.NET.Windowing、Silk.NET.Input - 对 glfw、sdl 窗口进行包装,包含控制器输入(鼠标、键盘等)。
StbImageSharp - 用于解析图片。
Silk.NET.Assimp - 用于解析三维模型。
Silk.NET.Maths - 一个完善的数学库。
Hexa.NET.ImGui、Hexa.NET.ImGuizmo - ImGui 的 C# 包装器。
项目架构
TrContext.cs - 统一管理使用的 GL 和 GL 扩展的上下文。
TrShader.cs - 用于加载 Shader,支持 SPV 二进制文件和 Shader 字符串。
TrRenderPipeline.cs - 管理一条管线中的 Shader,并维护管线状态,如混合状态、重采样、深度测试、模板测试等。
TrRenderPass.cs - 管理多条管线和切换管线。
TrTexture.cs - 管理纹理和采样器属性。
TrFrame.cs - 创建并维护一个 Frame,支持多重采样。
TrScene.cs - 内置一个 Frame 的 ImGui 窗口,用于绑定渲染。
TrBuffer.cs - 使用 OpenGL 创建并维护内存,可设置内存优先级。
TrTransform.cs - 简易的矩阵变换类,支持平移、缩放、旋转。
TrCamera.cs - 相机类。
TrMesh.cs - 管理网格体的顶点数据和索引数据。
TrMaterial.cs - 渲染器的核心,管理着渲染管线和材质属性,负责进行网格的渲染。
项目中,所有材质和 Shader 按照书中的章节进行了分组管理。
项目预览
初始界面
窗体菜单
场景模型拾取和 Transform
漫反射场景
各类纹理渲染
Shadertoy 网站的 shader 渲染,我抄了几个
Shadertoy BETA
项目地址
qian-o/Triangle: OpenGL 实战项目。 (github.com)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
前进之路
金牌会员
这个人很懒什么都没写!
楼主热帖
UWP/WinUI3 Win2D PixelShaderEffec ...
低代码平台 - 危险的赌注
Docker 基础 - 1
后台性能测试规范
小小项目-博客系统 - 服务器版本 - jav ...
Python3程序捕获Ctrl+C终止信号 ...
端午假期整理了仿天猫H5 APP项目vue.js ...
Redis常见使用场景
实用五步法教会你指标体系的设计与加工 ...
Fastjson反序列化
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
程序人生
Java
DevOps与敏捷开发
运维.售后
linux
物联网
Oracle
前端开发
备份
快速回复
返回顶部
返回列表