代码之家  ›  专栏  ›  技术社区  ›  kellogs

没有lookat*函数的点平面碰撞

  •  0
  • kellogs  · 技术社区  · 15 年前

    据我所知,建议使用glTranslate/glRotate来支持glutat。我不打算寻找明显的硬件与软件计算模式之外的原因,而是随波逐流。然而,这让我有些头痛,因为我不知道如何有效地阻止相机突破墙壁。我只对点平面交点感兴趣,而不是AABB或其他任何东西。

    由于无法从GPU土地上获得所需的新坐标,因此需要在CPU土地上手工计算。每一个镜头的移动。。。:(

    似乎有必要将当前的旋转保留在3个轴的旁边,并将相同的旋转用于平移。我的程序中没有使用缩放。我的问题:

    1-上述推理是否有缺陷?怎样? 2-如果没有,必须有一种方法来避免这种重新计算。 在我看来 http://www.glprogramming.com/red/appendixf.html

    谢谢

        // Retains the current modelview matrix
    //glPushMatrix();
    glGetFloatv(GL_MODELVIEW_MATRIX, m_vt16CurrentMatrixVerts);
    //glPopMatrix();
    

    mu vt16CurrentMatrixVerts是一个float[16],其中填充了0.f或8.67453e-13或类似的值。我在哪里搞砸了?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Calvin1602    15 年前

    gluLookAt是一个非常方便的函数,绝对没有性能损失。没有理由不使用它,最重要的是,没有“硬件对软件”的考虑。如Mk12所述,glRotatef也是在CPU上完成的。GPU部分是:gl\u Position=ProjectionMatrix x ViewMatrix x ModelMatrix x vert。

    “使用glTranslates和glRotates意味着视点保持静止”->对于gluLookAt来说是一样的

    “at(0,0,0)表示简单”->不表示简单,这是事实。但是,这(0,0,0)在摄影机坐标系中。这是有意义的:相对于相机,相机在原点。。。

    • 在世界空间中跟踪光线:光线从摄影机位置(在世界空间中)开始,然后转到(eyeCenter-eyePos).normalize()。几何体必须从模型空间转换到世界空间。

    • 首先,您的游戏世界可能仍然是:模型矩阵可能总是标识。因此,将其几何体从模型转换到世界空间相当于什么都不做。

    请注意,我所说的都是标准技术。没有黑客或其他奇怪的东西,只有数学:)