Sean Barrett 10 лет назад
Родитель
Сommit
c27a6c6c36
1 измененных файлов с 76 добавлено и 0 удалено
  1. 76 0
      tests/caveview/cave_render.c

+ 76 - 0
tests/caveview/cave_render.c

@@ -2,6 +2,82 @@
 // to GL meshes, and manages threads that do the raw-mesh
 // building (found in cave_mesher.c)
 
+
+// This got lost somewhere
+
+// Q: How accurate is this as a Minecraft viewer?
+//
+// A: Not very. Many Minecraft blocks are not handled correctly:
+//
+//      No signs, doors, redstone, rails, carpets, or other "flat" blocks
+//      Only one wood type
+//      Colored glass becomes regular glass
+//      Glass panes become glass blocks
+//      Stairs are turned into ramps
+//      Upper slabs turn into lower slabs
+//      Water level is incorrect
+//      No biome coloration
+//      Cactus is not shrunk, shows holes
+//      Chests are not shrunk
+//      Chests, pumpkins, etc. are not rotated properly
+//      Torches do not attach to walls
+//      Incorrect textures for blocks that postdate terrain.png
+//      Transparent textures have black fringes due to non-premultiplied-alpha
+//      If a 32x32x256 "quad-chunk" needs more than 300K quads, isn't handled
+//      Only blocks at y=1..255 are shown (not y=0)
+//
+//    Some of these are due to engine limitations, and some of
+//    these are because I didn't make the effort since my
+//    goal was to make a demo for stb_voxel_render.h, not
+//    to make a proper Minecraft viewer.
+//
+//
+// Q: Could this be turned into a proper Minecraft viewer?
+//
+// A: Yes and no. Yes, you could do it, but no, it wouldn't
+//    really resemble this code that much anymore.
+//
+//    You could certainly use this engine to
+//    render the parts of Minecraft it works for, but many
+//    of the things it doesn't handle it can't handle at all
+//    (stairs, water, fences, carpets, etc) because it uses
+//    low-precision coordinates to store voxel data.
+//
+//    You would have to render all of the stuff it doesn't
+//    handle through another rendering path. In a game (not
+//    a viewer) you would need such a path for movable entities
+//    like doors and carts anyway, so possibly handling other
+//    things that way wouldn't be so bad.
+//
+//    Rails, ladders, and redstone lines could be implemented by
+//    using tex2 to overlay those effects, but you can't rotate
+//    tex1 and tex2 independently, so you'd have to have a
+//    separate texture for each orientation of rail, etc, and
+//    you'd need special rendering for rail up/down sections.
+//
+//    You can use the face-color effect to do biome coloration,
+//    but the change won't be smooth the way it is in Minecraft.
+//
+//
+// Q: Why isn't building the mesh data faster?
+//
+// A: Partly because converting from minecraft data is expensive.
+//
+//    Here is the approximate breakdown of an older version
+//    of this executable and lib that did the building single-threaded,
+//    and was a bit slower at building mesh data.
+//
+//    25%   loading & parsing minecraft files (4/5ths of this is zlib)
+//    18%   converting from minecraft blockids & lighting to stb blockids & lighting
+//    10%   reordering from data[z][y][x] (minecraft-style) to data[y][x][z] (stb-style)
+//    40%   building mesh data
+//     7%   uploading mesh data to OpenGL
+//
+//    I did do significant optimizations after the above, so the
+//    final breakdown is different, but it should give you some
+//    sense of the costs.
+
+
 #include "stb_voxel_render.h"
 
 #define STB_GLEXT_DECLARE "glext_list.h"