Kamera Positon begrenzen
-
Hallo
ich habe möchte meine Camera in OpenGl begrenzen also das ich nicht ganz frei bewegen kann das ab ich mit den hoch und runterschauen schon gemacht.
Der Code#include "controlls.h" //Globel variables glm::vec3 position = glm::vec3( 0, 0, 5 ); //position float horizontalAngle = 3.14f; // horizontal angle : toward -Z float verticalAngle = 0.0f; // vertical angle : 0, look at the horizon float initialFoV = 45.0f; // Initial Field of View float speed = 3.0f; // 3 units / second float mouseSpeed = 0.05f; //mouseSpeed glm::mat4 ViewMatrix; //ViewMmartix glm::mat4 ProjectionMatrix; //ProjectionMatrix glm::mat4 getProjectionMatrix(){ return ProjectionMatrix; } glm::mat4 getViewMatrix(){ return ViewMatrix; } void computeMatricesFromInputs(){ static double lastTime = glfwGetTime(); //Wird nur ein mal am start aufgerufen double currentTime = glfwGetTime(); float deltaTime = float(currentTime - lastTime); //screen size GLFWvidmode desktopMode; glfwGetDesktopMode( &desktopMode); int height = desktopMode.Height; int width = desktopMode.Width; int xpos, ypos; //x and y pos of the mouse glfwGetMousePos(&xpos, &ypos); //get the mouse pos glfwSetMousePos(height/2, width/2); //set the mouse to the middle of the screen horizontalAngle += mouseSpeed * deltaTime * float(height/2 - xpos); verticalAngle += mouseSpeed * deltaTime * float(width/2 -ypos); if(verticalAngle > 0.5){ verticalAngle = 0.5; }else if(verticalAngle < -0.25){ verticalAngle = -0.25; } glm::vec3 direction( cos(verticalAngle) * sin(horizontalAngle), sin(verticalAngle), cos(verticalAngle) * cos(horizontalAngle) ); // Right vector glm::vec3 right = glm::vec3( sin(horizontalAngle - 3.14f/2.0f), 0, cos(horizontalAngle - 3.14f/2.0f) ); // Up vector : vertical to both direction and right glm::vec3 up = glm::cross( right, direction ); //Position if (glfwGetKey( 'W' ) == GLFW_PRESS){ position += direction * deltaTime * speed; } // Move backward if (glfwGetKey( 'S' ) == GLFW_PRESS){ position -= direction * deltaTime * speed; } // Strafe right if (glfwGetKey( 'D' ) == GLFW_PRESS){ position += right * deltaTime * speed; } // Strafe left if (glfwGetKey( 'A' ) == GLFW_PRESS){ position -= right * deltaTime * speed; } float FoV = initialFoV - (2+speed) * glfwGetMouseWheel(); if(FoV >= 65.0f){ FoV = 65.0f; }else if(FoV <= 35.0f){ FoV = 35.0f; } // Projection matrix : 45° Field of View, 4:3 ratio, display range : 0.1 unit <-> 100 units ProjectionMatrix = glm::perspective(FoV, 4.0f / 3.0f, 0.1f, 100.0f); // Camera matrix ViewMatrix = glm::lookAt( position, // Camera is here position+direction, // and looks here : at the same position, plus "direction" up // Head is up (set to 0,-1,0 to look upside-down) ); lastTime = currentTime; }
Aber wie mache ich das jetzt mit der hohe also das ich nicht weiter nach unten kann also auf den Boden stehe. Das müsste ich ja über der Variable "position" erreichen aber wie lese ich die x,y,z werte aus?
Eigentlich kann das doch nicht schwer sein oder?
Vllt bin ich einfach grade ein bisschen Brain afk oder so. Komm aber grade echt nicht drauf also wäre cool wenn jemand helfen kann.
-
Doch das kann recht kompliziert werden.
Wenn du willst dass man auf dem Boden steht brauchst du eine Kollisionsabfrage.
Und das kommt dann drauf an wie dein Boden aufgebaut ist.
-
Ja das ist ja nicht mein Problem also ich möchte erst mal mein Boden grade haben also auf 0 aber wie frage ich ab wo grade die Kamera ist?
-
Ähm das ist doch in "position" gespeichert ?
Einfach "position.y" sollte reichen.
-
Ok. Ich war wohl Brain Afk