English 中文(简体)
示范研究 表格-C++,开放式GL
原标题:Model lookAt Matrix - C++, OpenGL

我设法开展了一个调查。 在一台摄像机中,由于有许多消息来源称了这一点。

我一直在试图从摄像机中翻译这一内容。 模型研究 页: 1 我似乎不能让它发挥作用,我认为我对如何构建一个矩阵有一点误解。 我的假设是,我不需要改变对模型的翻译,以便看一看问题,因为我的立场应该保持不变。

首先是相关的法典。 监督员的职能应参照翻译(即:职位=方向)的相同参照基准。 然而,有一些问题,我用屏幕显示这些问题。 它没有检查方向1.0f或1.0f,而是微不足道。

void TransformMatrix3D::lookAtRadians(float atX, float atY, float atZ, float toZRadians)
{
    Vector3D direction(atX - x(), atY - y(), atZ - z());
    direction.normalize();

    Vector3D up(0.0f, 1.0f, 0.0f);

    Vector3D right(direction.crossProduct(up));
    right.normalize();
    up = direction.crossProduct(right);

    mMatrix[0] = right.x();
    mMatrix[4] = right.y();
    mMatrix[8] = right.z();
    mMatrix[1] = up.x();
    mMatrix[5] = up.y();
    mMatrix[9] = up.z();
    mMatrix[2] = direction.x();
    mMatrix[6] = direction.y();
    mMatrix[10] = direction.z();
}

这里是交叉产品,如果功能不正确,则是正常的。

Vector3D Vector3D::crossProduct(const Vector3D& rightVector) const
{
    const float NEW_X(y() * rightVector.z() - z() * rightVector.y());
    const float NEW_Y(z() * rightVector.x() - x() * rightVector.z());
    const float NEW_Z(x() * rightVector.y() - y() * rightVector.x());

    return Vector3D(NEW_X, NEW_Y, NEW_Z);
}


void Vector3D::normalize()
{
    float length(x() * x() + y() * y() + z() * z());

    if(fabs(length) == 1.0f)
        return;

    length = 1.0f / sqrt(length);
    moveTo(x() * length, y() * length, z() * length);
}

这里是描述我问题的一些屏幕。 白人领域指 look点。

我在Z axis(将分别建立mMatrix[12]mMatrix[13]mMatrix[14]至0.0f、0.0f、-10.0f>。 表格的其余部分是身份。 我已核实情况是这样,我将用来证明问题。

放映:

如果我转而去看 仅仅在X和Y轴线上,看着 似乎工作正确。

放映:

放映:

However, when I combine the two (i.e. move the lookAt point so both X and Y aren t 0.0f), some Z rotation is applied, which shouldn t happen since UP x DIRECTION should always result in the RIGHT.y() being 0.0f. The Z rotation will be applied using toZRadians (which is not yet implemented).

筛查:

我还发现,如果我这样去找工作的话。 在Y轴线下,该模型仍然沿循着线。 当时,它实际上围绕全球X轴(或至少相当于X轴)进行轮换。

放映:

现在,看上去 此时此刻,该模式有正确的Y轮轮换,但X轮轮换没有改变。 我在这一点上检查了我的病媒,我发现UP.y()是负面的,它不可能(它可以是0.0f,但不是消极的),因为DIRECTION和RLI应当总是以同样的方式(即从DIRECTION到RLI的锁定)。 唯一可能消极的办法是,如果权利是实际的LEFT的话。

放映:

该模式在全球X轴线周围仍保持轮换,就像在展望时一样。 当时是+Z。

放映:

正如我提到的那样,这很可能是对工作方式的误解,但可能是其他的。 我看上去了几天,我似乎只能发现照相看光。 在职能方面。 任何解释汇总表中轴心的来源都导致该职位上提出的代码。

最佳回答

Ah,我发现问题。 因此,我忽略了这一点。

我的矩阵:

mMatrix[0] = right.x();
mMatrix[4] = right.y();
mMatrix[8] = right.z();
mMatrix[1] = up.x();
mMatrix[5] = up.y();
mMatrix[9] = up.z();
mMatrix[2] = direction.x();
mMatrix[6] = direction.y();
mMatrix[10] = direction.z();

主要记忆栏目。 应当:

mMatrix[0] = right.x();
mMatrix[1] = right.y();
mMatrix[2] = right.z();
mMatrix[4] = up.x();
mMatrix[5] = up.y();
mMatrix[6] = up.z();
mMatrix[8] = direction.x();
mMatrix[9] = direction.y();
mMatrix[10] = direction.z();

而这项工作是完美的。 极具讽刺意味的是,我甚至想检查这一点。 这也解释了轴心中激动的反动。

问题回答

暂无回答




相关问题
Undefined reference

I m getting this linker error. I know a way around it, but it s bugging me because another part of the project s linking fine and it s designed almost identically. First, I have namespace LCD. Then I ...

C++ Equivalent of Tidy

Is there an equivalent to tidy for HTML code for C++? I have searched on the internet, but I find nothing but C++ wrappers for tidy, etc... I think the keyword tidy is what has me hung up. I am ...

Template Classes in C++ ... a required skill set?

I m new to C++ and am wondering how much time I should invest in learning how to implement template classes. Are they widely used in industry, or is this something I should move through quickly?

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

typedef ing STL wstring

Why is it when i do the following i get errors when relating to with wchar_t? namespace Foo { typedef std::wstring String; } Now i declare all my strings as Foo::String through out the program, ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

Window iconification status via Xlib

Is it possible to check with the means of pure X11/Xlib only whether the given window is iconified/minimized, and, if it is, how?

热门标签