Explorar o código

Fixed 3d particles

Ivan Safrin %!s(int64=13) %!d(string=hai) anos
pai
achega
65f80c19cd

+ 2 - 0
Core/Contents/Include/PolyParticleEmitter.h

@@ -299,6 +299,8 @@ namespace Polycode {
 		Matrix4 getBaseMatrix();
 		void Update();
 		
+		Vector3 getParticleCompoundScale();
+		
 		void dispatchTriggerCompleteEvent();
 		
 			/**

+ 13 - 5
Core/Contents/Source/PolyParticleEmitter.cpp

@@ -42,6 +42,7 @@ SceneEntity()
 	isScreenEmitter = false;
 	emitterMesh = emitter;	
 	createParticles();	
+	
 }
 
 SceneParticleEmitter::~SceneParticleEmitter() {
@@ -70,7 +71,7 @@ void SceneParticleEmitter::dispatchTriggerCompleteEvent() {
 
 Matrix4 SceneParticleEmitter::getBaseMatrix() {
 	rebuildTransformMatrix();
-	return getConcatenatedMatrix();	
+	return getConcatenatedMatrix();
 }
 
 void SceneParticleEmitter::Update() {
@@ -329,6 +330,8 @@ void ParticleEmitter::resetParticle(Particle *particle) {
 	
 	Vector3	startVector;
 	
+	Vector3 compoundScale = getParticleCompoundScale();
+	
 	particle->dirVector = dirVector;
 //	if(emitterMesh) {
 //		Polygon *randPoly = emitterMesh->getMesh()->getPolygon(rand() % emitterMesh->getMesh()->getPolygonCount());		
@@ -358,11 +361,11 @@ void ParticleEmitter::resetParticle(Particle *particle) {
 	particle->particleBody->rebuildTransformMatrix();	
 	
 	if(useScaleCurves) {
-		particle->particleBody->setScale(scaleCurve.getHeightAt(0) * particleSize,
-									 scaleCurve.getHeightAt(0) * particleSize,
-									 scaleCurve.getHeightAt(0) * particleSize);
+		particle->particleBody->setScale(scaleCurve.getHeightAt(0) * particleSize * compoundScale.x,
+									 scaleCurve.getHeightAt(0) * particleSize * compoundScale.y,
+									 scaleCurve.getHeightAt(0) * particleSize * compoundScale.z);
 	} else {
-		particle->particleBody->setScale(particleSize, particleSize, particleSize);
+		particle->particleBody->setScale(particleSize  * compoundScale.x, particleSize * compoundScale.y, particleSize * compoundScale.z);
 	}
 	
 	if(useColorCurves) {
@@ -381,6 +384,11 @@ Vector3 ScreenParticleEmitter::getParticleCompoundScale() {
 	return getCompoundScale();
 }
 
+Vector3 SceneParticleEmitter::getParticleCompoundScale() {
+	return getCompoundScale();
+}
+
+
 Vector3 ParticleEmitter::getParticleCompoundScale() {
 	return Vector3();
 }

+ 8 - 1
Examples/C++/Contents/2DParticles/HelloPolycodeApp.cpp

@@ -13,16 +13,22 @@ HelloPolycodeApp::HelloPolycodeApp(PolycodeView *view) {
 	
 	Screen *screen = new Screen();	
 	ScreenParticleEmitter *emitter = new ScreenParticleEmitter("Resources/particle.png", 
-		screen, Particle::BILLBOARD_PARTICLE, ParticleEmitter::CONTINUOUS_EMITTER, 4, 200, 
+		Particle::BILLBOARD_PARTICLE, ParticleEmitter::CONTINUOUS_EMITTER, 4, 200, 
 		Vector3(0.0,-50.0,0.0), Vector3(0.0,0.0,0.0), Vector3(20.5, 40.0, 0.0), 
 		Vector3(1.5,1.5,1.5));
 	
 	emitter->useScaleCurves = true;
+	emitter->scaleCurve.clearControlPoints();
 	emitter->scaleCurve.addControlPoint2d(0, 0.3);
 	emitter->scaleCurve.addControlPoint2d(0.5, 1);
 	emitter->scaleCurve.addControlPoint2d(1, 0);
 	
 	emitter->useColorCurves = true;
+	emitter->colorCurveR.clearControlPoints();	
+	emitter->colorCurveG.clearControlPoints();	
+	emitter->colorCurveB.clearControlPoints();	
+	emitter->colorCurveA.clearControlPoints();	
+				
 	emitter->colorCurveR.addControlPoint2d(0, 0.3);
 	emitter->colorCurveR.addControlPoint2d(0.1, 1);	
 	emitter->colorCurveR.addControlPoint2d(0.4, 1);		
@@ -54,3 +60,4 @@ HelloPolycodeApp::~HelloPolycodeApp() {
 bool HelloPolycodeApp::Update() {
     return core->Update();
 }
+

+ 1 - 1
Examples/C++/Contents/3DMeshParticles/HelloPolycodeApp.cpp

@@ -25,7 +25,7 @@ HelloPolycodeApp::HelloPolycodeApp(PolycodeView *view) {
 	mesh->createTorus(0.3,0.2,10,10);
 
 	
-	SceneParticleEmitter *emitter = new SceneParticleEmitter("Default", scene,
+	SceneParticleEmitter *emitter = new SceneParticleEmitter("Default", 
 		Particle::MESH_PARTICLE, ParticleEmitter::CONTINUOUS_EMITTER, 4, 100,
 		Vector3(0.0,1.0,0.0), Vector3(0.0,0.0,0.0), Vector3(0.3, 0.0, 0.3),
 		Vector3(1.5,1.5,1.5), mesh);

+ 1 - 1
Examples/C++/Contents/3DParticles/HelloPolycodeApp.cpp

@@ -20,7 +20,7 @@ HelloPolycodeApp::HelloPolycodeApp(PolycodeView *view) {
 	scene->getDefaultCamera()->setPosition(7,7,7);
 	scene->getDefaultCamera()->lookAt(Vector3(0,0,0));	
 	
-	SceneParticleEmitter *emitter = new SceneParticleEmitter("TestParticle", scene,
+	SceneParticleEmitter *emitter = new SceneParticleEmitter("TestParticle", 
 		Particle::BILLBOARD_PARTICLE, ParticleEmitter::CONTINUOUS_EMITTER, 4, 200,
 		Vector3(0.0,1.0,0.0), Vector3(0.0,0.0,0.0), Vector3(0.3, 0.0, 0.3),
 		Vector3(1.5,1.5,1.5));		

+ 1 - 1
Examples/C++/Resources/example.mat

@@ -4,7 +4,7 @@
 		<material name="TestParticle">
 			<shader name="DefaultParticleShader">
 				<textures>
-					<texture name="diffuse">particle.png</texture>
+					<texture name="diffuse">Resources/particle.png</texture>
 				</textures>
 			</shader>
 		</material>