Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 计算模型的上方向向量_Opengl - Fatal编程技术网

Opengl 计算模型的上方向向量

Opengl 计算模型的上方向向量,opengl,Opengl,计算上方向向量 这是我的密码: Vector3f CameraUpVector() const { Vector3f cameraDirection = m_cameraTarget - m_cameraPosition; cameraDirection = cameraDirection.Normalize(); //////////// Vector3f cameraUp = cameraDirection.Cross(Vector3f(1.0f, 0.0f, 0.0f)); return

计算上方向向量

这是我的密码:

Vector3f CameraUpVector() const
{
Vector3f cameraDirection = m_cameraTarget - m_cameraPosition;

cameraDirection = cameraDirection.Normalize();
////////////
Vector3f cameraUp = cameraDirection.Cross(Vector3f(1.0f, 0.0f, 0.0f));
return cameraUp;
}
//////////
Vector3f cameraUp = CameraUpVector();
///////////////
p.SetCamera(m_cameraPosition , m_cameraTarget , cameraUp);
这个计算可以吗


如果没有,我如何更改它?

否,您将发现相机围绕其前向矢量旋转。我将对您的代码进行如下修改(假设右手坐标系和世界上方向向量为(0,1,0)):


请注意,您应该处理相机目标位于相机位置正上方或正下方的特殊情况(通过防止发生这种情况或记录最后一个有效的相机上方向向量,并在这种情况下使用它而不是世界上方向向量)

现在我的目标是(0,0,0),camrea位置是(0500,0)上方向向量是(0,1),我什么也看不见。我会试试这个函数。我的目标是从上到下转换模型。这是可能的与此功能您更正或我应该改变其他东西吗?非常感谢!!!这就是我提到的“特例”。我在回答中确实做了一些假设。在你们的世界里,一般的“向上”向量是什么?如果Y向上,而你正好在目标上方,那么就没有一个“正确”的答案。你可以在Y=0的平面上拾取任何向量。我的向量up是:Vector3f up(0.0,1.0f,0.0f);在这之后,我按照我写的和p.SetCamera(m_cameraPosition,m_cameraTarget,cameraUp)设置位置和目标;但我还是什么也看不见问题是上方向向量与相机航向是共线的。你需要使用一个垂直于航向的矢量-在你的例子中(1,0,0),(0,0,1),或者任何y=0且单位长度的矢量都可以。你的意思是将矢量3f向上更改(1.0,0.0f,0.0f)?用你写的函数?
Vector3f CameraUpVector() const
{
  Vector3f cameraDirection = m_cameraTarget - m_cameraPosition;
  Vector3f cameraRight = cameraDirection.Cross(Vector3f(0.0f, 1.0f, 0.0f));
  Vector3f cameraUp = cameraRight.Cross(cameraDirection );

  return cameraUp.Normalize();
}