ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

stb 的 caveview 示例怎么运行才能查看 Minecraft Anvil 世界?

2026/9/10 15:44:09 拓冰建站 浏览量
stb 的 caveview 示例怎么运行才能查看 Minecraft Anvil 世界? stb 的 caveview 示例怎么运行才能查看 Minecraft Anvil 世界【免费下载链接】stbstb single-file public domain libraries for C/C项目地址: https://gitcode.com/GitHub_Trending/st/stbcaveview 是 stb 仓库里放在 tests/caveview 目录下的示例程序它的用途是把 stb_voxel_render.h 这套体素渲染库跑在一个真实的 Minecraft Anvil 世界上用 OpenGL 把.mca区块文件里的地形渲染出来。README 明确说它没有 GUI 配置界面Theres no GUI整个首次使用流程就三步找到存放 Anvil 区块文件的目录、把 Minecraft 的terrain.png贴图放进该目录、然后在这个目录里直接运行程序。注意它不是精确的 Minecraft 查看器很多方块类型渲染不完整定位是stb_voxel_render.h的演示详见 tests/caveview/README.md。准备把 Anvil 世界文件和 terrain.png 放到同一目录caveview 从当前工作目录读取世界数据这一点决定了运行方式。源码 cave_parse.c 按 Anvil 格式用相对路径打开区块文件sprintf(filename, r.%d.%d.mca, reg_x, reg_z);也就是说程序运行时会去当前目录找r.区块组X.区块组Z.mca这类文件。所以找到你的世界数据目录。Minecraft Anvil 格式下区块组文件r.x.y.mca位于world/region/子目录README 说的Find a directory with Minecraft Anvil files (.mca)指的就是这个目录。把 Minecraft 的terrain.png方块贴图一张 16×16 网格图复制进同一个目录。README 的建议做法是do a google image search自行下载仓库里不带这个文件需要读者自己准备。之后的运行都要在这个目录里进行。关于terrain.pngcave_render.c 的render_init()用stbi_load(terrain.png, ...)从当前目录加载它来构建方块纹理数组加载失败时程序会走build_base_texture(i)分支用生成的基础纹理顶上不会因此崩溃但贴图就不会是 Minecraft 原样的了。所以想看到正确的方块外观terrain.png是必须放在运行目录里的。运行环境Windows 上的 SDL2 OpenGL 程序caveview 不是跨平台命令行程序文档和工程文件都指向 Windows 构建路径入口是 cave_main.c 里的SDL_main它初始化 SDL、创建 OpenGL 上下文要求SDL_GL_CONTEXT_PROFILE_COMPATIBILITY、3.1 版本窗口初始 1920×1080后进入渲染主循环仓库提供的是 caveview.dspVisual C 工程文件Release 链接库包括sdl2.lib、opengl32.lib、glu32.lib、winmm.lib、sdl2_mixer.lib编译包含路径-I ..\..指向仓库根目录工程的源文件列表即程序由哪些部分组成cave_main.c、cave_mesher.c、cave_parse.c、cave_render.c外加 win32/SDL_windows_main.c 作为 WinMain 入口以及根目录的stb.h、stb_easy_font.h、stb_image.h、stb_voxel_render.h和本目录的stb_gl.h、stb_glprog.h、glext_list.h。tests/Makefile里没有 caveview 的构建目标所以按仓库现有资料构建路径就是用 VC 打开tests/caveview/caveview.dsp编译。编译成功后得到 Windows 可执行程序再拿到下面一步的目录里运行。执行在 Anvil 文件所在目录运行程序把编译好的 caveview 可执行程序复制到第 1 步的目录和r.*.mca文件、terrain.png同一层然后以该目录为当前工作目录运行它。README 的原话就是Run from that directory。程序没有命令行参数启动后直接进入 3D 视图。窗口左上角的叠加信息来自 cave_main.c 的draw_stats()正常情况下会持续刷新一组实时数据Frame time: %6.2fms, CPU frame render time: %5.2fms Tris: %4.1fM drawn of %4.1fM in range Vbuf storage: %dMB in frustum of %dMB in range of %dMB in cache QChunks: %3d in frustum of %3d valid of %3d in range View distance: %d blocks上面是源码中的格式串实际数值因世界和机器而异仅示意。判断世界是否加载出来了就看这里QChunks一行的 in range / valid 计数应该大于 0且画面中能看到方块地形——这对应源码里chunk_locations当前范围内找到的区块组数和chunks_considered其中有效的两个统计量。如果画面是空的回到目录结构检查r.*.mca是否真的在程序的工作目录里。操作方式来自 cave_main.c 的键盘映射A/D/W/S 与左右 Ctrl 控制移动与上下空格上下移动鼠标转向启动时SDL_SetRelativeMouseMode(SDL_TRUE)捕获鼠标按 1/2 切换一个演示用的tex2贴图混合效果Esc 退出。已知限制它渲染得不像 MinecraftREADME 的 FAQ 列出了这个查看器的渲染差异跑起来后发现某些方块不对劲时先对照这份清单大多属于设计内限制而不是你的环境问题没有红石、铁轨等平面方块也没有牌子、门、栅栏、地毯等复杂几何体楼梯被渲染成斜坡上层台阶变下层台阶彩色玻璃变成普通玻璃玻璃面板变成玻璃方块水是不透明的且水面高度不正确没有生物群系着色仙人掌和箱子没有缩小箱子会被画成两个火把是hack式绘制不会贴墙terrain.png之后新增的方块贴图不正确透明贴图因非预乘 alpha 有黑边天空光与方块光合并成一个光照值只显示 y1..255 的方块y0 不显示单个 32×32×256 的 quad-chunk 若需要超过 800K 个四边形则无法处理README 说这种情况极不可能出现。README 也解释了原因一部分是引擎限制一部分是作者的目标本来就是为 stb_voxel_render.h 做演示而不是做一个正式的 Minecraft 查看器。如果以后想深入区块文件怎么被解析看 cave_parse.c它处理 Anvil 区块组的 sector 表、压缩区块加载和区块缓存NUM_CACHED_X/Z为 64。网格是怎么生成的看 cave_mesher.c 和 cave_render.c后者负责terrain.png加载、纹理数组与着色器程序创建。渲染库本身的接口stb_voxel_render.h 头部注释说明了用法——在一个 C 文件里先#define STB_VOXEL_RENDER_IMPLEMENTATION再包含该头文件即可生成实现。README 里还有一段关于 mesh 构建耗时的旧版性能拆解加载解析 Minecraft 文件约 25%、转换 blockid 约 18%、重排约 10%、构建 mesh 约 40%、上传 OpenGL 约 7%并注明这是旧版本的单线程数据仅供了解各项开销的量级。【免费下载链接】stbstb single-file public domain libraries for C/C项目地址: https://gitcode.com/GitHub_Trending/st/stb创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考