我正在尝试通过鼠标移动来更改相机 View ,并希望相机以轨迹球的方式围绕原点移动而不进入场景;所以有点像圆顶一样的景色。以下工作令人满意地获得了眼睛坐标并制作了这个半弧球 View 。我硬编码了一个条件,以便我无法在场景下查看。这种情况的结果是,相机不会进入场景下方,而是会放大到中心。我无法想象如何阻止相机进行这种“变焦”。当我到达穹顶 View 的最低部分时,我希望只能向左或向右移动。距离是恒定的。任何指导?void onMotion(int x, int y) { camX = distance * -sinf(x*(M_PI / 180)) * cosf((y)*(M_PI / 180)); camY = distance * -sinf((y)*(M_PI / 180)); camZ = -distance * cosf((x)*(M_PI / 180)) * cosf((y)*(M_PI / 180)); if (camY < 4) camY = 4; glutPostRedisplay();} 最佳答案 我认为这是因为当 camY 您不仅需要设置 camY 变量,还需要使用新的 y 坐标重新计算所有内容。您可以将 camY 设置为 4,然后将 camX 和 camZ 推回新方向的适当距离。像这样的东西:if (camY < 4){ camY = 4; // Normalize the new vector mag = sqrt(camX * camX + camY * camY + camZ * camZ); camX /= mag; camY /= mag; camZ /= mag; // Now push it out to distance camX *= distance; camY *= distance; camZ *= distance;}关于c - Arcball 相机变焦,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47235116/ 10-13 00:31