当前位置: 首页 > news >正文

shader开发工具

shadered

https://shadered.org/
下载安装exe后,配置vscode插件路径

shadered开发的项目,sprj文件可以在shadered中启动运行

help>information中查看
内置的uniform

glslviewer

https://github.com/patriciogonzalezvivo/glslViewer

源代码uniform文件查看内置的uniform变量

osgviewer

通过osgviewer启动加载指定的shader渲染,并监控文件变化刷新显示

int main(int argc, char** argv) { std::locale::global(std::locale("ZH_CN.UTF-8")); osg::ArgumentParser args(&argc, argv); osgViewer::Viewer viewer(args); // 配置路径(请根据实际情况修改) const std::string WORK_DIR = "D:/OpenSource/WorkStation/cpp/"; const std::string MODEL_PATH = WORK_DIR + "1.osg"; // 你的模型文件 const std::string VERT_PATH = WORK_DIR + "v.glsl"; const std::string FRAG_PATH = WORK_DIR + "f.glsl"; const std::string GEMO_PATH = WORK_DIR + "g.glsl"; const std::string MESH_PATH = WORK_DIR + "g_mesh.glsl"; // 设置窗口位置和大小 viewer.setUpViewInWindow(2000, 300, 400, 300); // 添加事件处理器 viewer.addEventHandler(new osgViewer::WindowSizeHandler()); viewer.addEventHandler(new osgViewer::StatsHandler()); // 配置相机 osg::ref_ptr<osg::Camera> camera = viewer.getCamera(); camera->setClearColor(osg::Vec4(.2f, .2f, .2f, 1.0f)); camera->setProjectionMatrixAsPerspective(60.0f, 1024.0f/768.0f, 0.1f, 1000.0f); // 创建键盘事件处理器 osg::ref_ptr<EdgeModeHandler> edgeHandler = new EdgeModeHandler(); viewer.addEventHandler(edgeHandler); // 启动热重载线程(检测着色器文件变化) std::map<std::string, std::filesystem::file_time_type> fileTimeMap; std::thread([&]() { std::cout << "[信息] 热重载线程已启动" << std::endl; do { bool isChanged = false; if (fileTimeMap[VERT_PATH] != std::filesystem::last_write_time(VERT_PATH)) { fileTimeMap[VERT_PATH] = std::filesystem::last_write_time(VERT_PATH); isChanged = true; std::cout << "[信息] 检测到顶点着色器变化" << std::endl; } if (fileTimeMap[FRAG_PATH] != std::filesystem::last_write_time(FRAG_PATH)) { fileTimeMap[FRAG_PATH] = std::filesystem::last_write_time(FRAG_PATH); isChanged = true; std::cout << "[信息] 检测到片元着色器变化" << std::endl; } if (fileTimeMap[MESH_PATH] != std::filesystem::last_write_time(MESH_PATH)) { fileTimeMap[MESH_PATH] = std::filesystem::last_write_time(MESH_PATH); isChanged = true; std::cout << "[信息] 检测到片元着色器变化" << std::endl; } if (fileTimeMap[GEMO_PATH] != std::filesystem::last_write_time(GEMO_PATH)) { fileTimeMap[GEMO_PATH] = std::filesystem::last_write_time(GEMO_PATH); isChanged = true; std::cout << "[信息] 检测到几何着色器变化" << std::endl; } if (isChanged) { std::cout << "[信息] 重新加载着色器..." << std::endl; osg::ref_ptr<osg::Node> newRootNode; if (std::filesystem::exists(MODEL_PATH) && std::filesystem::exists(MODEL_PATH)) { newRootNode = createCubeWithShader(viewer, VERT_PATH, FRAG_PATH, GEMO_PATH,MESH_PATH); // newRootNode = loadModelWithShader(viewer, MODEL_PATH, VERT_PATH, FRAG_PATH, GEMO_PATH,MESH_PATH); } } std::this_thread::sleep_for(std::chrono::milliseconds(500)); } while (true); }).detach(); return viewer.run(); }

osg中打开日志等级提示,shader中编译错误,会在控制台打印

osg::setNotifyLevel(osg::NOTICE);

不过osg的控制台可能错误比较多,通过osg::ArgumentParser输入正确的glsl版本可以减少错误提示,例如–glsl-version 3.1

http://www.gsyq.cn/news/1602647.html

相关文章:

  • 告别“more than one device/emulator”困扰:精准定位与高效调试指南
  • 鸿蒙 ArkTS 实战:Paper Reader 从状态建模到交互闭环完整解析
  • 从线芯排列到传输性能:深度解析超五类与六类水晶头的设计哲学与实战选择
  • 2026年想找靠谱的金相显微镜工厂 这些实用选购干货值得你参考
  • AI模型能力演进与安全发布机制解析
  • 3分钟掌握HS2-HF Patch:一站式汉化去码解决方案终极指南
  • 15分钟构建专业级黑苹果配置:OpCore-Simplify的智能化解决方案
  • 文件上传漏洞防御实战:从原理到PHP安全实现
  • Android binder(RPC) 通信概念与架构
  • 技术桥接中的抽象分离与实现独立
  • 终极内存检测指南:5步彻底解决电脑蓝屏和死机问题
  • Dalín X 意识框架实测数据报告
  • 如何三步获取阿里云盘Refresh Token?解锁云盘自动化管理新体验
  • A股量化,单策略真的不够用了:我开源了一个双策略自动切换框架
  • 星皓 MDM.Plus 是什么?面向手机租赁和企业设备管理的一站式 MDM 解决方案
  • 5分钟零基础入门:Kafka-UI可视化集群管理终极指南
  • 技术写作的价值与技巧
  • Kafka集群管理太复杂?这款开源Web UI让你5分钟上手
  • Jellyfin Bangumi插件完整指南:打造智能动漫库的终极方案
  • 3分钟掌握B站缓存视频转换:m4s转MP4完整教程
  • LeetCode 287. 寻找重复数:从直觉到 Floyd 判圈的完整推导
  • Python的__init_subclass__验证
  • 操作系统内存管理
  • 猫抓:如何解决网页视频无法下载的三大难题?
  • 哈夫曼编码和香农-范诺编码的性能对比 P124302171陈新阳
  • 欺诈检测化技术行为分析模型与实时规则引擎
  • Bitget发布Web3人才报告:54%求职者受困「经验门槛」,AI与区块链融合成最热职业方向
  • 深度掌控AMD Ryzen:专业级SMU调试工具完全指南
  • TestDisk终极指南:5步快速恢复丢失分区与数据
  • Paperclip - 多Agent编排管理平台详细介绍