2#ifndef NW_G3D_SHAPEOBJ_H_
3#define NW_G3D_SHAPEOBJ_H_
5#include <nw/g3d/g3d_config.h>
6#include <nw/g3d/fnd/g3d_GfxObject.h>
7#include <nw/g3d/res/g3d_ResShape.h>
8#include <nw/g3d/g3d_Sizer.h>
10namespace nw {
namespace g3d {
40 void Set(
const Vec3* pPointArray,
int count);
62 void SetFrustum(
float top,
float bottom,
float left,
float right,
float zNear,
float zFar,
63 const Mtx34& viewToWorld);
64 void SetOrtho(
float top,
float bottom,
float left,
float right,
float zNear,
float zFar,
65 const Mtx34& viewToWorld);
110 bool Init(
const InitArg& arg,
void* pBuffer, size_t bufferSize);
165 return m_pShpBlockArray[viewIndex * m_ViewDependent];
171 return m_pShpBlockArray[viewIndex * m_ViewDependent];
188 template <
typename T>
191 template <
typename T>
256 return m_pRes->GetKeyShape(keyShapeIndex);
261 return m_pRes->GetKeyShape(keyShapeIndex);
266 return m_pRes->GetKeyShape(name);
271 return m_pRes->GetKeyShape(name);
276 return m_pRes->GetKeyShapeName(keyShapeIndex);
281 return m_pRes->GetKeyShapeIndex(name);
Definition g3d_ShapeObj.h:366
void DisableBounding()
Definition g3d_ShapeObj.h:389
ResShape * GetResource() const
Definition g3d_ShapeObj.h:399
bool IsViewDependent() const
Definition g3d_ShapeObj.h:395
void EnableBounding()
Definition g3d_ShapeObj.h:387
void ViewDependent()
Definition g3d_ShapeObj.h:383
void BufferingCount(int count)
Definition g3d_ShapeObj.h:379
bool m_BoundingEnabled
Definition g3d_ShapeObj.h:408
void ViewCount(int count)
Definition g3d_ShapeObj.h:381
int GetViewCount() const
Definition g3d_ShapeObj.h:393
Sizer m_Sizer
Definition g3d_ShapeObj.h:410
int m_NumBuffering
Definition g3d_ShapeObj.h:405
int m_NumView
Definition g3d_ShapeObj.h:406
int GetBufferingCount() const
Definition g3d_ShapeObj.h:391
bool m_ViewDependent
Definition g3d_ShapeObj.h:407
Sizer & GetSizer() const
Definition g3d_ShapeObj.h:401
ResShape * m_pRes
Definition g3d_ShapeObj.h:404
void ViewIndependent()
Definition g3d_ShapeObj.h:385
InitArg(ResShape *resource)
Definition g3d_ShapeObj.h:368
bool IsBoundingEnabled() const
Definition g3d_ShapeObj.h:397
Definition g3d_ShapeObj.h:345
Chunk chunk[NUM_CHUNK]
Definition g3d_ShapeObj.h:362
Sizer()
Definition g3d_ShapeObj.h:347
void Calc(const InitArg &arg)
Definition g3d_ShapeObj.cpp:240
@ BLEND_WEIGHT_ARRAY
Definition g3d_ShapeObj.h:355
@ SUBBOUNDING_ARRAY
Definition g3d_ShapeObj.h:353
@ BOUNDING_ARRAY
Definition g3d_ShapeObj.h:357
@ SHAPE_BLOCK_ARRAY
Definition g3d_ShapeObj.h:354
@ NUM_CHUNK
Definition g3d_ShapeObj.h:359
Definition g3d_ShapeObj.h:95
int GetVertexIndex() const
Definition g3d_ShapeObj.h:138
int GetMeshCount() const
Definition g3d_ShapeObj.h:152
int GetKeyShapeCount() const
Definition g3d_ShapeObj.h:252
ResVtxAttrib * GetResVtxAttrib(int attribIndex)
Definition g3d_ShapeObj.h:200
ResShape * GetResource()
Definition g3d_ShapeObj.h:124
const char * GetVtxAttribName(int attribIndex) const
Definition g3d_ShapeObj.h:220
Sphere * m_pBounding
Definition g3d_ShapeObj.h:334
T * GetUserPtr()
Definition g3d_ShapeObj.h:189
GfxBuffer & GetShpBlock(int viewIndex)
Definition g3d_ShapeObj.h:162
int GetVertexBufferCount() const
Definition g3d_ShapeObj.h:230
const AABB * GetSubBoundingArray() const
Definition g3d_ShapeObj.h:246
int GetKeyShapeIndex(const char *name) const
Definition g3d_ShapeObj.h:279
GfxBuffer & GetVertexBuffer(int bufferIndex)
Definition g3d_ShapeObj.h:232
int GetVtxAttribCount() const
Definition g3d_ShapeObj.h:198
void EnableBlockSwap()
Definition g3d_ShapeObj.h:176
bool SetupBlockBuffer(void *pBuffer, size_t bufferSize)
Definition g3d_ShapeObj.cpp:329
void * m_pBlockBuffer
Definition g3d_ShapeObj.h:339
void * m_pBufferPtr
Definition g3d_ShapeObj.h:338
void * m_pUserPtr
Definition g3d_ShapeObj.h:337
bool HasValidBlendWeight() const
Definition g3d_ShapeObj.h:290
Flag
Definition g3d_ShapeObj.h:308
@ BLOCK_BUFFER_SWAP
Definition g3d_ShapeObj.h:310
@ BLEND_WEIGHT_VALID
Definition g3d_ShapeObj.h:311
@ BLOCK_BUFFER_VALID
Definition g3d_ShapeObj.h:309
int GetShpBlockCount() const
Definition g3d_ShapeObj.h:160
void CalcSubBounding(const SkeletonObj *pSkeleton)
Definition g3d_ShapeObj.cpp:444
void * GetUserPtr()
Definition g3d_ShapeObj.h:184
ResKeyShape * GetResKeyShape(const char *name)
Definition g3d_ShapeObj.h:264
ResMesh * GetResMesh(int meshIndex=0)
Definition g3d_ShapeObj.h:148
int GetMaterialIndex() const
Definition g3d_ShapeObj.h:134
const ResShape * GetResource() const
Definition g3d_ShapeObj.h:126
void CalcShpBlock(int viewIndex, const Mtx34 &worldMtx, int bufferIndex=0)
Definition g3d_ShapeObj.cpp:476
int GetBufferingCount() const
Definition g3d_ShapeObj.h:174
float * m_pBlendWeightArray
Definition g3d_ShapeObj.h:332
bit32 m_Flag
Definition g3d_ShapeObj.h:325
bool IsSmoothSkinning() const
Definition g3d_ShapeObj.h:146
u8 m_NumBuffering
Definition g3d_ShapeObj.h:330
bool IsRigidSkinning() const
Definition g3d_ShapeObj.h:144
int GetSubMeshCount() const
Definition g3d_ShapeObj.h:156
u8 m_NumView
Definition g3d_ShapeObj.h:327
ResShape * m_pRes
Definition g3d_ShapeObj.h:323
BoundingCoord
Definition g3d_ShapeObj.h:315
@ NUM_COORD
Definition g3d_ShapeObj.h:318
@ LOCAL_COORD
Definition g3d_ShapeObj.h:317
@ WORLD_COORD
Definition g3d_ShapeObj.h:316
const char * GetKeyShapeName(int keyShapeIndex) const
Definition g3d_ShapeObj.h:274
Alignment
Definition g3d_ShapeObj.h:100
@ BLOCK_BUFFER_ALIGNMENT
Definition g3d_ShapeObj.h:103
@ BUFFER_ALIGNMENT
Definition g3d_ShapeObj.h:101
Sphere * GetBounding()
Definition g3d_ShapeObj.h:242
const ResVertex * GetResVertex() const
Definition g3d_ShapeObj.h:196
void SetUserPtr(void *pUserPtr)
Definition g3d_ShapeObj.h:182
const ResMesh * GetResMesh(int meshIndex=0) const
Definition g3d_ShapeObj.h:150
float GetBlendWeight(int keyShapeIndex) const
Definition g3d_ShapeObj.h:300
void * GetBlockBufferPtr()
Definition g3d_ShapeObj.h:130
const GfxBuffer & GetShpBlock(int viewIndex) const
Definition g3d_ShapeObj.h:168
const u16 * GetSubMeshIndexArray() const
Definition g3d_ShapeObj.h:248
int GetBoneIndex() const
Definition g3d_ShapeObj.h:136
void ClearBlendWeights()
Definition g3d_ShapeObj.cpp:501
int GetVtxSkinCount() const
Definition g3d_ShapeObj.h:140
ShapeObj()
Definition g3d_ShapeObj.h:106
void SetBlendWeight(int keyShapeIndex, float weight)
Definition g3d_ShapeObj.h:292
int GetViewCount() const
Definition g3d_ShapeObj.h:154
int GetVtxAttribIndex(const char *name) const
Definition g3d_ShapeObj.h:225
bool IsBlockSwapEnabled() const
Definition g3d_ShapeObj.h:180
void DisableBlockSwap()
Definition g3d_ShapeObj.h:178
const void * GetUserPtr() const
Definition g3d_ShapeObj.h:186
void CalcBounding(const SkeletonObj *pSkeleton)
Definition g3d_ShapeObj.cpp:381
const ResVtxAttrib * GetResVtxAttrib(const char *name) const
Definition g3d_ShapeObj.h:215
u8 m_ViewDependent
Definition g3d_ShapeObj.h:328
GfxBuffer * m_pShpBlockArray
Definition g3d_ShapeObj.h:331
size_t CalcBlockBufferSize() const
Definition g3d_ShapeObj.cpp:324
const ResVtxAttrib * GetResVtxAttrib(int attribIndex) const
Definition g3d_ShapeObj.h:205
const Sphere * GetBounding() const
Definition g3d_ShapeObj.h:244
const ResKeyShape * GetResKeyShape(int keyShapeIndex) const
Definition g3d_ShapeObj.h:259
bool Init(const InitArg &arg, void *pBuffer, size_t bufferSize)
Definition g3d_ShapeObj.cpp:270
bool IsRigidBody() const
Definition g3d_ShapeObj.h:142
void * GetBufferPtr()
Definition g3d_ShapeObj.h:128
static size_t CalcBufferSize(const InitArg &arg)
Definition g3d_ShapeObj.cpp:263
const T * GetUserPtr() const
Definition g3d_ShapeObj.h:192
void CleanupBlockBuffer()
bool TestSubMeshIntersection(CullingContext *pCtx, const ViewVolume &volume) const
Definition g3d_ShapeObj.cpp:512
ResKeyShape * GetResKeyShape(int keyShapeIndex)
Definition g3d_ShapeObj.h:254
bool IsViewDependent() const
Definition g3d_ShapeObj.h:158
ResVtxAttrib * GetResVtxAttrib(const char *name)
Definition g3d_ShapeObj.h:210
u8 m_NumShpBlock
Definition g3d_ShapeObj.h:329
int GetTargetAttribCount() const
Definition g3d_ShapeObj.h:284
const ResKeyShape * GetResKeyShape(const char *name) const
Definition g3d_ShapeObj.h:269
AABB * m_pSubBounding
Definition g3d_ShapeObj.h:335
const GfxBuffer & GetVertexBuffer(int bufferIndex) const
Definition g3d_ShapeObj.h:237
ResVertex * GetResVertex()
Definition g3d_ShapeObj.h:194
bool IsBlockBufferValid() const
Definition g3d_ShapeObj.h:132
Definition g3d_Sizer.h:10
Sizer()
Definition g3d_Sizer.h:18
Definition g3d_SkeletonObj.h:102
Definition g3d_GfxObject.h:48
Definition g3d_Matrix34.h:34
Definition g3d_Vector2.h:26
Definition g3d_Vector3.h:30
GfxBuffer * GetGfxBuffer()
Definition g3d_ResShape.h:28
const GfxBuffer * GetGfxBuffer() const
Definition g3d_ResShape.h:33
Definition g3d_ResShape.h:180
Definition g3d_ResShape.h:152
Definition g3d_ResShape.h:237
bool IsSmoothSkinning() const
Definition g3d_ResShape.h:274
int GetMaterialIndex() const
Definition g3d_ResShape.h:256
bool IsRigidBody() const
Definition g3d_ResShape.h:270
int GetSubMeshCount() const
Definition g3d_ResShape.h:296
int GetTargetAttribCount() const
Definition g3d_ResShape.h:300
int GetBoneIndex() const
Definition g3d_ResShape.h:258
bool IsRigidSkinning() const
Definition g3d_ResShape.h:272
int GetVertexIndex() const
Definition g3d_ResShape.h:260
int GetVtxSkinCount() const
Definition g3d_ResShape.h:268
Definition g3d_ResShape.h:89
Definition g3d_ResShape.h:57
#define NW_G3D_ASSERT_NOT_NULL(exp)
Definition g3d_assert.h:20
#define NW_G3D_ASSERT_INDEX_BOUNDS(index, size)
Definition g3d_assert.h:23
#define NW_G3D_DEPRECATED_FUNCTION(MFunc)
Definition g3d_defs.h:87
#define NW_G3D_DISALLOW_COPY_AND_ASSIGN(TypeName)
Definition g3d_defs.h:81
u32 bit32
Definition g3d_defs.h:131
Definition g3d_MathCommon.h:6
Definition g3d_GfxManage.cpp:10
Definition g3d_ShapeObj.h:39
Vec3 max
Definition g3d_ShapeObj.h:47
void Merge(const AABB &lhs, const AABB &rhs)
Definition g3d_ShapeObj.cpp:73
void Transform(const Bounding &aabb, const Mtx34 &mtx)
Definition g3d_ShapeObj.cpp:56
Vec3 min
Definition g3d_ShapeObj.h:46
void Set(const Vec3 *pPointArray, int count)
Definition g3d_ShapeObj.cpp:39
Definition g3d_ShapeObj.h:86
int nodeIndex
Definition g3d_ShapeObj.h:89
CullingContext()
Definition g3d_ShapeObj.h:87
int submeshIndex
Definition g3d_ShapeObj.h:90
int submeshCount
Definition g3d_ShapeObj.h:91
Definition g3d_ShapeObj.h:51
Vec3 normal
Definition g3d_ShapeObj.h:54
float dist
Definition g3d_ShapeObj.h:55
void Set(const Vec3 &p0, const Vec3 &p1, const Vec3 &p2)
Definition g3d_ShapeObj.cpp:88
Definition g3d_ShapeObj.h:22
u32 reserved[51]
Definition g3d_ShapeObj.h:25
s32 vtxSkinCount
Definition g3d_ShapeObj.h:24
Mtx34 worldMtx
Definition g3d_ShapeObj.h:23
Definition g3d_Sizer.h:13
Definition g3d_ShapeObj.h:29
float radius
Definition g3d_ShapeObj.h:35
Vec3 center
Definition g3d_ShapeObj.h:34
void Transform(const Sphere &sphere, const Mtx34 &mtx)
Definition g3d_ShapeObj.cpp:9
void Merge(const Sphere &lhs, const Sphere &rhs)
Definition g3d_ShapeObj.cpp:19
Definition g3d_ShapeObj.h:59
int flag
Definition g3d_ShapeObj.h:82
Plane planes[6]
Definition g3d_ShapeObj.h:80
void SetFrustum(float top, float bottom, float left, float right, float zNear, float zFar, const Mtx34 &viewToWorld)
Definition g3d_ShapeObj.cpp:97
void SetPerspective(float fovy, float aspect, float zNear, float zFar, const Mtx34 &viewToWorld)
void SetOrtho(float top, float bottom, float left, float right, float zNear, float zFar, const Mtx34 &viewToWorld)
AABB aabb
Definition g3d_ShapeObj.h:79
void SetPerspectiveOffset(float fovy, float aspect, float zNear, float zFar, const Mtx34 &viewToWorld, const Vec2 &offset)
bool TestIntersection(const Sphere &sphere) const
Definition g3d_ShapeObj.cpp:136
bool IsAABBEnabled() const
Definition g3d_ShapeObj.h:77
void EnableAABB()
Definition g3d_ShapeObj.h:75
int TestIntersectionEx(const Sphere &sphere) const
Definition g3d_ShapeObj.cpp:150
bool TestIntersection(const AABB &aabb) const
Definition g3d_ShapeObj.cpp:169
int numPlanes
Definition g3d_ShapeObj.h:81
int TestIntersectionEx(const AABB &aabb) const
Definition g3d_ShapeObj.cpp:200
void DisableAABB()
Definition g3d_ShapeObj.h:76
Definition g3d_ResShape.h:201