1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
#ifndef _HAIR_VRAY_INSTANCE_base_H_
#define _HAIR_VRAY_INSTANCE_base_H_
// Shave and a Haircut
// (c) 2019 Epic Games
// US Patent 6720962
/**********************************************************************
*<
FILE: shaveVrayInstanceBase.h
DESCRIPTION: VRay base class for regular and insted hair VRay instance classes
CREATED BY: Vladimir Dubovoy <[email protected]>
HISTORY: created 11-05-2010
*>
**********************************************************************/
//std
#include <vector>
// V-Ray headers
#include "vraybase.h"
#include "vraymayageom.h"
#include "vrayplugins.h"
#include "geometryclasses.h"
//own headers
#include "hairAPIvrayutil.h"
#include "shaveVrayPlugin.h"
#include "shaveVrayVoxelPrimBase.h"
//hair stack
//we need 2 stacks for instanced and regular hair,
//so it goes to shaveVrayInstance members
extern IHairStack* stack;
class shaveVrayInstanceBase /*: public VR::BaseMeshInstance*/ {
public:
shaveVrayPlugin *plugin;
//static IHairStack* stack;
//shaveVrayPlugin *plugin;
//shaveVrayInstanceBase(
// shaveVrayPlugin *vplugin ,
// VR::MaterialInterface *mtl, VR::BSDFInterface *bsdf, int renderID,
// VR::VolumetricInterface *volume, VR::LightList *lightList, const VR::TraceTransform &baseTM, int objectID,
// const tchar *userAttributes, int primaryVisibility)
// :
// plugin(vplugin),
// VR::BaseMeshInstance(vplugin, vplugin, mtl, bsdf,
// renderID, volume, lightList,
// baseTM, objectID, userAttributes,
// primaryVisibility)
//{
// _hair() = NULL;
// _stackid() = plugin->GetStackIndex();
//}
shaveVrayInstanceBase(shaveVrayPlugin *plug){plugin = plug;}
virtual ~shaveVrayInstanceBase() {}
void loadHair();
void freeMem();
int GetNumFacesPerInst() const {return numFacesPerInst();}
int GetNumUVSets() const {return numUVSets();}
const VR::Vector& GetUV(int i) const {return uv(i);}
virtual bool GetSquirrel() const = 0;
protected:
//const member access
inline const std::vector<shaveVrayVoxelPrimBase*>& voxprims() const {return m_voxprims;}
inline shaveVrayVoxelPrimBase* voxprim(unsigned int i) const {return m_voxprims[i];}
inline int stackid() const {return m_stackid;}
inline int numFacesPerInst() const {return m_numFacesPerInst;}
inline int numUVSets() const {return m_numUVSets;}
inline const VR::VectorList& uvs()const {return m_uvs;}
inline const VR::Vector& uv(int i)const {return m_uvs[i];}
inline IHairNode* hair() const {return m_hair;}
//member access
inline std::vector<shaveVrayVoxelPrimBase*>& _voxprims() {return m_voxprims;}
inline shaveVrayVoxelPrimBase*& _voxprim(unsigned int i){return m_voxprims[i];}
inline int& _stackid() {return m_stackid;}
inline int& _numFacesPerInst() {return m_numFacesPerInst;}
inline int& _numUVSets() {return m_numUVSets;}
inline VR::VectorList& _uvs() {return m_uvs;}
inline IHairNode*& _hair() {return m_hair;}
private:
//moving or static primiteves
std::vector<shaveVrayVoxelPrimBase*> m_voxprims;
int m_stackid;
int m_numFacesPerInst;
int m_numUVSets;
VR::VectorList m_uvs;
IHairNode* m_hair;
};
#endif //end of_HAIR_VRAY_INSTANCE_base_H_
|