The spica renderer
primitive.h
1 #ifdef _MSC_VER
2 #pragma once
3 #endif
4 
5 #ifndef _SPICA_PRIMITIVE_H_
6 #define _SPICA_PRIMITIVE_H_
7 
8 #include <memory>
9 #include <vector>
10 
11 #include "core/common.h"
12 #include "core/core.hpp"
13 #include "core/cobject.h"
14 
15 #include "core/render.hpp"
16 
17 namespace spica {
18 
19 class SPICA_EXPORTS Primitive : public CObject {
20 public:
21  virtual ~Primitive() {}
22  virtual Bounds3d worldBound() const = 0;
23  virtual bool intersect(Ray& ray, SurfaceInteraction* isect) const = 0;
24  virtual bool intersect(Ray& ray) const = 0;
25  virtual const Light* light() const = 0;
26  virtual const Material* material() const = 0;
27  virtual std::vector<Triangle> triangulate() const = 0;
28  virtual void setScatterFuncs(SurfaceInteraction* intr,
29  MemoryArena& arena) const = 0;
30 }; // class Primitive
31 
32 class SPICA_EXPORTS GeometricPrimitive : public Primitive {
33 public:
34  // Public methods
35  GeometricPrimitive(const std::shared_ptr<Shape>& shape,
36  const std::shared_ptr<Material>& material,
37  const std::shared_ptr<Light>& areaLight = nullptr,
38  const std::shared_ptr<MediumInterface>& mediumInterface = nullptr);
39 
40  virtual Bounds3d worldBound() const override;
41  virtual bool intersect(Ray& ray, SurfaceInteraction* isect) const override;
42  virtual bool intersect(Ray& ray) const override;
43 
44  const Light* light() const override;
45  const Material* material() const override;
46  std::vector<Triangle> triangulate() const override;
47  void setScatterFuncs(SurfaceInteraction* intr,
48  MemoryArena& arena) const override;
49 
50 private:
51  // Private fields
52  std::shared_ptr<Shape> shape_ = nullptr;
53  std::shared_ptr<Material> material_ = nullptr;
54  std::shared_ptr<Light> areaLight_ = nullptr;
55  std::shared_ptr<MediumInterface> mediumInterface_ = nullptr;
56 
57 }; // class GeometricPrimitive
58 
59 class SPICA_EXPORTS Aggregate : public Primitive {
60 public:
61  const Light* light() const override;
62  const Material* material() const override;
63  void setScatterFuncs(SurfaceInteraction* intr,
64  MemoryArena& arena) const override;
65 }; // class Aggregate
66 
67 } // namespace spica
68 
69 #endif // _SPICA_PRIMITIVE_H_
Definition: primitive.h:59
Definition: primitive.h:32
Definition: interaction.h:68
Ray class.
Definition: ray.h:24
Definition: cobject.h:24
Definition: primitive.h:19
The base class for the lights.
Definition: light.h:80
Definition: material.h:30