The spica renderer
texture.h
1 #ifdef _MSC_VER
2 #pragma once
3 #endif
4 
5 #ifndef _SPICA_TEXTURE_H_
6 #define _SPICA_TEXTURE_H_
7 
8 #include "core/core.hpp"
9 #include "core/common.h"
10 #include "core/cobject.h"
11 #include "core/vector3d.h"
12 
13 #include "core/render.hpp"
14 
15 namespace spica {
16 
20 class SPICA_EXPORTS TextureMapping2D {
21 public:
22  virtual ~TextureMapping2D() {}
23 
24  virtual Point2d map(const Point3d& p) const = 0;
25  virtual Point2d map(const SurfaceInteraction& intr,
26  Vector2d *dstdx = nullptr,
27  Vector2d *dstdy = nullptr) const = 0;
28 };
29 
30 class SPICA_EXPORTS UVMapping2D : public TextureMapping2D {
31 public:
32  explicit UVMapping2D(double su = 1.0, double sv = 1.0,
33  double du = 0.0, double dv = 0.0,
34  bool invertHorizontal = true);
35 
36  Point2d map(const Point3d& p) const override;
37  Point2d map(const SurfaceInteraction &intr,
38  Vector2d *dstdx = nullptr,
39  Vector2d *dstdy = nullptr) const override;
40 
41 private:
42  const double su_, sv_, du_, dv_;
43  const bool invertHorizontal_;
44 };
45 
46 class SPICA_EXPORTS PlanarMapping2D : public TextureMapping2D {
47 public:
48  PlanarMapping2D(const Vector3d& vs, const Vector3d& vt, double ds = 0.0,
49  double dt = 0.0);
50 
51  Point2d map(const Point3d& p) const override;
52  Point2d map(const SurfaceInteraction& intr,
53  Vector2d* dstdx = nullptr,
54  Vector2d* dstdy = nullptr) const override;
55 
56 private:
57  const Vector3d vs_, vt_;
58  const double ds_, dt_;
59 };
60 
64 template <class T>
65 class SPICA_EXPORTS Texture : public CObject {
66 public:
67  virtual T evaluate(const SurfaceInteraction& intr) const = 0;
68  virtual ~Texture() {}
69 };
70 
71 } // namespace spica
72 
73 #endif // _SPICA_TEXTURE_H_
Definition: interaction.h:68
Definition: cobject.h:24
Texture mapping interface.
Definition: texture.h:20
Texture interface.
Definition: render.hpp:60
Definition: texture.h:30
Definition: texture.h:46