ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

stb_voxel_render.h 的 STBVOX_CONFIG_MODE 0/1/20/21 怎么选?

stb_voxel_render.h 的 STBVOX_CONFIG_MODE 0/1/20/21 怎么选? stb_voxel_render.h 的 STBVOX_CONFIG_MODE 0/1/20/21 怎么选【免费下载链接】stbstb single-file public domain libraries for C/C项目地址: https://gitcode.com/GitHub_Trending/st/stb在 stbsingle-file public domain libraries for C/C仓库中使用 stb_voxel_render.h 构建体素世界网格时编译器会强制要求你定义STBVOX_CONFIG_MODE——未定义时会直接报错Must defined STBVOX_CONFIG_MODE to select the mode。这个宏决定生成的 shader、uniform 信息和 mesh 的缓冲布局值选错不在 0/1/20/21 之内会得到Selected value of STBVOX_CONFIG_MODE is not supported。本文给出这 4 个取值的含义、选择依据以及配置后如何核对缓冲布局是否符合所选模式。先弄清两个正交维度4 个合法取值实际上是两个维度的组合源文件中的模式表stb_voxel_render.h写得很明确模式值含义每 quad 字节数面数据存放方式0带纹理块Textured blocks32顶点属性 uniform1带纹理块Textured blocks20部分数据存入 texture buffer20不带纹理块Untextured blocks32顶点属性 uniform21不带纹理块Untextured blocks20部分数据存入 texture buffer奇偶维度0/1 对 20/21决定是否需要贴图。0/1使用贴图tex1、tex2 各支持 256 张贴图索引面颜色为 0..63 的 6 位调色板索引20/21不使用贴图改用 24-bit 体素颜色2^24 种颜色通过输入描述里的stbvox_rgb *rgb数组按 3D 坐标提供——该字段文档明确标注 24-bit voxel color for STBVOX_CONFIG_MODE 20 or 21 onlystb_voxel_render.h。整十维度0/20 对 1/21决定每个 quad 的缓冲大小和存放位置。0/20是 32 字节 quad1/21是 20 字节 quad代价是必须用 texture buffer 存 quad 的面数据。文件头部的候选模式表还列出了 2、3、4、5、6、10、11、12、22、23、24 等更紧凑的设计但注释写明 Only modes 0, 1, and 20, and 21 are currently implementedstb_voxel_render.h其余数值会触发上面提到的#error不要使用。按你的渲染需求选值文件头部的 INTEGRATION ARCstb_voxel_render.h给出了官方推荐的推进路径Step 1先定义STBVOX_CONFIG_MODE为0。文档说这是 easiest to get working 的模式只使用顶点属性和 uniform32 字节/quad并且会限制一些表的大小以避免触碰 uniform 数量限制。Step 2改成1。需要引入 texture buffer 来存放 quad 数据把每 quad 大小从 32 降到 20 字节。Step 3可选再定义STBVOX_CONFIG_PREFER_TEXBUFFER。把部分 uniform 数组改为存入 texture buffer表可以更大并可在部分硬件上避开 从 uniform 取非 uniform 数据 的潜在慢路径。据此选择可以这样判断世界块需要贴图 → 在0和1之间选追求最快跑通用0要更小的 mesh、且能用 texture buffer →1。世界不需要贴图、只需纯色体素例如体素地形/迷宫类演示→ 在20和21之间选对应关系同上并通过rgb数组按体素提供 24-bit 颜色。需要多个模式共存于同一程序文档给出做法是用STB_VOXEL_RENDER_STATIC在不同文件里生成多份私有实现再自行封装stb_voxel_render.h。仓库内自带代码都采用了1tests/caveview/cave_mesher.c 和 C/C 编译测试 tests/test_c_compilation.c、tests/test_cpp_compilation.cpp 都是#define STBVOX_CONFIG_MODE 1。caveview 是一个可运行的 Minecraft 查看器示例适合对照模式1下的完整接入方式。配置定义宏并包含头文件库的使用约定是在一个C/C 文件里先定义STB_VOXEL_RENDER_IMPLEMENTATION再#include头文件实现会生成在该文件中若定义STB_VOXEL_RENDER_STATIC实现则为该文件私有。STBVOX_CONFIG_MODE必须在包含之前定义。最小模式选择写法// 模式四选一0 / 1 / 20 / 21 #define STBVOX_CONFIG_MODE 0 // 整个程序只在一个 C/C 文件中定义一次 #define STB_VOXEL_RENDER_IMPLEMENTATION // 可选定义后实现仅限本文件私有多模式共存时需要 // #define STB_VOXEL_RENDER_STATIC #include stb_voxel_render.h注意 shader 目前是 GLSL only定义STBVOX_CONFIG_HLSL会报错因为文档标注 NOT IMPLEMENTEDstb_voxel_render.h。配置后核对缓冲数量与每 quad 字节数模式选定后mesh 的缓冲布局随之确定可用 API 查询核对是否符合预期stb_voxel_render.h模式0/20stbvox_get_buffer_count返回1个 slot该 slot 是两组交错顶点属性——attr_vertex单个 32-bit uint与attr_face单个 32-bit uint。模式1/21返回2个 slot第一个 buffer 应分配为第二个 buffer 的4 倍大小第一个 buffer 只含attr_vertex32-bit uint第二个 buffer 是 32-bit uint 数组形式的 texture buffer 数据通过STBVOX_UNIFORM_face_data指定的采样器访问。stbvox_mesh_maker mm; stbvox_init_mesh_maker(mm); int slots stbvox_get_buffer_count(mm); // 模式 0/20 应为 1模式 1/21 应为 2 int slot0 stbvox_get_buffer_size_per_quad(mm, 0); // 模式 0/20 为 32模式 1/21 第一个 slot 更大 int slot1 (slots 1) ? stbvox_get_buffer_size_per_quad(mm, 1) : 0; // 模式 1/21第一个 buffer 尺寸应为第二个的 4 倍stbvox_set_buffer 的说明分配缓冲时按stbvox_set_buffer的说明设置对应 slot 的大小即可每 quad 的占用量由stbvox_get_buffer_size_per_quad给出文档说明该值 fixed based on the configuration youve selected at compile time。边界与限制只有0、1、20、21已实现候选表里的其他数值更小的 14/12/10/6 字节 quad 等仅是设计草案当前不可用。切换到别的模式需要改动 mesh 创建部分的代码其余部分文档称 should be seamlessstb_voxel_render.h。生成 mesh 后上传 GPU、状态管理和绘制都由使用者自行负责大地图需要拆成多个 vertex buffer每个 mesh 的空间精度有限且这本身也利于视锥剔除stb_voxel_render.h。若后续想进一步压缩 mesh作者提到未来可能加入小至 6 字节/quad 的新模式但尚无实现计划现阶段在 4 个已实现模式中按上述两个维度选择即可。【免费下载链接】stbstb single-file public domain libraries for C/C项目地址: https://gitcode.com/GitHub_Trending/st/stb创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表