WorldRenderer.cpp 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #include "client/rendering/renderer/WorldRenderer.h"
  2. WorldRenderer::WorldRenderer(const World& world) : world(world), texture("resources/textures.png") {
  3. TypedBuffer<Triangle> buffer(100);
  4. for(int x = 0; x < world.getSize(); x++) {
  5. for(int y = 0; y < world.getHeight(); y++) {
  6. for(int z = 0; z < world.getSize(); z++) {
  7. if(world.getBlock(x, y, z).getId() != 0) {
  8. addCube(buffer, x, y, z);
  9. }
  10. }
  11. }
  12. }
  13. mesh.build(buffer);
  14. }
  15. void WorldRenderer::render(float lag, Renderer& renderer) {
  16. (void) lag;
  17. (void) renderer;
  18. texture.bindTo(0);
  19. for(int x = 0; x < 2; x++) {
  20. for(int z = 0; z < 2; z++) {
  21. renderer.translateTo(32.0f * x, 0.0f, 32.0f * z).update();
  22. mesh.draw();
  23. }
  24. }
  25. }
  26. bool WorldRenderer::isAir(int x, int y, int z) const {
  27. return world.getBlock(x, y, z).getId() == 0;
  28. }
  29. void WorldRenderer::addCube(TypedBuffer<Triangle>& buffer, float x, float y, float z) {
  30. Vector3 v000(x, y, z);
  31. Vector3 v001(x, y, z + 1);
  32. Vector3 v010(x, y + 1, z);
  33. Vector3 v011(x, y + 1, z + 1);
  34. Vector3 v100(x + 1, y, z);
  35. Vector3 v101(x + 1, y, z + 1);
  36. Vector3 v110(x + 1, y + 1, z);
  37. Vector3 v111(x + 1, y + 1, z + 1);
  38. Vector2 t1(0.1875f, 0.0f);
  39. Vector2 t2(0.25f, 0.0f);
  40. Vector2 t3(0.25f, 0.0625f);
  41. Vector2 t4(0.1875f, 0.0625f);
  42. if(isAir(x, y - 1, z)) {
  43. Vector2 tb(0.125f, 0.0625f);
  44. buffer.add(Triangle(Vertex(v000, Vector2(0.125f, 0.0f)), Vertex(v100, t1), Vertex(v001, tb)));
  45. buffer.add(Triangle(Vertex(v100, t1), Vertex(v101, t4), Vertex(v001, tb)));
  46. }
  47. if(isAir(x, y + 1, z)) {
  48. Vector2 tt(0.3125f, 0.0f);
  49. buffer.add(Triangle(Vertex(v010, t2), Vertex(v011, t3), Vertex(v110, tt)));
  50. buffer.add(Triangle(Vertex(v110, tt), Vertex(v011, t3), Vertex(v111, Vector2(0.3125f, 0.0625f))));
  51. }
  52. if(isAir(x - 1, y, z)) {
  53. buffer.add(Triangle(Vertex(v000, t4), Vertex(v001, t3), Vertex(v010, t1)));
  54. buffer.add(Triangle(Vertex(v001, t3), Vertex(v011, t2), Vertex(v010, t1)));
  55. }
  56. if(isAir(x + 1, y, z)) {
  57. buffer.add(Triangle(Vertex(v100, t3), Vertex(v110, t2), Vertex(v101, t4)));
  58. buffer.add(Triangle(Vertex(v101, t4), Vertex(v110, t2), Vertex(v111, t1)));
  59. }
  60. if(isAir(x, y, z + 1)) {
  61. buffer.add(Triangle(Vertex(v001, t4), Vertex(v101, t3), Vertex(v011, t1)));
  62. buffer.add(Triangle(Vertex(v111, t2), Vertex(v011, t1), Vertex(v101, t3)));
  63. }
  64. if(isAir(x, y, z - 1)) {
  65. buffer.add(Triangle(Vertex(v000, t3), Vertex(v010, t2), Vertex(v100, t4)));
  66. buffer.add(Triangle(Vertex(v110, t1), Vertex(v100, t4), Vertex(v010, t2)));
  67. }
  68. }