[英]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.