我有一個有一個簡單的OpenGL程序,它會調整相機設置如下:爲什麼QMatrix4x4 ::的lookAt()導致倒掛相機
void
SimRenderer::render() {
glDepthMask(true);
glClearColor(0.5f, 0.5f, 0.7f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glFrontFace(GL_CW);
glCullFace(GL_FRONT);
glEnable(GL_CULL_FACE);
glEnable(GL_DEPTH_TEST);
QMatrix4x4 mMatrix;
QMatrix4x4 vMatrix;
QMatrix4x4 cameraTransformation;
cameraTransformation.rotate(mAlpha, 0, 1, 0); // mAlpha = 25
cameraTransformation.rotate(mBeta, 1, 0, 0); // mBeta = 25
QVector3D cameraPosition = cameraTransformation * QVector3D(0, 0, mDistance);
QVector3D cameraUpDirection = cameraTransformation * QVector3D(0, 1, 0);
vMatrix.lookAt(cameraPosition, QVector3D(0, 0, 0), cameraUpDirection);
mProgram.bind();
mProgram.setUniformValue(mMatrixUniformLoc, mProjMatrix * vMatrix * mMatrix);
// render a grid....
}
但結果卻是顛倒的相機!
! 1
當我將視圖矩陣設置爲: QVector3D cameraUpDirection = cameraTransformation * QVector3D(0,-1,0);
它的工作原理!但是當我的真實向上方向爲正Y時,爲什麼我需要將我的向上方向設置爲負Y?
完整的類此:https://code.google.com/p/rapid-concepts/source/browse/trunk/simviewer/simrenderer.cpp
其他信息:我渲染結合一個FBO的小部件QQuickFramebufferObject調用渲染函數之前浮出水面。不要以爲這將是一個問題,但無論如何。這完全不是一個紋理問題,沒有任何紋理可以翻轉等。似乎相機正在以相反的方式解釋向上的方向!
http://doc.qt.digia.com/qt-maemo/qmatrix4x4.html#lookAt
更新:
所以因爲使用LOOKAT和cameraTransformations兩者一起可能不工作我想:
QMatrix4x4 mMatrix;
QMatrix4x4 vMatrix;
QMatrix4x4 cameraTransformation;
cameraTransformation.rotate(mAlpha, 0, 1, 0); // 25
cameraTransformation.rotate(mBeta, 1, 0, 0); // 25
cameraTransformation.translate(0, 0, mDistance);
vMatrix = cameraTransformation.inverted();
產生完全相同的結果:)
我認爲相機上軸nee ds以某種方式被解釋。
好吧,我嘗試單獨使用cameraTransformation,但它仍然產生完全相同的結果(請參閱主要問題上的編輯)。我想知道現在如何決定相機的上軸。 –