최근에 먼지 방출기를 시도하는 동안 입자 효과에 사용하기 위해 볼륨 렌더링 시스템을 만들었습니다. 입자 위치가 완전히 잘못되었음을 알았습니다. 나는 위치를 설정하기 위해 각각의 입자에 공급되는 시드 난수를 생성합니다. 정상적으로 디버깅을 시작하면 입자는 두 위치에서 서로 위로 스폰합니다. 중단 점을 적용하고 한 번에 하나의 입자를 루프 한 다음 계속할 때 각 입자는 지정된 임의의 위치에있었습니다. 이 외에도 대형 파티클에서 문제를 테스트하는 동안 특정 숫자의 루프를 깨기 위해 히트 카운트를 사용했으며,이 경우에만 위에서 언급 한 두 가지 위치 중 하나로 초기화합니다. 무엇이 이것을 일으킬 수 있습니까?시동시 생성자 값이 적용되지 않음
VolumetricDust::VolumetricDust(string type, Transform* transform, ID3D11Device* pDevice, int width, int height, int depth, bool instanceFlag, int instanceCount)
{
for (int i = 0; i < POOL_SIZE; i++)
{
// PROBLEM LOOP
particles_[i] = new ParticleVolume("Resources\\nucleon.raw", transform, width, height, depth, instanceFlag, instanceCount);
particles_[i]->Initialise(pDevice);
srand((unsigned int)time(NULL));
int test = (rand() % 100 + 1);
int test1 = rand() % 30 + 1;
int test2 = rand() % 50 + 1;
particles_[i]->SetVelocity(XMFLOAT3(0.0f, (float)test, 0.0f));
particles_[i]->GetTransform()->SetPosition((float)test, (float)test1, (float)test2);
}
posReset = transform;
_transform = transform;
mWidth = width;
mHeight = height;
mDepth = depth;
isInstance = instanceFlag;
instanceNum = instanceCount;
_currentTime = 0.0f;
_spawnTime = 5.0f;
_newTime = 0.1f;
_dustTime = 0.0f;
particleTime = 5.0f;
_type = type;
_pd3dDevice = pDevice;
}
void VolumetricDust::SpawnEmitter()
{
for (int i = 0; i < POOL_SIZE; i++)
{
if (!particles_[i]->GetParticleOn())
{
particles_[i]->SetParticleOn(true);
break;
}
}
}
void VolumetricDust::Update(float dt, Camera* cam)
{
_transform->Update();
_currentTime += dt;
_dustTime += dt;
for (int i = 0; i < POOL_SIZE; i++)
{
SpawnEmitter();
if (particles_[i]->GetParticleOn())
{
//posReset->SetPosition(XMFLOAT3(0.0f, 0.0f, 0.0f));
particles_[i]->Update(dt, cam, posReset->GetPosition());
}
if (_transform)
{
_transform->Update();
}
}
}
void VolumetricDust::Draw(ID3D11DeviceContext * _pImmediateContext, ConstantBuffer3D & cb, ID3D11Buffer* _pConstantBuffer)
{
for (int i = 0; i < POOL_SIZE; i++)
{
if (particles_[i]->GetParticleOn())
{
particles_[i]->Draw(_pImmediateContext, cb, _pConstantBuffer);
}
}
}
정말 고마워요! 나는 최근에 srand를 사용하기 시작했고, 나는 이것을 인식하지 못했습니다! – MrPurple
레거시''rand'' /''srand'' 함수 대신 [] (http://en.cppreference.com/w/cpp/numeric/random)을 사용하는 것을 고려해야합니다 –