私はフレームバッファにスナップショットをとる次のコードを持っています。フレームバッファが正しく動作し、カメラがオブジェクトに正しく向き合っていることを確認しました。私は正しく写真を撮っていましたが、間違った錐台を使って、間違ったコードに基づいていました。だから私は新鮮な(錐台で)始めることにしました。OpenGL frustum、perspective
目的は、中央を中心と各ブロック2×2 32×32ブロックであるので、64 * 64
私の距離は100であり、私のビューポートが128x256です。私の錐台は1から1000.0です。
私はOpenGLには比較的新しいので、欲求不満と考え方の概念を完全に理解することができません。
写真が全くありません。
saveGLState();
const int nrPics = 360/DEGREES_BETWEEN_PICTURES;
for (int i = 0; i < nrPics; i++) {
catchFbo->bind();
glViewport(0, 0, PICTURE_WIDTH, PICTURE_HEIGHT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
float rat = PICTURE_WIDTH/PICTURE_HEIGHT;
glFrustum(- 1.0, + 1.0, - rat, + rat, 1.0, 1000.0);
gluPerspective(90.0f,rat,CAPT_FRUSTRUM_NEAR,CAPT_FRUSTRUM_FAR);
glColorMask(true, true, true, true);
glClearColor(0,0,0,0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glEnable(GL_MULTISAMPLE);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
drawScreenshot(i);
catchFbo->release();
QImage catchImage = catchFbo->toImage();
catchImage.save("object/test" + QString::number(i) + ".png");
}
glDisable(GL_MULTISAMPLE);
restoreGLState();
void VoxelEditor::saveGLState()
{
glPushAttrib(GL_ALL_ATTRIB_BITS);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
}
void VoxelEditor::restoreGLState()
{
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
glPopAttrib();
}
EDIT:glFrustumまたはglPerspectiveのみを使用してみました。運がない。
なぜあなたは 'glFrustum()'と 'gluPerspective()'の両方を呼び出していますか?彼らは同じことをする。おそらくそれらのうちの1つを削除するべきです。 (私は同じミスを犯しました!)あなたの近くのクリッピングプレーンは、1.0ではなく0.1です。私がいつも試してやることの最初のことは、クリアカラーを黄色やマゼンタのような不快なものに変更し、それが全体をクリアしていることを確認することです。次に、オブジェクトを追加し、それらが正しい場所にいることを確認します。 – user1118321