5 #ifndef _SPICA_INTERACTION_H_
6 #define _SPICA_INTERACTION_H_
10 #include "core/core.hpp"
11 #include "core/common.h"
12 #include "core/spectrum.h"
13 #include "core/point2d.h"
14 #include "core/point3d.h"
15 #include "core/normal3d.h"
16 #include "core/vector3d.h"
18 #include "core/render.hpp"
19 #include "core/medium.h"
36 virtual Ray spawnRayTo(
const Point3d& p)
const;
39 inline virtual bool isSurfaceInteraction()
const {
return false; }
40 inline const Point3d& pos()
const {
return pos_; }
41 inline const Normal3d& normal()
const {
return normal_; }
42 inline const Vector3d& wo()
const {
return wo_; }
43 inline void setMediumInterface(
const MediumInterface& mediumInterface) {
44 mediumInterface_ = mediumInterface;
48 return vect::dot(w, normal_) > 0.0 ? mediumInterface_.outside()
49 : mediumInterface_.inside();
52 inline const Medium* getMedium()
const {
53 Assertion(mediumInterface_.inside() == mediumInterface_.outside(),
54 "Only inside the primitive should be filled with participating media");
55 return mediumInterface_.inside();
81 void computeDifferentials(
const Ray& ray);
82 void setScatterFuncs(
const Ray& ray, MemoryArena& arena);
87 inline bool isSurfaceInteraction()
const override {
return true; }
88 inline const Point2d& uv()
const {
return uv_; }
89 inline const Vector3d& dpdu()
const {
return dpdu_; }
90 inline const Vector3d& dpdv()
const {
return dpdv_; }
91 inline const Normal3d& dndu()
const {
return dndu_; }
92 inline const Normal3d& dndv()
const {
return dndv_; }
93 inline const Normal3d& ns()
const {
return shading.n; }
94 inline const Vector3d& ts()
const {
return shading.dpdu; }
95 inline const Vector3d& bs()
const {
return shading.dpdv; }
96 inline double dudx()
const {
return dudx_; }
97 inline double dudy()
const {
return dudy_; }
98 inline double dvdx()
const {
return dvdx_; }
99 inline double dvdy()
const {
return dvdy_; }
100 inline const Primitive* primitive()
const {
return primitive_; }
102 inline BSDF* bsdf()
const {
return bsdf_; }
103 inline BSSRDF* bssrdf()
const {
return bssrdf_; }
104 inline void setBSDF(
BSDF* bsdf) { bsdf_ = bsdf; }
105 inline void setBSSRDF(
BSSRDF* bssrdf) { bssrdf_ = bssrdf; }
106 inline void setPrimitive(
const Primitive* prim) { primitive_ = prim; }
119 double dudx_ = 0.0, dudy_ = 0.0, dvdx_ = 0.0, dvdy_ = 0.0;
120 const Shape* shape_ =
nullptr;
122 BSDF* bsdf_ =
nullptr;
123 BSSRDF* bssrdf_ =
nullptr;
132 bool isValid()
const;
142 #endif // _SPICA_INTERACTION_H_
Definition: interaction.h:68
SeparableBSSRDF class.
Definition: bssrdf.h:43
RGB spectrum.
Definition: spectrum.h:18
Ray class.
Definition: ray.h:24
Definition: primitive.h:19
BSSRDF Interface.
Definition: bssrdf.h:25
Definition: interaction.h:126
Definition: interaction.h:23
Abstract shape class.
Definition: shape.h:39