opengl - 在OpenGL中围绕XZ平面上的一个点旋转相机
问题描述
我正在尝试在 OpenGL 中实现一个可以移动和旋转的相机。我希望相机围绕相机当前正在查看的 XZ 平面上的一个点(Y 向上)旋转(即 XZ 平面和相机方向的交点)。实现这一目标的最佳方法是什么?
解决方案
假设你想围绕平面P(x, 0, z)
上的一个点旋转你的相机XZ
一种方法是调用glRotatef(theta, px, py, pz)
which 将当前矩阵乘以旋转矩阵(theta
围绕向量的角度旋转(px, py, pz)
)
由于您想围绕任意点而不是原点旋转,因此您需要先平移轴:
glTranslatef(x, 0, z);
glRotatef(thetax, 1, 0, 0);
glRotatef(thetay, 0, 1, 0);
glRotatef(thetaz, 0, 0, 1);
glTranslatef(-x, 0, -z);
或者,您可以使用gluLookAt(cx, cy, cz, px, py, pz, ux, uy, uz)
,它为摄像机创建一个视图矩阵,该矩阵以(cx, cy, cz)
指向(px, py, pz)
“(ux, uy, uz)
向上”的矢量(摄像机的滚动)
我想你希望你的相机到你的点的距离保持不变,所以在球坐标系中表达你的相机坐标会很方便
x = rsin(θ)cos(φ)
y = rsin(θ)sin(φ)
z = rcos(θ)
推荐阅读
- vue.js - 如何将 VueJS UMD 构建安装到现有的 HTML 上?
- javascript - 如何使用“永久”菜单栏加载我的 html 文件 | 电子
- python - 替换一行熊猫数据框中的值时,df.replace 不起作用
- android - Android 应用程序支持多种语言
- swift - 如何设置客户价格在应用程序购买中未设置等级价格我手动设置价格
- java - 为什么可以用不带入参的方法代替Function
- file - Perl CGI 脚本错误地读取带有反斜杠的文本文件内容
- c++ - 使用 constexpr 过度渴望 C++ 联合零初始化
- performance - 虚拟机上的 IBM Portal 9 服务器(VM 映像)
- css - 封面有 4 张不同尺寸的图片?