nicer explosion effects

This commit is contained in:
Andreas Ortmann 2016-09-29 09:05:35 +02:00
parent 1123be9860
commit 70b7233043
4 changed files with 30 additions and 13 deletions

View file

@ -1,6 +1,7 @@
R"raw_string(
#version 120
varying vec2 vertex;
varying vec2 velocity;
uniform float maxAge;
uniform float time;
void main()
@ -10,6 +11,8 @@ void main()
discard;
}
float decay = time / maxAge;
decay = 5.0*decay*decay;
// (length(10.0*velocity));
gl_FragColor = vec4(1.0/max(1.0, decay), 1.0/max(1.0, 6.0*decay), 0.0, 1.0);
}
)raw_string"

View file

@ -3,15 +3,18 @@ R"raw_string(
attribute vec2 in_vertex;
attribute vec2 in_position;
attribute vec2 in_velocity;
varying vec2 velocity;
varying vec2 vertex;
uniform float time;
uniform float size;
void main()
{
vec2 p = size*in_vertex;
p += time * in_velocity;
p += log(1.0+time) * in_velocity;
p += in_position;
gl_Position = vec4(p, 0.0, 1.0);
vertex = in_vertex;
velocity = in_velocity;
}
)raw_string"

View file

@ -23,7 +23,7 @@ namespace endofthejedi {
-1.0f, 1.0f,
-1.0f, -1.0f})
{
std::cout<<"[ParticleBatch] create for " << numParticles << " num particles" << std::endl;
//std::cout<<"[ParticleBatch] create for " << numParticles << " num particles" << std::endl;
m_data_position.resize(m_numParticles);
m_data_velocity.resize(m_numParticles);
@ -88,7 +88,7 @@ namespace endofthejedi {
void ParticleBatch::upload()
{
std::cout<<"[ParticleBatch] upload to vbo's " << std::endl;
//std::cout<<"[ParticleBatch] upload to vbo's " << std::endl;
glGenBuffers(4, m_data_vbos); // Generate buffer

View file

@ -69,13 +69,13 @@ namespace endofthejedi {
m_shader.bind();
// TODO :Z?
renderPlanets();
renderShips();
renderMissiles();
//glDisable(GL_DEPTH_TEST);
renderParticles();
//glEnable(GL_DEPTH_TEST);
//glColor3f(1.0, 0.0, 0.0);
//glBegin(GL_QUADS);
@ -102,11 +102,12 @@ namespace endofthejedi {
for (size_t i=0; i<n; i++) {
// distribute in a circle
float t = 2.0 * M_PI * i / (float) n;
float t = 4.0 * M_PI * i / (float) n;
t += 0.2*util::randf_m1_1();
// with random velocities
glm::vec2 v = 0.2f*glm::vec2(sin(t), cos(t));
v *= 0.2+0.8*util::randf_0_1();
batch->setParticle(i, pos, v);
}
@ -118,15 +119,25 @@ namespace endofthejedi {
void RendererPolygon3d::advanceGraphicObjects(float dt)
{
for (const game::Explosion *expl : m_state->explosions) {
if (expl->age == 0.0) {
addExplosionEffect(expl->position, 200, 3.0);
}
}
std::vector<ParticleBatch*> rm;
for (ParticleBatch *batch : m_particles) {
batch->tick(dt);
if (batch->done()) {
m_particles.remove(batch);
delete(batch);
std::cout<<"particle batch done!" << std::endl;
rm.push_back(batch);
}
}
for (ParticleBatch *batch : rm) {
m_particles.remove(batch);
delete(batch);
}
}
void RendererPolygon3d::renderPlanets()
@ -203,15 +214,15 @@ namespace endofthejedi {
// TODO: which visual size has the rocket? in game its just a point with
// no size because all others have size.
return computeModelMatrix(missile->position, 0.05f, a);
return computeModelMatrix(missile->position, 0.03f, a);
}
glm::mat4 RendererPolygon3d::computeModelMatrix(const game::Ship *ship)
{
// TODO: rotate them before shooting, that looks better
//return computeModelMatrix(ship->position, m_state->shipRadius());
glm::mat4 mat = computeModelMatrix(ship->position, m_state->shipRadius());
// XXX model is flipped
glm::mat4 mat = computeModelMatrix(ship->position, 0.3);
//glm::mat4 mat = computeModelMatrix(ship->position, 0.3);
mat = glm::rotate(mat, (float) M_PI, glm::vec3(0.0f, 1.0f, 0.0f));
return mat;
}