ModelAOBake.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #pragma once
  2. #include <ToolCore/Import/ModelPacker.h>
  3. #include "Raster.h"
  4. using namespace Atomic;
  5. using namespace ToolCore;
  6. namespace Atomic
  7. {
  8. class Image;
  9. }
  10. namespace AtomicGlow
  11. {
  12. class ModelAOBake : public Object
  13. {
  14. ATOMIC_OBJECT(ModelAOBake, Object)
  15. public:
  16. ModelAOBake(Context* context);
  17. virtual ~ModelAOBake();
  18. bool LoadModel(const String& pathName);
  19. private:
  20. void TraceAORays(unsigned nsample, float aoDepth = 4.0f, float multiply = 1.0f);
  21. // generate current LOD AO map
  22. bool GenerateLODLevelAOMap(MPLODLevel* lodLevel);
  23. struct ShaderData
  24. {
  25. ModelAOBake* bake_;
  26. Vector3 triPositions_[3];
  27. Vector3 triNormals_[3];
  28. Vector3 faceNormal_;
  29. };
  30. static bool FillLexelsCallback(void* param, int x, int y, const Vector3& barycentric,const Vector3& dx, const Vector3& dy, float coverage);
  31. bool GenerateLexels();
  32. //unsigned GetImageSize(float pixelsPerUnit, bool powerOfTwo);
  33. struct LMVertex
  34. {
  35. Vector3 position_;
  36. Vector3 normal_;
  37. Vector2 uv0_;
  38. Vector2 uv1_;
  39. };
  40. struct LMLexel
  41. {
  42. Vector3 position_;
  43. Vector3 normal_;
  44. Vector2 pixelCoord_;
  45. Color color_;
  46. };
  47. PODVector<LMVertex> lmVertices_;
  48. PODVector<LMLexel> lmLexels_;
  49. SharedArrayPtr<unsigned> indices_;
  50. unsigned numIndices_;
  51. SharedPtr<MPLODLevel> curLOD_;
  52. SharedPtr<ModelPacker> modelPacker_;
  53. SharedPtr<Image> lightmap_;
  54. };
  55. }