add movement
This commit is contained in:
parent
7ba6ca9918
commit
ae145e1142
@ -61,7 +61,7 @@ glm::vec3 cameraSide; // Wektor "w bok" kamery
|
||||
glm::vec3 vehiclePos = glm::vec3(0, 0, 0);
|
||||
glm::vec3 vehicleDir; // Wektor "do przodu" kamery
|
||||
glm::vec3 vehicleSide; // Wektor "w bok" kamery
|
||||
float vehicleAngle = 0;
|
||||
float vehicleAngle = 0.0f;
|
||||
|
||||
float cameraAngle = 0;
|
||||
|
||||
@ -98,19 +98,35 @@ float dx = 0;
|
||||
unsigned int skyboxVAO, skyboxVBO;
|
||||
unsigned int cubemapTexture;
|
||||
|
||||
char lastClickedButtonFrontal = 'w';
|
||||
char lastClickedButtonAngle = 's';
|
||||
float vehicleSpeed = 0.0f;
|
||||
float lastVehicleAngle = 0.0f;
|
||||
float vehicleAngleSpeed = 0.0f;
|
||||
bool directionChanged = false;
|
||||
|
||||
void keyboard(unsigned char key, int x, int y)
|
||||
{
|
||||
|
||||
float angleSpeed = 0.1f;
|
||||
float moveSpeed = 0.1f;
|
||||
//lastClickedButton = key;
|
||||
if (key == 'w' || key == 's')
|
||||
{
|
||||
lastClickedButtonFrontal = key;
|
||||
}
|
||||
|
||||
|
||||
printf("%c", key);
|
||||
|
||||
switch (key)
|
||||
{
|
||||
case 'z': vehicleAngle -= angleSpeed; delta_x = vehicleAngle; break;
|
||||
case 'x': vehicleAngle += angleSpeed; cameraAngle = vehicleAngle; break;
|
||||
case 'w': vehiclePos += vehicleDir * moveSpeed; break;
|
||||
case 's': vehiclePos -= vehicleDir * moveSpeed; break;
|
||||
case 'd': vehiclePos += vehicleSide * moveSpeed; break;
|
||||
case 'a': vehiclePos -= vehicleSide * moveSpeed; break;
|
||||
case 'a': vehicleAngleSpeed -= 0.001f; break;
|
||||
case 'd': vehicleAngleSpeed += 0.001f; break;
|
||||
case 'w': vehicleSpeed += 0.01f; break;
|
||||
case 's': vehicleSpeed -= 0.01f; break;
|
||||
case 'z': vehiclePos += vehicleSide * moveSpeed; break;
|
||||
case 'x': vehiclePos -= vehicleSide * moveSpeed; break;
|
||||
//case 'h': rotation_y = glm::quat(1, 0, 0, 0); rotation_x = glm::quat(1, 0, 0, 0); rotationCamera = glm::quat(1, 0, 0, 0); break;
|
||||
//case 'h': rotation_y = glm::quat(1, 0, 0, 0); rotation_x = glm::quat(1, 0, 0, 0); rotationCamera = glm::quat(1, 0, 0, 0); break;
|
||||
|
||||
@ -120,9 +136,39 @@ void keyboard(unsigned char key, int x, int y)
|
||||
//glutWarpPointer(WIN_WIDTH / 2, WIN_HEIGHT/ 2);
|
||||
}
|
||||
|
||||
//glutSetKeyRepeat(GLUT_KEY_REPEAT_OFF);
|
||||
|
||||
|
||||
//rot_y = glm::angleAxis(vehicleAngle * 0.01f, glm::vec3(0, 1, 0));
|
||||
}
|
||||
|
||||
void changeVehicleSpeed() {
|
||||
|
||||
if (vehicleAngleSpeed > 0.01f) {
|
||||
vehicleAngleSpeed = 0.009f;
|
||||
}
|
||||
if (vehicleAngleSpeed < -0.01f) {
|
||||
vehicleAngleSpeed = -0.009f;
|
||||
}
|
||||
|
||||
if (vehicleSpeed > 0.06f) {
|
||||
vehicleSpeed = 0.05f;
|
||||
}
|
||||
if (vehicleSpeed < -0.06f) {
|
||||
vehicleSpeed = -0.05f;
|
||||
}
|
||||
|
||||
switch (lastClickedButtonFrontal)
|
||||
{
|
||||
case 'w': vehiclePos += vehicleDir * vehicleSpeed; break;
|
||||
case 's': vehiclePos -= vehicleDir * -vehicleSpeed; break;
|
||||
}
|
||||
|
||||
vehicleAngle += vehicleAngleSpeed;
|
||||
|
||||
|
||||
}
|
||||
|
||||
void mouse(int x, int y)
|
||||
{
|
||||
if (mouseXPositionLast >= 0) {
|
||||
@ -133,40 +179,47 @@ void mouse(int x, int y)
|
||||
mouseYPositionLast = y;
|
||||
}
|
||||
|
||||
bool freecam = false;
|
||||
|
||||
glm::mat4 createCameraMatrix()
|
||||
{
|
||||
//trzymanie freecama do usuniêcia
|
||||
freecam = false;
|
||||
//delta_x = delta_x + vehicleAngle;
|
||||
glm::quat rot_x = glm::angleAxis(delta_y * 0.01f, glm::vec3(1, 0, 0));
|
||||
glm::quat rot_y = glm::angleAxis(delta_x * 0.01f, glm::vec3(0, 1, 0));
|
||||
|
||||
|
||||
glm::quat rot_x = glm::angleAxis(delta_y, glm::vec3(1, 0, 0));
|
||||
glm::quat rot_y = glm::angleAxis(delta_x, glm::vec3(0, 1, 0));
|
||||
|
||||
dy += delta_y;
|
||||
dx += delta_x;
|
||||
delta_x = 0;
|
||||
delta_y = 0;
|
||||
|
||||
|
||||
vehicleDir = glm::vec3(cosf(vehicleAngle - glm::radians(90.0f)), 0.0f, sinf(vehicleAngle - glm::radians(90.0f)));
|
||||
|
||||
vehicleSide = glm::cross(vehicleDir, glm::vec3(0, 1, 0));
|
||||
|
||||
rotation_x = glm::normalize(rot_x * rotation_x);
|
||||
rotation_y = glm::normalize(rot_y * rotation_y);
|
||||
|
||||
rotationCamera = glm::normalize(rotation_y * rotation_x);
|
||||
|
||||
glm::quat inverse_rot = glm::inverse(rotationCamera);
|
||||
|
||||
cameraDir = inverse_rot * glm::vec3(0, 0, -1);
|
||||
vehicleDir = glm::vec3(cosf(vehicleAngle - glm::radians(90.0f)), 0.0f, sinf(vehicleAngle - glm::radians(90.0f)));
|
||||
|
||||
vehicleDir = glm::vec3(cosf(vehicleAngle - glm::radians(90.0f)), 0.0f, sinf(vehicleAngle - glm::radians(90.0f)));
|
||||
|
||||
glm::vec3 up = glm::vec3(0, 1, 0);
|
||||
cameraSide = inverse_rot * glm::vec3(1, 0, 0);
|
||||
vehicleSide = glm::cross(vehicleDir, up);
|
||||
|
||||
|
||||
return Core::createViewMatrixQuat(vehiclePos + glm::vec3(0, 2, 2), rotationCamera);
|
||||
|
||||
|
||||
if (freecam) {
|
||||
|
||||
|
||||
return Core::createViewMatrixQuat(vehiclePos, rotationCamera);
|
||||
}
|
||||
return Core::createViewMatrix(vehiclePos + glm::vec3(0, 0, 0), vehicleDir, up);
|
||||
|
||||
}
|
||||
|
||||
|
||||
void drawObjectColor(Core::RenderContext context, glm::mat4 modelMatrix, glm::vec3 color)
|
||||
{
|
||||
GLuint program = programColor;
|
||||
@ -353,12 +406,12 @@ void drawLightLocation()
|
||||
|
||||
void drawScene()
|
||||
{
|
||||
glm::mat4 shipInitialTransformation = glm::translate(glm::vec3(0, 0, 0));
|
||||
glm::mat4 shipInitialTransformation = glm::translate(glm::vec3(0, -0.2, -0.05));
|
||||
// Scaling models
|
||||
glm::vec3 shipScale = glm::vec3(0.01, 0.01, 0.01);
|
||||
shipInitialTransformation = glm::scale(shipInitialTransformation, shipScale);
|
||||
|
||||
shipInitialTransformation = shipInitialTransformation * glm::translate(glm::vec3(0, 0, 0)) * glm::rotate(glm::radians(180.0f), glm::vec3(0, 1, 0)) * glm::scale(glm::vec3(0.5f));
|
||||
shipInitialTransformation = shipInitialTransformation * glm::translate(glm::vec3(0, 0, 0)) * glm::rotate(glm::radians(-1.4f), glm::vec3(0, 1, 0)) * glm::scale(glm::vec3(0.1f));
|
||||
glm::mat4 shipModelMatrix = glm::translate(vehiclePos + vehicleDir) * glm::rotate(-vehicleAngle, glm::vec3(0, 1, 0)) * shipInitialTransformation;
|
||||
drawObjectColor(shipContext, shipModelMatrix, glm::vec3(0.6f));
|
||||
|
||||
@ -439,10 +492,10 @@ void drawSceneLight(int pass)
|
||||
|
||||
void renderScene()
|
||||
{
|
||||
|
||||
changeVehicleSpeed();
|
||||
cameraMatrix = createCameraMatrix();
|
||||
perspectiveMatrix = Core::createPerspectiveMatrix();
|
||||
|
||||
// changeVehicleSpeed();
|
||||
|
||||
int startTime, endTime;
|
||||
startTime = glutGet(GLUT_ELAPSED_TIME);
|
||||
|
Loading…
Reference in New Issue
Block a user