Пример #1
0
	void CParticle::Init(CRandom& random, const CCamera& camera, const SParicleEmitParameter& param, const CVector3& emitPosition )
	{
		float halfW = param.w * 0.5f;
		float halfH = param.h * 0.5f;
		
		TK_ASSERT(param.uvTableSize <= ARRAYSIZE(param.uvTable), "uvTable size over!!!");
		CVector4 uv;
		if (param.uvTableSize > 0) {
			uv = param.uvTable[random.GetRandInt() % param.uvTableSize];
		}
		else {
			uv = param.uvTable[0];
		}
		
		SShapeVertex_PT vb[] = {
			{
				-halfW, halfH, 0.0f, 1.0f,
				uv.x, uv.y
			},
			{
				halfW, halfH, 0.0f, 1.0f,
				uv.z, uv.y
			},
			{
				-halfW, -halfH, 0.0f, 1.0f,
				uv.x, uv.w
			},
			{
				halfW, -halfH, 0.0f, 1.0f,
				uv.z, uv.w
			},
			
		};
		short index[]{
			0,1,2,3
		};
		primitive.Create(
			CPrimitive::eTriangleStrip,
			4,
			sizeof(SShapeVertex_PT),
			scShapeVertex_PT_Element,
			vb,
			4,
			eIndexFormat16,
			index
			);
		
		texture = ParticleResources().LoadTexture(param.texturePath);
		shaderEffect = EffectManager().LoadEffect("Assets/presetShader/ColorTexPrim.fx");
		this->camera = &camera;
		this->random = &random;
		life = param.life;
		velocity = param.initVelocity;
		//初速度に乱数を加える。
		velocity.x += (((float)random.GetRandDouble() - 0.5f) * 2.0f) * param.initVelocityVelocityRandomMargin.x;
		velocity.y += (((float)random.GetRandDouble() - 0.5f) * 2.0f) * param.initVelocityVelocityRandomMargin.y;
		velocity.z += (((float)random.GetRandDouble() - 0.5f) * 2.0f) * param.initVelocityVelocityRandomMargin.z;
		position = emitPosition;
		position.x += (((float)random.GetRandDouble() - 0.5f) * 2.0f) * param.initPositionRandomMargin.x;
		position.y += (((float)random.GetRandDouble() - 0.5f) * 2.0f) * param.initPositionRandomMargin.y;
		position.z += (((float)random.GetRandDouble() - 0.5f) * 2.0f) * param.initPositionRandomMargin.z;
		addVelocityRandomMargih = param.addVelocityRandomMargih;
		gravity = param.gravity;
		isFade = param.isFade;
		state = eStateRun;
		initAlpha = param.initAlpha;
		alpha = initAlpha;
		fadeTIme = param.fadeTime;
		isBillboard = param.isBillboard;
		brightness = param.brightness;
		alphaBlendMode = param.alphaBlendMode;
		mulColor = param.mulColor;
		rotateZ = CMath::PI * 2.0f * (float)random.GetRandDouble();
	}