2012-09-14 57 views
3

當我調整窗口大小時,我不想縮放內容,但只是爲了增加視圖端口大小。我發現這一點,而在我的問題幾乎相同的stackoverflow(http://stackoverflow.com/questions/5894866/resize-viewport-crop-scene)上搜索。不過,我很困惑,什麼樣的縮放設置到何地,我嘗試了與1.0F但當時什麼也沒有顯示在所有:■如何在不縮放其內容的情況下調整opengl視口大小

這是目前調整功能代碼不結垢:

void GLRenderer::resize() { 
    RECT rect; 
    int width, height; 
    GLfloat aspect; 

    GetClientRect(hWnd, &rect); 
    width = rect.right; 
    height = rect.bottom; 

    if (height == 0) { 
     height = 1; 
    } 

    aspect = (GLfloat) width/height; 

    glViewport(0, 0, width, height); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluPerspective(45.0, aspect, 0.1, 100.0); 
    glMatrixMode(GL_MODELVIEW); 
} 

而我的功能來呈現一個簡單的三角形:

void GLRenderer::render() { 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glLoadIdentity(); 
    glTranslated(0, 0, -20); 

    glBegin(GL_TRIANGLES); 
     glColor3d(1, 0, 0); 
     glVertex3d(0, 1, 0); 
     glVertex3d(1, -1, 0); 
     glVertex3d(-1, -1, 0); 
    glEnd(); 

    SwapBuffers(hDC); 
} 

回答

2

可以更改Y(高度)的縮放與「視場角」參數gluPerspective。在你的代碼中是45度的那個。因爲它現在總是45度,你總是會得到相同的視角(用y表示)。如何將該值作爲窗口高度的函數進行更改並不明顯。線性關係將失敗的大值(180度以上)。我會嘗試使用arctan(height/k),其中'k'類似於500.

請注意,當您在x中擴展窗口時,您已經獲得了您想要的是)。那就是,你有更廣闊的視野。這是因爲您將方面(第二個參數)更改爲取決於x和y之間比率的值。

高度和寬度是以像素爲單位測量的,所以值1不好。

請注意,您使用的是舊版OpenGL。有關更多信息,請參見Legacy OpenGL

+0

啊哈,我得到它的工作使用: 雙fovy =身高/ 45.0; gluPerspective(fovy,aspect,0.1,100.0); 謝謝你的幫助! :) – nevernew

相關問題