arsa  2.7
Classes | Public Member Functions | Static Public Attributes | Protected Attributes | List of all members
Effekseer::Model Class Reference

Model class. More...

#include <Effekseer.h>

Inheritance diagram for Effekseer::Model:
EffekseerRendererDX11::Model EffekseerRendererDX9::Model EffekseerRendererGL::Model

Classes

struct  Emitter
 
struct  Face
 
struct  Vertex
 
struct  VertexWithIndex
 

Public Member Functions

 Model (void *data, int32_t size)
 Constructor. More...
 
VertexGetVertexes (int32_t index=0) const
 
int32_t GetVertexCount (int32_t index=0)
 
FaceGetFaces (int32_t index=0) const
 
int32_t GetFaceCount (int32_t index=0)
 
int32_t GetFrameCount () const
 
int32_t GetModelCount ()
 
int32_t GetVertexSize () const
 
virtual ~Model ()
 Destructor. More...
 
Emitter GetEmitter (IRandObject *g, int32_t time, CoordinateSystem coordinate, float magnification)
 
Emitter GetEmitterFromVertex (IRandObject *g, int32_t time, CoordinateSystem coordinate, float magnification)
 
Emitter GetEmitterFromVertex (int32_t index, int32_t time, CoordinateSystem coordinate, float magnification)
 
Emitter GetEmitterFromFace (IRandObject *g, int32_t time, CoordinateSystem coordinate, float magnification)
 
Emitter GetEmitterFromFace (int32_t index, int32_t time, CoordinateSystem coordinate, float magnification)
 

Static Public Attributes

static const int32_t Version = 1
 

Protected Attributes

int32_t m_vertexSize = sizeof(Vertex)
 

Detailed Description

Model class.

Definition at line 3244 of file Effekseer.h.

Constructor & Destructor Documentation

◆ Model()

Effekseer::Model::Model ( void data,
int32_t  size 
)
inline

Constructor.

Definition at line 3312 of file Effekseer.h.

3313  : m_data(NULL)
3314  , m_size(size)
3315  , m_version(0)
3316  , models(nullptr)
3317  {
3318  m_data = new uint8_t[m_size];
3319  memcpy(m_data, data, m_size);
3320 
3321  uint8_t* p = (uint8_t*) m_data;
3322 
3323  memcpy(&m_version, p, sizeof(int32_t));
3324  p += sizeof(int32_t);
3325 
3326  // load scale except version 3(for compatibility)
3327  if (m_version == 2 || m_version >= 5)
3328  {
3329  // Scale
3330  p += sizeof(int32_t);
3331  }
3332 
3333  memcpy(&m_modelCount, p, sizeof(int32_t));
3334  p += sizeof(int32_t);
3335 
3336  if (m_version >= 5)
3337  {
3338  memcpy(&m_frameCount, p, sizeof(int32_t));
3339  p += sizeof(int32_t);
3340  }
3341  else
3342  {
3343  m_frameCount = 1;
3344  }
3345 
3346  models = new InternalModel[m_frameCount];
3347 
3348  for (int32_t f = 0; f < m_frameCount; f++)
3349  {
3350  memcpy(&models[f].m_vertexCount, p, sizeof(int32_t));
3351  p += sizeof(int32_t);
3352 
3353  if (m_version >= 1)
3354  {
3355  models[f].m_vertexes = (Vertex*) p;
3356  p += (sizeof(Vertex) * models[f].m_vertexCount);
3357  }
3358  else
3359  {
3360  // allocate new buffer
3361  models[f].m_vertexes = new Vertex[models[f].m_vertexCount];
3362 
3363  for (int32_t i = 0; i < models[f].m_vertexCount; i++)
3364  {
3365  memcpy((void*)&models[f].m_vertexes[i], p, sizeof(Vertex) - sizeof(Color));
3366  models[f].m_vertexes[i].VColor = Color(255, 255, 255, 255);
3367 
3368  p += sizeof(Vertex) - sizeof(Color);
3369  }
3370  }
3371 
3372  memcpy(&models[f].m_faceCount, p, sizeof(int32_t));
3373  p += sizeof(int32_t);
3374 
3375  models[f].m_faces = (Face*) p;
3376  p += (sizeof(Face) * models[f].m_faceCount);
3377  }
3378  }
signed int int32_t
GLfloat GLfloat p
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: SDL_opengl.h:1974
GLsizeiptr size
GLfloat f
#define NULL
Definition: begin_code.h:167
unsigned char uint8_t

◆ ~Model()

virtual Effekseer::Model::~Model ( )
inlinevirtual

Destructor.

Reimplemented in EffekseerRendererGL::Model, EffekseerRendererDX11::Model, and EffekseerRendererDX9::Model.

Definition at line 3397 of file Effekseer.h.

3398  {
3399  if (m_version == 0)
3400  {
3401  ES_SAFE_DELETE_ARRAY(models[0].m_vertexes);
3402  }
3403 
3404  ES_SAFE_DELETE_ARRAY(models);
3405  ES_SAFE_DELETE_ARRAY(m_data);
3406  }
#define ES_SAFE_DELETE_ARRAY(val)
Definition: Effekseer.h:127

Member Function Documentation

◆ GetEmitter()

Emitter Effekseer::Model::GetEmitter ( IRandObject g,
int32_t  time,
CoordinateSystem  coordinate,
float  magnification 
)
inline

Definition at line 3408 of file Effekseer.h.

3409  {
3410  time = time % GetFrameCount();
3411 
3412  int32_t faceInd = (int32_t) ((GetFaceCount(time) - 1) * (g->GetRand()));
3413  faceInd = Clamp(faceInd, GetFaceCount(time) - 1, 0);
3414  Face& face = GetFaces(time)[faceInd];
3415  Vertex& v0 = GetVertexes(time)[face.Indexes[0]];
3416  Vertex& v1 = GetVertexes(time)[face.Indexes[1]];
3417  Vertex& v2 = GetVertexes(time)[face.Indexes[2]];
3418 
3419  float p1 = g->GetRand();
3420  float p2 = g->GetRand();
3421 
3422  // Fit within plane
3423  if( p1 + p2 > 1.0f )
3424  {
3425  p1 = 1.0f - p1;
3426  p2 = 1.0f - p2;
3427  }
3428 
3429  float p0 = 1.0f - p1 - p2;
3430 
3431  Emitter emitter;
3432  emitter.Position = (v0.Position * p0 + v1.Position * p1 + v2.Position * p2) * magnification;
3433  emitter.Normal = v0.Normal * p0 + v1.Normal * p1 + v2.Normal * p2;
3434  emitter.Binormal = v0.Binormal * p0 + v1.Binormal * p1 + v2.Binormal * p2;
3435  emitter.Tangent = v0.Tangent * p0 + v1.Tangent * p1 + v2.Tangent * p2;
3436 
3437  if( coordinate == CoordinateSystem::LH )
3438  {
3439  emitter.Position.Z = - emitter.Position.Z;
3440  emitter.Normal.Z = - emitter.Normal.Z;
3441  emitter.Binormal.Z = - emitter.Binormal.Z;
3442  emitter.Tangent.Z = - emitter.Tangent.Z;
3443  }
3444 
3445  return emitter;
3446  }
GLenum GLuint GLint GLenum face
signed int int32_t
int32_t GetFaceCount(int32_t index=0)
Definition: Effekseer.h:3384
GLfloat GLfloat GLfloat v2
Vertex * GetVertexes(int32_t index=0) const
Definition: Effekseer.h:3380
GLfloat f
static void Normal(Vector3D &o, const Vector3D &in)
単位ベクトル
GLfloat v0
Face * GetFaces(int32_t index=0) const
Definition: Effekseer.h:3383
GLboolean GLboolean g
GLfloat GLfloat v1
int32_t GetFrameCount() const
Definition: Effekseer.h:3386

◆ GetEmitterFromFace() [1/2]

Emitter Effekseer::Model::GetEmitterFromFace ( IRandObject g,
int32_t  time,
CoordinateSystem  coordinate,
float  magnification 
)
inline

Definition at line 3497 of file Effekseer.h.

3498  {
3499  time = time % GetFrameCount();
3500 
3501  int32_t faceInd = (int32_t) ((GetFaceCount(time) - 1) * (g->GetRand()));
3502  faceInd = Clamp(faceInd, GetFaceCount(time) - 1, 0);
3503  Face& face = GetFaces(time)[faceInd];
3504  Vertex& v0 = GetVertexes(time)[face.Indexes[0]];
3505  Vertex& v1 = GetVertexes(time)[face.Indexes[1]];
3506  Vertex& v2 = GetVertexes(time)[face.Indexes[2]];
3507 
3508  float p0 = 1.0f / 3.0f;
3509  float p1 = 1.0f / 3.0f;
3510  float p2 = 1.0f / 3.0f;
3511 
3512  Emitter emitter;
3513  emitter.Position = (v0.Position * p0 + v1.Position * p1 + v2.Position * p2) * magnification;
3514  emitter.Normal = v0.Normal * p0 + v1.Normal * p1 + v2.Normal * p2;
3515  emitter.Binormal = v0.Binormal * p0 + v1.Binormal * p1 + v2.Binormal * p2;
3516  emitter.Tangent = v0.Tangent * p0 + v1.Tangent * p1 + v2.Tangent * p2;
3517 
3518  if( coordinate == CoordinateSystem::LH )
3519  {
3520  emitter.Position.Z = - emitter.Position.Z;
3521  emitter.Normal.Z = - emitter.Normal.Z;
3522  emitter.Binormal.Z = - emitter.Binormal.Z;
3523  emitter.Tangent.Z = - emitter.Tangent.Z;
3524  }
3525 
3526  return emitter;
3527  }
GLenum GLuint GLint GLenum face
signed int int32_t
int32_t GetFaceCount(int32_t index=0)
Definition: Effekseer.h:3384
GLfloat GLfloat GLfloat v2
Vertex * GetVertexes(int32_t index=0) const
Definition: Effekseer.h:3380
static void Normal(Vector3D &o, const Vector3D &in)
単位ベクトル
GLfloat v0
Face * GetFaces(int32_t index=0) const
Definition: Effekseer.h:3383
GLboolean GLboolean g
GLfloat GLfloat v1
int32_t GetFrameCount() const
Definition: Effekseer.h:3386

◆ GetEmitterFromFace() [2/2]

Emitter Effekseer::Model::GetEmitterFromFace ( int32_t  index,
int32_t  time,
CoordinateSystem  coordinate,
float  magnification 
)
inline

Definition at line 3529 of file Effekseer.h.

3530  {
3531  time = time % GetFrameCount();
3532 
3533  int32_t faceInd = index % (GetFaceCount(time) - 1);
3534  Face& face = GetFaces(time)[faceInd];
3535  Vertex& v0 = GetVertexes(time)[face.Indexes[0]];
3536  Vertex& v1 = GetVertexes(time)[face.Indexes[1]];
3537  Vertex& v2 = GetVertexes(time)[face.Indexes[2]];
3538 
3539  float p0 = 1.0f / 3.0f;
3540  float p1 = 1.0f / 3.0f;
3541  float p2 = 1.0f / 3.0f;
3542 
3543  Emitter emitter;
3544  emitter.Position = (v0.Position * p0 + v1.Position * p1 + v2.Position * p2) * magnification;
3545  emitter.Normal = v0.Normal * p0 + v1.Normal * p1 + v2.Normal * p2;
3546  emitter.Binormal = v0.Binormal * p0 + v1.Binormal * p1 + v2.Binormal * p2;
3547  emitter.Tangent = v0.Tangent * p0 + v1.Tangent * p1 + v2.Tangent * p2;
3548 
3549  if( coordinate == CoordinateSystem::LH )
3550  {
3551  emitter.Position.Z = - emitter.Position.Z;
3552  emitter.Normal.Z = - emitter.Normal.Z;
3553  emitter.Binormal.Z = - emitter.Binormal.Z;
3554  emitter.Tangent.Z = - emitter.Tangent.Z;
3555  }
3556 
3557  return emitter;
3558  }
GLenum GLuint GLint GLenum face
signed int int32_t
int32_t GetFaceCount(int32_t index=0)
Definition: Effekseer.h:3384
GLfloat GLfloat GLfloat v2
Vertex * GetVertexes(int32_t index=0) const
Definition: Effekseer.h:3380
GLuint index
static void Normal(Vector3D &o, const Vector3D &in)
単位ベクトル
GLfloat v0
Face * GetFaces(int32_t index=0) const
Definition: Effekseer.h:3383
GLfloat GLfloat v1
int32_t GetFrameCount() const
Definition: Effekseer.h:3386

◆ GetEmitterFromVertex() [1/2]

Emitter Effekseer::Model::GetEmitterFromVertex ( IRandObject g,
int32_t  time,
CoordinateSystem  coordinate,
float  magnification 
)
inline

Definition at line 3448 of file Effekseer.h.

3449  {
3450  time = time % GetFrameCount();
3451 
3452  int32_t vertexInd = (int32_t) ((GetVertexCount(time) - 1) * (g->GetRand()));
3453  vertexInd = Clamp(vertexInd, GetVertexCount(time) - 1, 0);
3454  Vertex& v = GetVertexes(time)[vertexInd];
3455 
3456  Emitter emitter;
3457  emitter.Position = v.Position * magnification;
3458  emitter.Normal = v.Normal;
3459  emitter.Binormal = v.Binormal;
3460  emitter.Tangent = v.Tangent;
3461 
3462  if( coordinate == CoordinateSystem::LH )
3463  {
3464  emitter.Position.Z = - emitter.Position.Z;
3465  emitter.Normal.Z = - emitter.Normal.Z;
3466  emitter.Binormal.Z = - emitter.Binormal.Z;
3467  emitter.Tangent.Z = - emitter.Tangent.Z;
3468  }
3469 
3470  return emitter;
3471  }
signed int int32_t
const GLdouble * v
Definition: SDL_opengl.h:2064
Vertex * GetVertexes(int32_t index=0) const
Definition: Effekseer.h:3380
static void Normal(Vector3D &o, const Vector3D &in)
単位ベクトル
int32_t GetVertexCount(int32_t index=0)
Definition: Effekseer.h:3381
GLboolean GLboolean g
int32_t GetFrameCount() const
Definition: Effekseer.h:3386

◆ GetEmitterFromVertex() [2/2]

Emitter Effekseer::Model::GetEmitterFromVertex ( int32_t  index,
int32_t  time,
CoordinateSystem  coordinate,
float  magnification 
)
inline

Definition at line 3473 of file Effekseer.h.

3474  {
3475  time = time % GetFrameCount();
3476 
3477  int32_t vertexInd = index % GetVertexCount(time);
3478  Vertex& v = GetVertexes(time)[vertexInd];
3479 
3480  Emitter emitter;
3481  emitter.Position = v.Position * magnification;
3482  emitter.Normal = v.Normal;
3483  emitter.Binormal = v.Binormal;
3484  emitter.Tangent = v.Tangent;
3485 
3486  if( coordinate == CoordinateSystem::LH )
3487  {
3488  emitter.Position.Z = - emitter.Position.Z;
3489  emitter.Normal.Z = - emitter.Normal.Z;
3490  emitter.Binormal.Z = - emitter.Binormal.Z;
3491  emitter.Tangent.Z = - emitter.Tangent.Z;
3492  }
3493 
3494  return emitter;
3495  }
signed int int32_t
const GLdouble * v
Definition: SDL_opengl.h:2064
Vertex * GetVertexes(int32_t index=0) const
Definition: Effekseer.h:3380
GLuint index
static void Normal(Vector3D &o, const Vector3D &in)
単位ベクトル
int32_t GetVertexCount(int32_t index=0)
Definition: Effekseer.h:3381
int32_t GetFrameCount() const
Definition: Effekseer.h:3386

◆ GetFaceCount()

int32_t Effekseer::Model::GetFaceCount ( int32_t  index = 0)
inline

Definition at line 3384 of file Effekseer.h.

3384 { return models[index].m_faceCount; }
GLuint index

◆ GetFaces()

Face* Effekseer::Model::GetFaces ( int32_t  index = 0) const
inline

Definition at line 3383 of file Effekseer.h.

3383 { return models[index].m_faces; }
GLuint index

◆ GetFrameCount()

int32_t Effekseer::Model::GetFrameCount ( ) const
inline

Definition at line 3386 of file Effekseer.h.

3386 { return m_frameCount; }

◆ GetModelCount()

int32_t Effekseer::Model::GetModelCount ( )
inline

Definition at line 3388 of file Effekseer.h.

3388 { return m_modelCount; }

◆ GetVertexCount()

int32_t Effekseer::Model::GetVertexCount ( int32_t  index = 0)
inline

Definition at line 3381 of file Effekseer.h.

3381 { return models[index].m_vertexCount; }
GLuint index

◆ GetVertexes()

Vertex* Effekseer::Model::GetVertexes ( int32_t  index = 0) const
inline

Definition at line 3380 of file Effekseer.h.

3380 { return models[index].m_vertexes; }
GLuint index

◆ GetVertexSize()

int32_t Effekseer::Model::GetVertexSize ( ) const
inline

Definition at line 3390 of file Effekseer.h.

3390 { return m_vertexSize; }
int32_t m_vertexSize
Definition: Effekseer.h:3304

Member Data Documentation

◆ m_vertexSize

int32_t Effekseer::Model::m_vertexSize = sizeof(Vertex)
protected

Definition at line 3304 of file Effekseer.h.

◆ Version

const int32_t Effekseer::Model::Version = 1
static

Definition at line 3247 of file Effekseer.h.


The documentation for this class was generated from the following file: