【问题标题】:Opengl Viewing matrix based on inputs基于输入的OpenGL查看矩阵
【发布时间】:2020-08-15 06:26:54
【问题描述】:

我通过用户输入获得了相机位置、相机瞄准点和向上矢量。用户为 x y z 每个输入 3 个 double。现在我正在尝试找到 z 向量和 y 向量,然后我可以对其进行归一化。我只是在努力弄清楚如何找到这些值,而且我不完全确定用户输入在坐标方面的实际含义。我将每个输入存储为 Vector3d

【问题讨论】:

    标签: c++ opengl matrix vector


    【解决方案1】:

    我也需要一个解决方案,我最终使用了一个名为 gl-matrix 的 JavaScript 库,它带有一个 targetTo 辅助函数。

    这是它的源代码: http://glmatrix.net/docs/mat4.js.html#line1708

    这是我将其转换为 C 的尝试。
    免责声明:我没有编译这个,所以如果你发现语法错误,请在 cmets 中提及。

    #include <math.h>
    
    float *targetTo(float *out, float *eye, float *target, float *up) {
    
      float eyex = eye[0],
    
        eyey = eye[1],
    
        eyez = eye[2],
    
        upx = up[0],
    
        upy = up[1],
    
        upz = up[2];
    
      float z0 = eyex - target[0],
    
        z1 = eyey - target[1],
    
        z2 = eyez - target[2];
    
      float len = z0 * z0 + z1 * z1 + z2 * z2;
    
      if (len > 0) {
    
        len = 1 / sqrt(len);
    
        z0 *= len;
    
        z1 *= len;
    
        z2 *= len;
    
      }
    
      float x0 = upy * z2 - upz * z1,
    
        x1 = upz * z0 - upx * z2,
    
        x2 = upx * z1 - upy * z0;
    
      float = x0 * x0 + x1 * x1 + x2 * x2;
    
      if (len > 0) {
    
        len = 1 / sqrt(len);
    
        x0 *= len;
    
        x1 *= len;
    
        x2 *= len;
    
      }
    
      out[0] = x0;
    
      out[1] = x1;
    
      out[2] = x2;
    
      out[3] = 0;
    
      out[4] = z1 * x2 - z2 * x1;
    
      out[5] = z2 * x0 - z0 * x2;
    
      out[6] = z0 * x1 - z1 * x0;
    
      out[7] = 0;
    
      out[8] = z0;
    
      out[9] = z1;
    
      out[10] = z2;
    
      out[11] = 0;
    
      out[12] = eyex;
    
      out[13] = eyey;
    
      out[14] = eyez;
    
      out[15] = 1;
    
      return out;
    
    }
    

    注意:您可能想使用double 而不是float
    或者,如果您使用的 std::vector&lt;int&gt; 也可以用作参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-26
      • 1970-01-01
      相关资源
      最近更新 更多