glm::radians
时间: 2024-04-28 15:09:51 浏览: 206
`glm::radians` 是一个函数,它用于将给定的角度转换为弧度。它接受一个浮点数参数,该参数表示以度为单位的角度,并返回一个浮点数,该浮点数表示相应的弧度值。例如,`glm::radians(90.0f)` 返回 1.57079633,表示 90 度的弧度值。它是 GLM 数学库中的一个函数,用于进行数学计算。
相关问题
inline void Revolve(float fwdDist, float yawDifDeg, float pitchDifDeg) { float pitchDifRad = glm::radians(-pitchDifDeg); float yawDifRad = glm::radians(-yawDifDeg); constexpr float PITCH_LIMIT = glm::radians(60.f); pitchRad += pitchDifRad; // avoid deadlock if (pitchRad > PITCH_LIMIT) pitchRad = PITCH_LIMIT; else if (pitchRad < -PITCH_LIMIT) pitchRad = -PITCH_LIMIT; yawRad += yawDifRad; // avoid reaching float limit if (yawRad > glm::pi<float>()) yawRad -= 2 * glm::pi<float>(); else if (yawRad < -glm::pi<float>()) yawRad += 2 * glm::pi<float>(); auto center = pos + fwdDist * forward; { float cy = cosf(yawRad), sy = sinf(yawRad); float cp = cosf(pitchRad), sp = sinf(pitchRad); forward.x = cp * cy, forward.y = sp, forward.z = -cp * sy; forward = glm::normalize(forward); } right = glm::normalize(glm::cross(forward, worldUp)); up = glm::normalize(glm::cross(right, forward)); pos = center - fwdDist * forward; view[0][0] = right.x; view[1][0] = right.y; view[2][0] = right.z; view[0][1] = up.x; view[1][1] = up.y; view[2][1] = up.z; view[0][2] = -forward.x; view[1][2] = -forward.y; view[2][2] = -forward.z; view[3][0] = -glm::dot(right, pos); view[3][1] = -glm::dot(up, pos); view[3][2] = glm::dot(forward, pos); view[3][3] = 1.f; view[0][3] = view[1][3] = view[2][3] = 0; } 使用该方法实现当鼠标按下且同时移动时,相机旋转
要实现当鼠标按下且同时移动时相机旋转,你可以使用 GLFW 库的鼠标移动回调函数来获取鼠标的偏移量,然后根据偏移量来更新相机的旋转角度。以下是一个示例代码,说明如何在上述方法中实现该功能:
首先,在你的代码中添加一个全局变量来追踪鼠标的上一次位置:
```cpp
double lastX = 0.0;
double lastY = 0.0;
bool firstMouse = true;
```
然后,在你的 GLFW 鼠标移动回调函数中添加以下代码:
```cpp
void mouse_callback(GLFWwindow* window, double xpos, double ypos)
{
if (firstMouse)
{
lastX = xpos;
lastY = ypos;
firstMouse = false;
}
float xoffset = xpos - lastX;
float yoffset = lastY - ypos; // 注意这里的坐标系,需要反过来计算
lastX = xpos;
lastY = ypos;
// 根据偏移量更新相机的旋转角度
Revolve(1.0f, xoffset, yoffset);
}
```
在这段代码中,我们首先检查 `firstMouse` 变量,如果是第一次移动鼠标,则将当前鼠标位置赋值给 `lastX` 和 `lastY`。然后,我们计算当前鼠标位置与上一次鼠标位置的偏移量 `xoffset` 和 `yoffset`。最后,我们将当前鼠标位置更新为上一次鼠标位置,并调用 `Revolve` 方法来根据偏移量更新相机的旋转角度。
记得在 `main` 函数中设置鼠标移动回调函数:
```cpp
glfwSetCursorPosCallback(window, mouse_callback);
```
这样,当鼠标按下且同时移动时,`mouse_callback` 函数将被触发,并更新相机的旋转角度。
glm::perspective
glm::perspective是一个用于创建透视投影矩阵的函数,通常用于OpenGL和其他3D图形库中。透视投影矩阵是一种将三维场景投影到二维平面上的方式,可以创建出逼真的三维效果。该函数需要四个参数:视野角度、宽高比、近截面和远截面,它们分别表示了视野的大小和深度范围。函数的返回值是一个4x4的矩阵,可以将其应用于OpenGL的投影矩阵中,以便在渲染时对场景进行正确的投影。
下面是一个使用glm::perspective创建透视投影矩阵的示例代码:
```c++
glm::mat4 projection = glm::perspective(glm::radians(45.0f), 800.0f / 600.0f, 0.1f, 100.0f);
```
上述代码将创建一个视野角度为45度、宽高比为800:600、近截面为0.1、远截面为100的透视投影矩阵,将其存储在projection变量中。
阅读全文