討論區快速選單
知識庫快速選單
掌握Salesforce雲端管理秘訣 討論區最近新進100則主題 政府補助!學嵌入式+物聯網
[ 回上頁 ] [ 討論區發言規則 ]
實作粒子系統
更改我的閱讀文章字型大小
作者 : frankwei(BigFly)
[ 貼文 14 | 人氣 3647 | 評價 50 | 評價/貼文 3.57 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2001/12/16 上午 11:39:36
想不到才沒幾天,這裡的版面就更新了~~

這幾天研究了幾篇有關粒子系統的文章及DirectX 8.1 SDK中 Point Sprite的程式碼之後,對於粒子系統有點小小心得,所以我打算在這裡跟大家分享本身實作的過程。

開發環境:
Visual C++ 6.0
DirectX 8.1 SDK
Windows 2000


定義資料結構

// 粒子類別
class Particle
{
    public:
     Particle() {}
     ~Particle() {}

    bool m_bAlive // 判斷粒子是否有效(存活)
    D3DXVECTOR3 m_vPosition // 目前粒子位置
     D3DXVECTOR3 m_vPrevPosition // 先前粒子位置
     D3DXVECTOR3 m_vVelocity // 粒子前進方向及速率
     D3DXCOLOR m_clrDiffuse // 顏色
     int m_Energy // 生命值
     float m_fSize // 粒子大小
};

先Post這些
    

    
作者 : cplusplus(Cpp) C++優秀好手貼文超過500則人氣指數超過10000點
[ 貼文 846 | 人氣 16660 | 評價 1120 | 評價/貼文 1.32 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2001/12/16 下午 08:05:50
Good
+oil
作者 : dan59314(danny)
[ 貼文 35 | 人氣 7918 | 評價 60 | 評價/貼文 1.71 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2001/12/25 下午 04:48:07
怎麼沒有了呢?
作者 : frankwei(BigFly)
[ 貼文 14 | 人氣 3647 | 評價 50 | 評價/貼文 3.57 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2001/12/30 上午 01:39:36
不好意思,這麼久才來更新。
上面的作法我已經修改過了。這次我要Post是全新的版本(修改自Jeff Landor)
先Post Header file

頂點結構
struct POINTVERTEX
{
  D3DXVECTOR3 pos;
  D3DCOLOR clrColor;
};

#define D3DFVF_POINTVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)
#define MAX_PARTICLES 4000


粒子結構:
struct Particle
{
  Particle *pPrev;
  Particle *pNext;
  D3DXVECTOR3 vPos;
  D3DXVECTOR3 vPrevPos;
  D3DXVECTOR3 vVel;
  D3DXCOLOR clrColor;
  D3DXCOLOR prevColor;
  int life;
  D3DXCOLOR deltaColor;
};

發射器結構
struct Emitter
{
  Emitter *pPrev;
  Emitter *pNext;
  
  D3DXVECTOR3 vPos;
  float fYaw;
  float fYawVar;
  float fPitch;
  float fPitchVar;
  float fSpeed;
  float fSpeedVar;
  
  int emitsPerFrame;
  int emitVar;
  Particle *pParticle;
  int totalParticles;
  int particleCount;
  int life;
  int lifeVar;
  D3DXCOLOR startColor;
  D3DXCOLOR startColorVar;
  D3DXCOLOR endColor;
  D3DXCOLOR endColorVar;
  D3DXVECTOR3 vForce;
};

粒子系統基礎類別
class ParticleSystem
{
  protected:
float m_fPointSize;
int m_Life;
Particle *m_ParticlePool;
    Emitter m_Emitter;
char m_TextureFilename[255];
    
LPDIRECT3DVERTEXBUFFER8 m_pd3dVB;
    LPDIRECT3DTEXTURE8 m_pd3dTexture;

  protected:
    bool InitParticleSystem();
    virtual bool SetDefaultEmitter(Emitter *emitter) { return true;}
    bool InitEmitter(Emitter *emitter);
    bool AddParticle(Emitter *emitter);
    bool UpdateParticle(Particle *particle, Emitter *emitter);




  public:
ParticleSystem(char *TextureFilename, float PointSize=0.08f);
~ParticleSystem();
bool Init(LPDIRECT3DDEVICE8 pd3dDevice);
bool Restore(LPDIRECT3DDEVICE8);
    bool UpdateEmitter();
    bool RenderEmitter(LPDIRECT3DDEVICE8 pd3dDevice);
D3DXVECTOR3 GetPos() const { return m_Emitter.vPos;}
void SetPos(D3DXVECTOR3 vPos) { m_Emitter.vPos = vPos;}
bool isAlive() const { return m_Life>0;}

};

爆炸效果類別
class CExplode:public ParticleSystem
{

 public:
CExplode(char* TextureFilename, float PointSize):ParticleSystem(TextureFilename, PointSize)
{
m_Life = 50;

}

  private:
    bool SetDefaultEmitter(Emitter *emitter);
};
作者 : frankwei(BigFly)
[ 貼文 14 | 人氣 3647 | 評價 50 | 評價/貼文 3.57 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2001/12/30 上午 01:46:21
實作部份(Part1):
#include "Particle.h"

ParticleSystem::ParticleSystem(char* TextureFilename, float PointSize)
{
  m_fPointSize = PointSize;
  
  m_ParticlePool = NULL;
  strcpy(m_TextureFilename, TextureFilename);
    
  m_pd3dVB = NULL;
  m_pd3dTexture = NULL;

}

ParticleSystem::~ParticleSystem()
{
  SAFE_RELEASE(m_pd3dVB);
  SAFE_RELEASE(m_pd3dTexture);

  SAFE_DELETE(m_pd3dTexture);
}

bool ParticleSystem::Restore(LPDIRECT3DDEVICE8 pd3dDevice)
{
  if(FAILED(pd3dDevice->CreateVertexBuffer(MAX_PARTICLES*sizeof(POINTVERTEX),
     D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY | D3DUSAGE_POINTS,
D3DFVF_POINTVERTEX, D3DPOOL_DEFAULT, &m_pd3dVB)))
  {
return false;
  }

  return true;

}

bool ParticleSystem::Init(LPDIRECT3DDEVICE8 pd3dDevice)
{
  InitParticleSystem();
  InitEmitter(&m_Emitter);
  
  D3DXCreateTextureFromFile(pd3dDevice, m_TextureFilename, &m_pd3dTexture);
 
  Restore(pd3dDevice);

  return true;
}


作者 : frankwei(BigFly)
[ 貼文 14 | 人氣 3647 | 評價 50 | 評價/貼文 3.57 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2001/12/30 上午 01:47:53
bool ParticleSystem::InitParticleSystem()
{
  srand((unsigned)time(NULL));

  m_ParticlePool = new Particle[MAX_PARTICLES];

  for(int i=0; i < MAX_PARTICLES-1; i++)
  {
m_ParticlePool[i].pNext = &m_ParticlePool[i+1];
  }
  m_ParticlePool[MAX_PARTICLES-1].pNext = NULL;

  return true;
}

bool ParticleSystem::InitEmitter(Emitter *emitter)
{
  SetDefaultEmitter(emitter);
  emitter->pParticle = NULL;
  return true;
}

bool ParticleSystem::AddParticle(Emitter *emitter)
{
  Particle *particle;
  D3DXCOLOR start, end;
  float yaw, pitch, speed;

  if(emitter != NULL && m_ParticlePool != NULL &&
emitter->particleCount < emitter->totalParticles)
  {
particle = m_ParticlePool;
m_ParticlePool = m_ParticlePool->pNext;

if(emitter->pParticle != NULL)
emitter->pParticle->pPrev = particle;

particle->pNext = emitter->pParticle;
particle->pPrev = NULL;
emitter->pParticle = particle;

particle->vPos.x = 0.0f;
particle->vPos.y = 0.0f;
particle->vPos.z = 0.0f;

particle->vPrevPos.x = 0.0f;
particle->vPrevPos.y = 0.0f;
particle->vPrevPos.z = 0.0f;

yaw = emitter->fYaw + (emitter->fYawVar * Random());
pitch = emitter->fPitch + (emitter->fPitchVar * Random());

RotationToDirection(pitch, yaw, &particle->vVel);

speed = emitter->fSpeed + (emitter->fSpeedVar * Random());
particle->vVel.x *= speed;
particle->vVel.y *= speed;
particle->vVel.z *= speed;

start.r = emitter->startColor.r + (emitter->startColorVar.r * Random());
start.g = emitter->startColor.g + (emitter->startColorVar.g * Random());
start.b = emitter->startColor.b + (emitter->startColorVar.b * Random());
    
end.r = emitter->endColor.r + (emitter->endColorVar.r * Random());
end.g = emitter->endColor.g + (emitter->endColorVar.g * Random());
end.b = emitter->endColor.b + (emitter->endColorVar.b * Random());

particle->clrColor.r = start.r;
particle->clrColor.g = start.g;
particle->clrColor.b = start.b;

particle->life = emitter->life + (int)((float)emitter->lifeVar * Random());

particle->deltaColor.r = (end.r - start.r)/particle->life;
particle->deltaColor.g = (end.g - start.g)/particle->life;
particle->deltaColor.b = (end.b - start.b)/particle->life;

emitter->particleCount++;

return true;
  }

  return false;
}


作者 : frankwei(BigFly)
[ 貼文 14 | 人氣 3647 | 評價 50 | 評價/貼文 3.57 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2001/12/30 上午 01:49:38
實作部份(Part 3)
bool ParticleSystem::UpdateParticle(Particle *particle, Emitter *emitter)
{
  if(particle != NULL && particle->life > 0)
  {
particle->vPrevPos.x = particle->vPos.x;
particle->vPrevPos.y = particle->vPos.y;
particle->vPrevPos.z = particle->vPos.z;

particle->vPos.x += particle->vVel.x;
particle->vPos.y += particle->vVel.y;
particle->vPos.z += particle->vVel.z;

particle->vVel.x += emitter->vForce.x;
particle->vVel.y += emitter->vForce.y;
particle->vVel.z += emitter->vForce.z;

particle->prevColor.r = particle->clrColor.r;
particle->prevColor.g = particle->clrColor.g;
particle->prevColor.b = particle->clrColor.b;

particle->clrColor.r += particle->deltaColor.r;
particle->clrColor.g += particle->deltaColor.g;
particle->clrColor.b += particle->deltaColor.b;

particle->life--;

return true;
  }
  else if(particle != NULL && particle->life == 0)
  {
if(particle->pPrev != NULL)
particle->pPrev->pNext = particle->pNext;
else
emitter->pParticle = particle->pNext;

if(particle->pNext != NULL)
particle->pNext->pPrev = particle->pPrev;

particle->pNext = m_ParticlePool;
m_ParticlePool = particle;

emitter->particleCount--;
  }

  return false;
}

bool ParticleSystem::UpdateEmitter()
{
  int i = 0, emits = 0;
  Particle *particle, *next;

  Emitter *emitter = &m_Emitter;

  if(emitter != NULL)
  {
if(emitter->pParticle != NULL)
{
particle = emitter->pParticle;
while(particle)
{
next = particle->pNext;
UpdateParticle(particle, emitter);
particle = next;
}
}

emits = emitter->emitsPerFrame + (int)((float)emitter->emitVar * Random());
for (i=0; i<emits; i++)
AddParticle(emitter);

m_Life--;
    
return true;

  }
  
  return false;
}
作者 : frankwei(BigFly)
[ 貼文 14 | 人氣 3647 | 評價 50 | 評價/貼文 3.57 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2001/12/30 上午 01:50:37
實作部份(Part 4)
bool ParticleSystem::RenderEmitter(LPDIRECT3DDEVICE8 pd3dDevice)
{
  Emitter *emitter = &m_Emitter;
  
  pd3dDevice->SetRenderState(D3DRS_POINTSPRITEENABLE, TRUE);
  pd3dDevice->SetRenderState(D3DRS_POINTSCALEENABLE, TRUE);
  pd3dDevice->SetRenderState(D3DRS_POINTSIZE, FtoDW(m_fPointSize));
  pd3dDevice->SetRenderState(D3DRS_POINTSIZE_MIN, FtoDW(0.00f));
  pd3dDevice->SetRenderState(D3DRS_POINTSCALE_A, FtoDW(0.00f));
  pd3dDevice->SetRenderState(D3DRS_POINTSCALE_B, FtoDW(0.00f));
  pd3dDevice->SetRenderState(D3DRS_POINTSCALE_C, FtoDW(1.00f));

  
  
  pd3dDevice->SetStreamSource(0, m_pd3dVB, sizeof(POINTVERTEX));
  pd3dDevice->SetVertexShader(D3DFVF_POINTVERTEX);

  pd3dDevice->SetTexture(0, m_pd3dTexture);
  
  
  Particle* particle;
  POINTVERTEX* pVertices;
  DWORD NumToEmit = 0;
  DWORD dwBase = MAX_PARTICLES;
  DWORD dwEmit = 1000;

  
  dwBase += dwEmit;

  if(dwBase > MAX_PARTICLES)
dwBase = 0;

  if(emitter != NULL)
  {
if(emitter->pParticle != NULL)
{
if(FAILED(m_pd3dVB->Lock(dwBase*sizeof(POINTVERTEX),dwEmit*sizeof(POINTVERTEX),
(BYTE**)&pVertices,dwBase ? D3DLOCK_NOOVERWRITE:D3DLOCK_DISCARD)))
{
return false;
}

particle = emitter->pParticle;

while(particle)
{
particle->clrColor.a = 1.0f;
pVertices->clrColor = (DWORD)particle->clrColor;
pVertices->pos = particle->vPos;
     pVertices++;
     if(++NumToEmit == dwEmit)
{
m_pd3dVB->Unlock();
     pd3dDevice->DrawPrimitive(D3DPT_POINTLIST, dwBase, NumToEmit);

dwBase += dwEmit;
if(dwBase > MAX_PARTICLES)
dwBase = 0;

if(FAILED(m_pd3dVB->Lock(dwBase*sizeof(POINTVERTEX),dwEmit*sizeof(POINTVERTEX),
(BYTE**)&pVertices,dwBase ? D3DLOCK_NOOVERWRITE:D3DLOCK_DISCARD)))
{
return false;
}
NumToEmit = 0;
}

     particle = particle->pNext;
}
m_pd3dVB->Unlock();
}
return true;
  }

  pd3dDevice->SetRenderState(D3DRS_POINTSPRITEENABLE, FALSE);
  pd3dDevice->SetRenderState(D3DRS_POINTSCALEENABLE, FALSE);
  


  return false;

}

bool CExplode::SetDefaultEmitter(Emitter *emitter)
{
  emitter->pNext = NULL;
  emitter->pPrev = NULL;
  emitter->vPos.x = 0.0f;
  emitter->vPos.y = -0.5f;
  emitter->vPos.z = 5.0f;

  emitter->fYaw = D3DXToRadian(0);
  emitter->fYawVar = D3DXToRadian(360);
  emitter->fPitch = D3DXToRadian(0);
  emitter->fPitchVar = D3DXToRadian(360);
  emitter->fSpeed = 0.05f;
  emitter->fSpeedVar = 0.01f;

  emitter->emitsPerFrame = 200;
  emitter->emitVar = 15;

  emitter->totalParticles = MAX_PARTICLES;
  emitter->particleCount = 0;
  emitter->life = 60;
  emitter->lifeVar = 15;
  emitter->startColor.r = 0.6f;
  emitter->startColor.g = 0.6f;
  emitter->startColor.b = 0.8f;
  emitter->startColorVar.r = 0.1f;
  emitter->startColorVar.g = 0.1f;
  emitter->startColorVar.b = 0.1f;
  emitter->endColor.r = 0.0f;
  emitter->endColor.g = 0.0f;
  emitter->endColor.b = 0.8f;
  emitter->endColorVar.r = 0.1f;
  emitter->endColorVar.g = 0.1f;
  emitter->endColorVar.b = 0.2f;

  emitter->vForce.x = 0.000f;
  emitter->vForce.y = -0.001f;
  emitter->vForce.z = 0.0f;

  return true;
}

如有任何問題的話,請儘量提出,我會盡我所能地回答。
請各位多多指教!
作者 : frankwei(BigFly)
[ 貼文 14 | 人氣 3647 | 評價 50 | 評價/貼文 3.57 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2001/12/30 上午 01:51:36
忘了Post Random的函數了!

float Random(void)
{
  int HALF_RAND = (RAND_MAX / 2);
  int rn;
  rn = rand();
  return ((float)(rn - HALF_RAND) / (float)HALF_RAND);
}

作者 : frankwei(BigFly)
[ 貼文 14 | 人氣 3647 | 評價 50 | 評價/貼文 3.57 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2001/12/30 上午 01:52:58
真是粗心! 又忘了一個函數

void RotationToDirection(float pitch, float yaw, D3DXVECTOR3 *direction)
{
  direction->x = -sinf(yaw) * cosf(pitch);
  direction->y = sinf(pitch);
  direction->z = cosf(pitch) * cosf(yaw);
}

作者 : dan59314(danny)
[ 貼文 35 | 人氣 7918 | 評價 60 | 評價/貼文 1.71 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2002/1/2 上午 11:27:00
能否提供完整的程式碼? 謝謝
作者 : frankwei(BigFly)
[ 貼文 14 | 人氣 3647 | 評價 50 | 評價/貼文 3.57 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2002/1/4 下午 11:00:30
留下你的Email, 我把程式碼寄給你
作者 : dan59314(danny)
[ 貼文 35 | 人氣 7918 | 評價 60 | 評價/貼文 1.71 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2002/1/7 上午 09:29:23
謝謝 。

我的 email: dan59314@ms3.hinet.net


感謝。
:)
作者 : ahonchen(茫星)
[ 貼文 23 | 人氣 1327 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2002/1/7 上午 10:40:10
可以給我嗎?謝謝
作者 : eclipse(天罪)
[ 貼文 78 | 人氣 162 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2002/1/8 下午 03:19:53
我的eMail: outbreak@mail2000.com.tw
謝謝...
作者 : sam.tzeng.(Sam)
[ 貼文 2 | 人氣 10 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2002/1/15 下午 12:52:33
也可以給我一份嗎? 我的 email 是 s8727654@ms4.pccu.edu.tw
非常感謝!!
作者 : jason_lin1130(Bug)
[ 貼文 5 | 人氣 633 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2002/4/2 下午 12:51:16
您好:
     是否可以 e-mail 一份給我.謝謝!
     e-mail: jason_lin1130@yam.com
作者 : stardust(星塵)
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2002/5/22 下午 06:19:42
您好:
     是否可以 e-mail 一份給我.謝謝!

      e-mail : cosmos_dust@hotmail.com
作者 : bdragon(bdragon)
[ 貼文 15 | 人氣 2289 | 評價 60 | 評價/貼文 4 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/11/12 上午 11:13:27
喔喔^^ 我也需要
bdragon123@sinamail.com
Thanks~~~
作者 : armo(armo)
[ 貼文 5 | 人氣 804 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/11/27 下午 08:31:05
我也要 謝謝@@|
zeroogut@yahoo.com.tw
作者 : bigpipi(雲)
[ 貼文 29 | 人氣 1731 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/12/15 下午 05:06:50
我也要
bigpipi999@yahoo.com.tw
謝謝
作者 : blajlin(小蟲)
[ 貼文 9 | 人氣 485 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/12/23 下午 04:16:23
你所謂粒子系統,是有關於粒子間的碰撞嗎??
還是其他用途......
不之可以MAIL一份給我呢??
blajlin@yahoo.com.tw
blaj.lin@msa.hinet.net
作者 : jinbao(60%灰階)
[ 貼文 8 | 人氣 797 | 評價 40 | 評價/貼文 5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/1/10 下午 04:27:18
可以也給我一份嗎 謝謝
jinbao@ms73.url.com.tw
作者 : cmdunlop(粗學者)
[ 貼文 9 | 人氣 295 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/2/24 下午 07:54:27
可以給我參考嗎?
e-mail :cmdunlop@pchome.com.tw
作者 : blues6534(Blues)
[ 貼文 3 | 人氣 221 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/3/2 下午 08:33:35
哇勒。。。。全部都在跟人家要程式碼。。。沒有一個給點意見的
作者 : tengbest(鄧肯)
[ 貼文 29 | 人氣 1285 | 評價 0 | 評價/貼文 0 | 送出評價 5 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/4/22 下午 08:36:11
請問刀光劍影是否也算是粒子系統的一種@@?
作者 : gargoyle(gragoyle)
[ 貼文 51 | 人氣 3709 | 評價 50 | 評價/貼文 0.98 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/4/24 上午 10:16:54
如果刀光劍影用粒子的話…
那要用多少粒子來構成一個平面呢…
所以記錄運動的位置
再畫出三角形或是多邊形代表刀光劍影
用少數多邊形就完成了幾百個多邊形(粒子)的效果
作者 : tengbest(鄧肯)
[ 貼文 29 | 人氣 1285 | 評價 0 | 評價/貼文 0 | 送出評價 5 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/4/25 上午 10:57:50
感謝指導^^
所以粒子系統都是用點表現出來的嗎?不是用小三角型加上貼圖來做的@@?
作者 : gargoyle(gragoyle)
[ 貼文 51 | 人氣 3709 | 評價 50 | 評價/貼文 0.98 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/4/26 下午 05:55:13
>>粒子系統都是用點表現出來的嗎?不是用小三角型加上貼圖來做的

不…雖然是點,但是是有大小的(size)
也就說是正方形…再加上貼圖
當然…貼滿整個正方形是相當難看的
作者 : daniel(冷眼)討論區板主 VC++優秀好手遊戲程式設計優秀好手DirectX優秀好手C++優秀好手貼文超過1000則人氣指數超過70000點
[ 貼文 1564 | 人氣 84169 | 評價 6990 | 評價/貼文 4.47 | 送出評價 15 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/4/27 下午 01:39:05
個人覺的即然說粒子系統
因該以node 為中心吧..成象只是表現
最好把成象跟演算法分開


     [ basenode ]
     / \
    [ graphic ] [ act ]

作者 : tengbest(鄧肯)
[ 貼文 29 | 人氣 1285 | 評價 0 | 評價/貼文 0 | 送出評價 5 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/5/3 上午 11:37:56
冷眼兄說的極是,我想粒子系統應該是指 粒子在空間的計算問題,成像只是表達粒子系統的方式。感謝解惑!
作者 : hawk8456(想)
[ 貼文 1 | 人氣 1 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/28 下午 02:38:58
我ㄝ要一份可以ㄇ?
e-mail :hawk8456@yahoo.com.tw
作者 : zho(相ㄟ)
[ 貼文 115 | 人氣 1854 | 評價 400 | 評價/貼文 3.48 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/29 上午 01:40:10
刀光應該不算是粒子吧
刀光是類似隨著某些點的移動路徑由程式創造模型
作者 : daniel(冷眼)討論區板主 VC++優秀好手遊戲程式設計優秀好手DirectX優秀好手C++優秀好手貼文超過1000則人氣指數超過70000點
[ 貼文 1564 | 人氣 84169 | 評價 6990 | 評價/貼文 4.47 | 送出評價 15 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/29 上午 10:11:40
汗....真多年的文了


走路的煙...下水的波紋..人身上掛的血,..刀砍出來的光
只要有發射點..有運動的軌跡都可以用粒子來表示
作者 : tomneo2004(tomneo)
[ 貼文 8 | 人氣 582 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/10/19 上午 06:24:55
Particle *pPrev;
  Particle *pNext;


what is this mean?
can you explain,please?
作者 : dorkas(aming) VC++優秀好手遊戲程式設計卓越專家DirectX頂尖高手C++優秀好手貼文超過2000則
[ 貼文 2624 | 人氣 4536 | 評價 11810 | 評價/貼文 4.5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/10/21 下午 01:18:47
link 資料 又叫雙鍊 很容易實做插入篩除新增

一般粒子系統就是這樣串起來的

>Particle *pPrev; 上一顆
> Particle *pNext; 下一顆
>
>
>what is this mean?
>can you explain,please?
作者 : dorkas(aming) VC++優秀好手遊戲程式設計卓越專家DirectX頂尖高手C++優秀好手貼文超過2000則
[ 貼文 2624 | 人氣 4536 | 評價 11810 | 評價/貼文 4.5 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/10/21 下午 01:23:29
粒子系統可以分不可視粒子,配上物理運動
可以用來算布,頭髮,刀光之類的

並不是一顆粒子,就是一定要配上一個poly

有時候粒子 它只是一個頂點而已
可以將它綁定在任何物件

像群體運動的生物
作者 : topwuo(Happy喔)
[ 貼文 18 | 人氣 1143 | 評價 0 | 評價/貼文 0 | 送出評價 4 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/11/9 上午 07:01:55
s14914025@ntit.edu.tw
我也要∼∼∼∼囧∼∼∼
想碰這方面已經很久了XD
作者 : access78(Excelc)
[ 貼文 1 | 人氣 1 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/1/1 下午 07:06:54
感恩~
em:excelc240@yahoo.com.tw
作者 : 701010(jeffreyW)
[ 貼文 15 | 人氣 1182 | 評價 0 | 評價/貼文 0 | 送出評價 5 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/3/21 下午 07:55:13
可以給我原始碼嗎...謝謝這位大哥的熱心..造福了有心學習的人..
nevergiveup_wei@yahoo.com.tw
作者 : lennox0925(龍寶寶)
[ 貼文 1 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/12/11 上午 10:31:37
不好意思 可以給我完整的程式碼嗎 ?

e-mail : lennox0925@yahoo.com.tw

謝謝唷 
 板主 : 小呆 , 冷眼
 > 遊戲程式設計 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 遊戲程式設計 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
遊戲程式設計
1 aming 2280 
2 冷眼 1450 
3 阿西德倫 510 
4 PLAYER 390 
5 garf 340 
6 Akira 330 
7 白老鼠(Gary) 290 
8 BlueTulip 270 
9 東昇 250 
10 CCL 240 
遊戲程式設計
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.3125