Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

4 лет назад
4 лет назад
4 лет назад
4 лет назад
4 лет назад
4 лет назад
4 лет назад
4 лет назад
4 лет назад
4 лет назад
4 лет назад
4 лет назад
4 лет назад
4 лет назад
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /*
  2. * =====================================================================================
  3. *
  4. * Filename: terraingen.cpp
  5. *
  6. * Description: Terrain generator source
  7. *
  8. * Version: 1.0
  9. * Created: 05/08/2014 06:45:02 PM
  10. * Revision: none
  11. * Compiler: gcc
  12. *
  13. * Author: YOUR NAME (),
  14. * Organization:
  15. *
  16. * =====================================================================================
  17. */
  18. #include "terraingen.h"
  19. #include "chunk.h"
  20. #include "mathplus.h"
  21. #include "terrain/noise.h"
  22. #include "terrain/ygradient.h"
  23. #include "terrain/yturbulence.h"
  24. #include <iostream>
  25. #include <time.h>
  26. #include <glm/glm.hpp>
  27. namespace vtk {
  28. TerrainGen::TerrainGen() {
  29. std::shared_ptr<noise::NoiseModule> noise = std::make_shared<noise::Noise>(6969696);
  30. std::shared_ptr<noise::NoiseModule> yGrad = std::make_shared<noise::YGradient>(0.0, 128.0);
  31. mNoise = std::make_shared<noise::YTurbulence>(yGrad, noise, 40.0);
  32. mTerrainScale = 32.0;
  33. }
  34. void TerrainGen::generateChunk(Chunk* chunk) {
  35. auto chunkPos = chunk->getPos();
  36. //first pass
  37. for (int i = 0; i < 16; i++) { //x
  38. for (int j = 0; j < 16; j++) { //y
  39. for (int k = 0; k < 16; k++) { //z
  40. double nVal = mNoise->get3D(
  41. (double)(chunkPos.x * 16 + i),
  42. (double)(chunkPos.y * 16 + j),
  43. (double)(chunkPos.z * 16 + k));
  44. if (nVal <= 0.0) {
  45. chunk->setVoxelType(i,j,k,1);
  46. } else {
  47. chunk->setVoxelType(i,j,k,0);
  48. }
  49. /*
  50. glm::dvec3 pos((double)(chunk->chunkPos.x * 16 + i) * terrainScale,
  51. (double)(chunk->chunkPos.y * 16 + j) * terrainScale,
  52. (double)(chunk->chunkPos.z * 16 + k) * terrainScale);
  53. if (selectorMod.GetValue(pos.x, pos.y, pos.z) <= 0.0) {
  54. if (selectorMod.GetValue(pos.x, (double)(chunk->chunkPos.y * 16 + j + 1) * terrainScale, pos.z) >= 0.0) {
  55. chunk->setVoxelType(i,j,k,2);
  56. } else {
  57. chunk->setVoxelType(i,j,k,1);
  58. }
  59. }
  60. */
  61. }
  62. }
  63. }
  64. }
  65. }