2012-03-07 95 views
0

我有以下代碼將快照發送到framebuffer。我驗證了framebuffer能夠正常工作,並且相機正確對着物體。我曾經正確地完成了圖片的製作,但它是基於錯誤的代碼,使用了錯誤的視錐體。所以我決定開始新鮮(與視錐)。OpenGL截錐體,透視

目的在中間居中且是32×32塊與每個塊的2×2,所以64×64

我的距離爲100和我的視口是128×256。我的平截頭體是1到1000.0。

我對Opengl比較陌生,所以我無法完全理解frustrums和觀點的概念。

我根本沒有看到照片。

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(); 
} 

編輯:我試過只使用glFrustum或glPerspective。沒有運氣。

+2

你爲什麼要調用'glFrustum()'和'gluPerspective()'?他們做同樣的事情。你可能應該刪除其中的一個。 (另外,它的拼寫是「截錐體」,而不是「frustrum」,我犯了同樣的錯誤!)你的近剪裁平面是1.0,而不是0.1。我經常要做的第一件事就是將清晰的顏色變成黃色或洋紅色等令人討厭的東西,並確保它清除整個事物。然後,我開始添加對象並確保它們位於正確的位置。 – user1118321 2012-03-07 17:32:22

回答

4

您不應該同時使用glFrustum和gluProjection。它們都是設置投影矩陣的操作,如果將它們一起使用,則會將它們相乘並得到奇怪的結果。通常,您只需將glFrustum gluProjection應用於單位矩陣,而不是二者。

如果這樣不能解決問題,那麼您的NEAR,FAR,WIDTH和HEIGHT值是什麼? 還要確保你沒有爲你的屏幕比例(一個常見的錯誤)做整數除法。

+0

我的近值爲1.0,遠至1000.0,寬度爲128,高度爲256 – RobotRock 2012-03-07 18:14:44

+1

這確實是一個整數除以透視變量* rat *。感謝您的洞察! – RobotRock 2012-03-07 18:18:39