簡體   English   中英

OpenGL ES - iOS 中的拉伸圖

[英]Stretched Drawing in OpenGL ES - iOS

我正在嘗試使用 OpenGL ES 繪制一個簡單的圓圈。 問題是圓圈被垂直拉伸。 它看起來更像是一個橢圓而不是一個圓。 有人能指出哪里出了問題嗎?

我玩過 glViewPort 來解決這個問題,但沒有成功。 正如其他人在 Stackoverflow 上建議的那樣,我也嘗試加載不同的矩陣而不是單位矩陣,但這也不起作用......

這是drawFrame的代碼:

- (void)drawFrame
{
    [(EAGLView *)self.view setFramebuffer];

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();       

    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);   

    GLfloat vertices[720];
    for (int i = 0; i < 720; i += 2) 
    {
        vertices[i]   = (cos(degreesToRadians(i)) * 1);
        vertices[i+1] = (sin(degreesToRadians(i)) * 1);
    }

    glVertexPointer(2, GL_FLOAT, 0, vertices);
    glEnableClientState(GL_VERTEX_ARRAY);
    glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
    glDrawArrays(GL_TRIANGLE_FAN, 0, 360);

    [(EAGLView *)self.view presentFramebuffer];
}

您顯示的代碼將在世界坐標中繪制一個完美的圓圈。 您需要考慮的是這些世界坐標如何轉換為 window 坐標即像素。

如果glViewport設置為始終與 window 匹配,那么 window 的縱橫比將決定您使用所顯示的代碼示例看到的內容。 如果 window 是方形的,它將起作用,即您將看到一個完美的圓形。 如果 window 的高度大於寬度,則圓圈將被垂直拉伸。

為了保持完美的圓形,您可以使用投影矩陣,它為您提供與視口/窗口相同縱橫比的查看體積。 我注意到,在您第一次編輯之前,您在那里調用了glOrthof 設置縱橫比以匹配那里,這將為您完成工作。 如果您想要透視投影而不是正交投影,請使用glFrustum

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM