Bigger particles, some changes in physx
This commit is contained in:
parent
963c2a86a2
commit
85c9c561ee
@ -57,7 +57,7 @@ vec3 fastAA()
|
|||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
const float gamma = 0.9;
|
const float gamma = 0.9f;
|
||||||
vec3 hdrColor = fastAA(); //texture(scene, vTexCoords).rgb;
|
vec3 hdrColor = fastAA(); //texture(scene, vTexCoords).rgb;
|
||||||
vec3 bloomColor = texture(bloomBlur, vTexCoords).rgb;
|
vec3 bloomColor = texture(bloomBlur, vTexCoords).rgb;
|
||||||
hdrColor += bloomColor;
|
hdrColor += bloomColor;
|
||||||
|
84
src/main.cpp
84
src/main.cpp
@ -230,7 +230,8 @@ void keyboard(unsigned char key, int x, int y)
|
|||||||
auto actor = getActor("Corvette");
|
auto actor = getActor("Corvette");
|
||||||
auto move = actor->getLinearVelocity();
|
auto move = actor->getLinearVelocity();
|
||||||
physx::PxVec3 dir = physx::PxVec3(cameraDir.x, cameraDir.y, cameraDir.z);
|
physx::PxVec3 dir = physx::PxVec3(cameraDir.x, cameraDir.y, cameraDir.z);
|
||||||
glm::vec3 cross = glm::cross(cameraDir, glm::vec3(0, 1, 0));
|
physx::PxVec3 up = physx::PxVec3(cameraUp.x, cameraUp.y, cameraUp.z);
|
||||||
|
glm::vec3 cross = glm::cross(cameraDir, cameraUp);
|
||||||
physx::PxVec3 dirCross = physx::PxVec3(cross.x, cross.y, cross.z);
|
physx::PxVec3 dirCross = physx::PxVec3(cross.x, cross.y, cross.z);
|
||||||
|
|
||||||
float angleSpeed = 0.1f;
|
float angleSpeed = 0.1f;
|
||||||
@ -239,18 +240,18 @@ void keyboard(unsigned char key, int x, int y)
|
|||||||
{
|
{
|
||||||
case 'q':
|
case 'q':
|
||||||
{
|
{
|
||||||
//cameraAngle -= angleSpeed;
|
actor->setAngularVelocity(PxVec3(0.f, 1.f, 0.f));
|
||||||
actor->setAngularVelocity(PxVec3(0.f, -1.f, 0.f));
|
//cameraAngle += angleSpeed;
|
||||||
lights[3].intensity = 0.05;
|
lights[2].intensity = 0.05;
|
||||||
engineLightTimer = 0;
|
engineLightTimer = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 'e':
|
case 'e':
|
||||||
{
|
{
|
||||||
actor->setAngularVelocity(PxVec3(0.f, 1.f, 0.f));
|
//cameraAngle -= angleSpeed;
|
||||||
//cameraAngle += angleSpeed;
|
actor->setAngularVelocity(PxVec3(0.f, -1.f, 0.f));
|
||||||
lights[2].intensity = 0.05;
|
lights[3].intensity = 0.05;
|
||||||
engineLightTimer = 0;
|
engineLightTimer = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -270,10 +271,14 @@ void keyboard(unsigned char key, int x, int y)
|
|||||||
//cameraPos += glm::cross(cameraDir, glm::vec3(0, 1, 0)) * moveSpeed; break;
|
//cameraPos += glm::cross(cameraDir, glm::vec3(0, 1, 0)) * moveSpeed; break;
|
||||||
case 'a': actor->setLinearVelocity(move - dirCross); break;
|
case 'a': actor->setLinearVelocity(move - dirCross); break;
|
||||||
//cameraPos -= glm::cross(cameraDir, glm::vec3(0, 1, 0)) * moveSpeed; break;
|
//cameraPos -= glm::cross(cameraDir, glm::vec3(0, 1, 0)) * moveSpeed; break;
|
||||||
case 'z': actor->setLinearVelocity(PxVec3(move.x, move.y + 3, move.z)); break;
|
case 'z': actor->setLinearVelocity(move + up); break;
|
||||||
//cameraPos += glm::cross(cameraDir, glm::vec3(0, 0, 1)) * moveSpeed; break;
|
//cameraPos += glm::cross(cameraDir, glm::vec3(0, 0, 1)) * moveSpeed; break;
|
||||||
case 'x': actor->setLinearVelocity(PxVec3(move.x, move.y - 3, move.z)); break;
|
case 'x': actor->setLinearVelocity(move - up); break;
|
||||||
//cameraPos -= glm::cross(cameraDir, glm::vec3(0, 0, 1)) * moveSpeed; break;
|
//cameraPos -= glm::cross(cameraDir, glm::vec3(0, 0, 1)) * moveSpeed; break;
|
||||||
|
case 'r': actor->setAngularVelocity(PxVec3(1.0f, 0.0f, 0.0f)); break;
|
||||||
|
case 't': actor->setAngularVelocity(PxVec3(0.0f, 0.0f, 1.0f)); break;
|
||||||
|
case 'f': actor->setAngularVelocity(PxVec3(-1.0f, 0.0f, 0.0f)); break;
|
||||||
|
case 'g': actor->setAngularVelocity(PxVec3(0.0f, 0.0f, -1.0f)); break;
|
||||||
case ' ':
|
case ' ':
|
||||||
{
|
{
|
||||||
actor->setLinearVelocity(PxVec3(0, 0, 0));
|
actor->setLinearVelocity(PxVec3(0, 0, 0));
|
||||||
@ -364,12 +369,19 @@ glm::mat4 createCameraMatrix()
|
|||||||
//cameraDir = glm::vec3(cosf(cameraAngle), 0.0f, sinf(cameraAngle));
|
//cameraDir = glm::vec3(cosf(cameraAngle), 0.0f, sinf(cameraAngle));
|
||||||
//glm::vec3 up = glm::vec3(0, 1, 0);
|
//glm::vec3 up = glm::vec3(0, 1, 0);
|
||||||
|
|
||||||
cameraSide = glm::cross(cameraDir, cameraUp);
|
|
||||||
Object* ship = findObject("Corvette");
|
|
||||||
|
|
||||||
|
Object* ship = findObject("Corvette");
|
||||||
|
glm::mat4 shipModelMatrix = ship->GetMatrix();
|
||||||
|
glm::mat4 offset = glm::translate(shipModelMatrix, glm::vec3(0, -2500, -8000));
|
||||||
|
glm::mat4 cameraDirection = glm::translate(shipModelMatrix, glm::vec3(0, 0, 1000));
|
||||||
|
glm::mat4 cameraUpwards = glm::translate(shipModelMatrix, glm::vec3(0, -1000, 0));
|
||||||
|
cameraDir = glm::vec3(cameraDirection[3][0] - shipModelMatrix[3][0], cameraDirection[3][1] - shipModelMatrix[3][1], cameraDirection[3][2] - shipModelMatrix[3][2]);
|
||||||
|
cameraPos = glm::vec3(offset[3][0], offset[3][1], offset[3][2]);
|
||||||
|
cameraUp = glm::vec3(cameraUpwards[3][0] - shipModelMatrix[3][0], cameraUpwards[3][1] - shipModelMatrix[3][1], cameraUpwards[3][2] - shipModelMatrix[3][2]);
|
||||||
|
cameraSide = glm::cross(cameraDir, cameraUp);
|
||||||
|
|
||||||
//return Core::createViewMatrix(cameraPos, cameraDir, up);
|
//return Core::createViewMatrix(cameraPos, cameraDir, up);
|
||||||
return glm::lookAt(cameraPos, ship->getPositionFromMatrix(ship->GetMatrix()), cameraUp);
|
return glm::lookAt(cameraPos, ship->getPositionFromMatrix(glm::translate(shipModelMatrix, glm::vec3(0,-500,0))), cameraUp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawAsteroids()
|
void drawAsteroids()
|
||||||
@ -450,7 +462,7 @@ void drawParticles(int ParticlesCount, glm::mat4 &transformation)
|
|||||||
|
|
||||||
glUniform1i(glGetUniformLocation(programParticle, "sprite"), 0);
|
glUniform1i(glGetUniformLocation(programParticle, "sprite"), 0);
|
||||||
glUniform3f(glGetUniformLocation(programParticle, "CameraRight_worldspace"), cameraSide.x, cameraSide.y, cameraSide.z);
|
glUniform3f(glGetUniformLocation(programParticle, "CameraRight_worldspace"), cameraSide.x, cameraSide.y, cameraSide.z);
|
||||||
glUniform3f(glGetUniformLocation(programParticle, "CameraUp_worldspace"), 0, 1, 0);
|
glUniform3f(glGetUniformLocation(programParticle, "CameraUp_worldspace"), cameraUp.x, cameraUp.y, cameraUp.z);
|
||||||
|
|
||||||
glUniformMatrix4fv(glGetUniformLocation(programParticle, "VP"), 1, GL_FALSE, &transformation[0][0]);
|
glUniformMatrix4fv(glGetUniformLocation(programParticle, "VP"), 1, GL_FALSE, &transformation[0][0]);
|
||||||
|
|
||||||
@ -543,17 +555,10 @@ physx::PxRigidDynamic* getActor(std::string name)
|
|||||||
|
|
||||||
void updateObjects()
|
void updateObjects()
|
||||||
{
|
{
|
||||||
|
|
||||||
Object* obj = findObject("Corvette");
|
Object* obj = findObject("Corvette");
|
||||||
glm::mat4 shipModelMatrix = obj->GetMatrix();
|
glm::mat4 shipModelMatrix = obj->GetMatrix();
|
||||||
//glm::translate(cameraPos + cameraDir * 0.7f + glm::vec3(0, -0.25f, 0)) * glm::rotate(-cameraAngle + glm::radians(90.0f), glm::vec3(0, 1, 0)) * glm::scale(glm::vec3(0.0001f));
|
//glm::translate(cameraPos + cameraDir * 0.7f + glm::vec3(0, -0.25f, 0)) * glm::rotate(-cameraAngle + glm::radians(90.0f), glm::vec3(0, 1, 0)) * glm::scale(glm::vec3(0.0001f));
|
||||||
//obj->modelM = shipModelMatrix;
|
//obj->modelM = shipModelMatrix;
|
||||||
glm::mat4 offset = glm::translate(shipModelMatrix, glm::vec3(0, -2500, -8000));
|
|
||||||
glm::mat4 cameraDirection = glm::translate(shipModelMatrix, glm::vec3(0, 0, 1000));
|
|
||||||
glm::mat4 cameraUpwards = glm::translate(shipModelMatrix, glm::vec3(0, -1000, 0));
|
|
||||||
cameraDir = glm::vec3(cameraDirection[3][0] - shipModelMatrix[3][0], cameraDirection[3][1] - shipModelMatrix[3][1], cameraDirection[3][2] - shipModelMatrix[3][2]);
|
|
||||||
cameraPos = glm::vec3(offset[3][0], offset[3][1], offset[3][2]);
|
|
||||||
cameraUp = glm::vec3(cameraUpwards[3][0] - shipModelMatrix[3][0], cameraUpwards[3][1] - shipModelMatrix[3][1], cameraUpwards[3][2] - shipModelMatrix[3][2]);
|
|
||||||
|
|
||||||
glm::mat4 engineLeft = glm::translate(shipModelMatrix, glm::vec3(450, 0, -1500));
|
glm::mat4 engineLeft = glm::translate(shipModelMatrix, glm::vec3(450, 0, -1500));
|
||||||
lights[2].position = glm::vec3(engineLeft[3][0], engineLeft[3][1], engineLeft[3][2]);
|
lights[2].position = glm::vec3(engineLeft[3][0], engineLeft[3][1], engineLeft[3][2]);
|
||||||
@ -727,7 +732,7 @@ void renderScene()
|
|||||||
ParticlesContainer[particleIndex].pos = lights[3].position;
|
ParticlesContainer[particleIndex].pos = lights[3].position;
|
||||||
|
|
||||||
|
|
||||||
float spread = 0.8;
|
float spread = 0.5;
|
||||||
glm::vec3 maindir = -1 * cameraDir;
|
glm::vec3 maindir = -1 * cameraDir;
|
||||||
glm::vec3 randomdir = glm::vec3(
|
glm::vec3 randomdir = glm::vec3(
|
||||||
(rand() % 2000 - 1000.0f) / 5000.0f,
|
(rand() % 2000 - 1000.0f) / 5000.0f,
|
||||||
@ -740,7 +745,7 @@ void renderScene()
|
|||||||
ParticlesContainer[particleIndex].g = 0;
|
ParticlesContainer[particleIndex].g = 0;
|
||||||
ParticlesContainer[particleIndex].b = rand() % 100 + 50;
|
ParticlesContainer[particleIndex].b = rand() % 100 + 50;
|
||||||
ParticlesContainer[particleIndex].a = (rand() % 256) / 3;
|
ParticlesContainer[particleIndex].a = (rand() % 256) / 3;
|
||||||
ParticlesContainer[particleIndex].size = (rand() % 1000) / 50000.0f + 0.01f;
|
ParticlesContainer[particleIndex].size = (rand() % 1000) / 5000.0f + 0.01f;
|
||||||
|
|
||||||
}
|
}
|
||||||
// Simulate all particles
|
// Simulate all particles
|
||||||
@ -792,31 +797,10 @@ void renderScene()
|
|||||||
glutSwapBuffers();
|
glutSwapBuffers();
|
||||||
}
|
}
|
||||||
|
|
||||||
physx::PxMat44 transformMat(glm::mat4 mat)
|
|
||||||
{
|
|
||||||
float newMat[16] = {mat[0][0], mat[0][1], mat[0][2], mat[0][3],
|
|
||||||
mat[1][0], mat[1][1], mat[1][2], mat[1][3],
|
|
||||||
mat[2][0], mat[2][1], mat[2][2], mat[2][3],
|
|
||||||
mat[3][0], mat[3][1], mat[3][2], mat[3][3] };
|
|
||||||
|
|
||||||
return PxMat44(newMat);
|
|
||||||
}
|
|
||||||
|
|
||||||
void compareMat(physx::PxMat44 mat1, glm::mat4 mat2)
|
|
||||||
{
|
|
||||||
for (int i = 0; i <= 3; i++)
|
|
||||||
{
|
|
||||||
for (int j = 0; j <= 3; j++)
|
|
||||||
{
|
|
||||||
cout << mat1[i][j] << " " << mat2[i][j] << std::endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void initPhysics()
|
void initPhysics()
|
||||||
{
|
{
|
||||||
material = pxScene.physics->createMaterial(0.5, 0.5, 0.5);
|
material = pxScene.physics->createMaterial(0.5, 0.5, 0.5);
|
||||||
sphereShape = pxScene.physics->createShape(PxSphereGeometry(1), *material);
|
|
||||||
rectangleShape = pxScene.physics->createShape(PxBoxGeometry(1, 1, 1), *material);
|
rectangleShape = pxScene.physics->createShape(PxBoxGeometry(1, 1, 1), *material);
|
||||||
|
|
||||||
for (auto &obj : objects)
|
for (auto &obj : objects)
|
||||||
@ -842,6 +826,8 @@ void initPhysics()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
sphereShape = pxScene.physics->createShape(PxSphereGeometry(obj.GetScale().x), *material);
|
||||||
|
|
||||||
if (obj.isKinematic() == true)
|
if (obj.isKinematic() == true)
|
||||||
{
|
{
|
||||||
glm::vec3 pos = obj.GetPosition();
|
glm::vec3 pos = obj.GetPosition();
|
||||||
@ -866,14 +852,16 @@ void initPhysics()
|
|||||||
{
|
{
|
||||||
glm::vec3 pos = obj.getPositionFromMatrix(obj.GetMatrix());
|
glm::vec3 pos = obj.getPositionFromMatrix(obj.GetMatrix());
|
||||||
staticObjects.emplace_back(pxScene.physics->createRigidStatic(PxTransform(pos.x, pos.y, pos.z)));
|
staticObjects.emplace_back(pxScene.physics->createRigidStatic(PxTransform(pos.x, pos.y, pos.z)));
|
||||||
staticObjects.back()->setGlobalPose(PxTransform(transformMat(obj.GetMatrix())));
|
physx::PxMat44 mat;
|
||||||
|
mat.setPosition(PxVec3(pos.x, pos.y, pos.z));
|
||||||
|
staticObjects.back()->setGlobalPose(PxTransform(mat));
|
||||||
staticObjects.back()->attachShape(*sphereShape);
|
staticObjects.back()->attachShape(*sphereShape);
|
||||||
staticObjects.back()->userData = &obj;
|
staticObjects.back()->userData = &obj;
|
||||||
pxScene.scene->addActor(*staticObjects.back());
|
pxScene.scene->addActor(*staticObjects.back());
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
sphereShape->release();
|
sphereShape->release();
|
||||||
|
}
|
||||||
|
}
|
||||||
rectangleShape->release();
|
rectangleShape->release();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1019,7 +1007,7 @@ void initObjects()
|
|||||||
objects.push_back(moon);
|
objects.push_back(moon);
|
||||||
|
|
||||||
Object crewmateObj = Object("Space Humster", crewmate, programNormal, glm::vec3(1.0f),
|
Object crewmateObj = Object("Space Humster", crewmate, programNormal, glm::vec3(1.0f),
|
||||||
glm::vec3(-5, 0, 0), glm::vec3(1, 0, 1), glm::vec3(0.01), 0, true, false);
|
glm::vec3(-5, 0, 0), glm::vec3(1, 0, 1), glm::vec3(0.1), 0, true, false);
|
||||||
objects.push_back(crewmateObj);
|
objects.push_back(crewmateObj);
|
||||||
|
|
||||||
//glm::mat4 shipModelMatrix = glm::translate(cameraPos + cameraDir * 0.7f + glm::vec3(0, -0.25f, 0)) * glm::rotate(-cameraAngle + glm::radians(90.0f), glm::vec3(0, 1, 0)) * glm::scale(glm::vec3(0.0001f));;
|
//glm::mat4 shipModelMatrix = glm::translate(cameraPos + cameraDir * 0.7f + glm::vec3(0, -0.25f, 0)) * glm::rotate(-cameraAngle + glm::radians(90.0f), glm::vec3(0, 1, 0)) * glm::scale(glm::vec3(0.0001f));;
|
||||||
|
Loading…
Reference in New Issue
Block a user