【发布时间】:2017-08-25 03:10:16
【问题描述】:
我有一个运行良好的 Arcball 实现。通常在opengl中,标准相机面向-Z,这意味着XY平面平行于观察平面。
glm::vec3 Arcball::_plane2sphere(glm::vec2 &v)
{
glm::vec2 f = v;
glm::vec3 r;
double lenSquared;
double len;
f /= _radius;
lenSquared = f.x * f.x + f.y * f.y;
len = sqrt(lenSquared);
if (lenSquared > 1.0)
{
r = glm::vec3(f.x / len,f.y / len, 0.0f );
}
else
{
double fz = sqrt(1 - lenSquared);
r = glm::vec3(f.x, f.y, fz);
}
return r;
}
现在,如果我将相机更改为面 -Y,这意味着 XZ 平行于观察平面,相同的轨迹球实现并不适用。我不得不改变我的轨迹球实现如下。 'Y' 取代 'Z',反之亦然。
glm::vec3 Arcball::_plane2sphere(glm::vec2 &v)
{
glm::vec2 f = v;
glm::vec3 r;
double lenSquared;
double len;
f /= _radius;
lenSquared = f.x * f.x + f.y * f.y;
len = sqrt(lenSquared);
if (lenSquared > 1.0)
{
r = glm::vec3(f.x / len, 0.0f, f.y / len);
}
else
{
double fz = sqrt(1 - lenSquared);
r = glm::vec3(f.x, fz, f.y);
}
return r;
}
虽然这对我来说确实有意义,但我想知道如果我有一个非常随意的相机会怎样。当我有一个任意相机时,我的对象的旋转是不直观的。
感谢任何帮助! 谢谢!
【问题讨论】:
标签: opengl camera opengl-4 rotational-matrices arcball