opengl - OpenGL:在计算着色器中旋转lookAt相机轴
问题描述
我正在制作光线行进演示,但在旋转相机轴时遇到问题。我正在使用四元数来旋转鼠标并将光线投射到那个方向就好了。问题的一个例子:如果我在 yaw 上转动 180° 并按W它会向后而不是forward。我尝试了很多东西,比如翻译,但对我来说没有成功。
我想知道这是否是为光线投射算法创建移动相机的错误方法。
查看函数:
vec4 rotor = quatRotor(vec3(0., -1., 0.), -iMouse.x);
rotor = quatMult(rotor, quatRotor(vec3(1., 0., 0.), iMouse.y));
vec3 f = normalize(center - eye);
vec3 r = normalize(cross(vec3(0.0, 1.0, 0.0), f));
vec3 u = normalize(cross(f, r));
float fov = radians(45);
vec4 dir = vec4(normalize(uv.x * r + uv.y * u + f * fov), 1.0);
mat4 m;
m[ 0 ][ 0 ] = r.x;
m[ 0 ][ 1 ] = r.y;
m[ 0 ][ 2 ] = r.z;
m[ 1 ][ 0 ] = u.x;
m[ 1 ][ 1 ] = u.y;
m[ 1 ][ 2 ] = u.z;
m[ 2 ][ 0 ] = -f.x;
m[ 2 ][ 1 ] = -f.y;
m[ 2 ][ 2 ] = -f.z;
m[ 3 ][ 0 ] = center.x;
m[ 3 ][ 1 ] = center.y;
m[ 3 ][ 2 ] = center.z;
m[ 3 ][ 3 ] = 1.0;
dir = m * dir;
dir.xyz = quatRotate(dir.xyz, rotor);
return dir;
eye变量保存统一的WASD键值。它们的初始化值分别vec3(0, 0, -1)
用于 xyz。中心是uv变量是我正在绘制的当前像素
。vec3(0,0,0)
解决方案
推荐阅读
- php - 默认 XML 和 PHP 文件名
- ios - 如何在 AR Kit 中将 UIImage 添加到场景中
- r - Base R 中的旋转箭头
- javascript - 分派动作后不显示道具
- android - 所有 Http 请求的时间间隔(使用改造和 Rx Java 2)
- python - 在 Python 3.6 中计算多边形和 shapefile 之间的重叠
- ios - UITableViewCell 委托不起作用
- reactjs - React Native Crash Undefined 不是一个对象(评估 'Sn[e]')
- vhdl - 使用 vhdl 的 FIFO
- javascript - 比较 div id 和字符串