当前位置: 首页 > 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.jsqmd.com/news/1090699/

相关文章:

  • ComfyUI BrushNet图像修复工作流终极配置指南:5个常见错误与解决方案
  • 告别“more than one device/emulator”困扰:精准定位与高效调试指南
  • ComfyUI-Impact-Pack终极指南:5个技巧让AI图像细节清晰如镜
  • DP159RGZ评估模块硬件设计与信号完整性调试实战解析
  • 鸿蒙 ArkTS 实战:Paper Reader 从状态建模到交互闭环完整解析
  • 从线芯排列到传输性能:深度解析超五类与六类水晶头的设计哲学与实战选择
  • 微信网页版访问受限?三分钟教你通过浏览器插件绕过限制
  • 异步爬虫 aiohttp 进阶实战——高并发采集的正确姿势
  • 鸿蒙 ArkTS 实战:Lab Record Book 从状态建模到交互闭环完整解析
  • Python 知识体系深度解析与学习指南
  • 【操作系统】经典同步问题:生产者-消费者
  • 李宏毅深度学习课程集成学习学习报告
  • AI模型能力演进与安全发布机制解析
  • 3分钟掌握HS2-HF Patch:一站式汉化去码解决方案终极指南
  • 93亿反杀800亿!Ideogram 4登顶开源之王,设计师要失业了?
  • 2026年想找靠谱的金相显微镜工厂 这些实用选购干货值得你参考
  • Android binder(RPC) 通信概念与架构
  • Gemini原生多模态:统一表示空间与跨模态因果推理
  • TVA在具身智能产业化体系的落地案例详解(4)
  • 文件上传漏洞防御实战:从原理到PHP安全实现
  • 15分钟构建专业级黑苹果配置:OpCore-Simplify的智能化解决方案
  • SN65DSI8X视频桥接芯片硬件设计:从电源管理到高速信号完整性实战
  • 为什么你的ChatGPT API账单比同行高3.2倍?——GPT-4 Turbo vs GPT-3.5 Turbo的11项成本对比实验报告
  • Dalín X 意识框架实测数据报告
  • 技术桥接中的抽象分离与实现独立
  • 终极内存检测指南:5步彻底解决电脑蓝屏和死机问题
  • 鸿蒙 ArkTS 实战:Essay Material Library 从状态建模到交互闭环完整解析
  • 【声呐仿真】实战指南:从零部署DAVE与UUV Simulator完整环境
  • AI论文写作软件推荐
  • WorkshopDL:高效便捷的跨平台Steam创意工坊下载解决方案