Я изучаю OpenGL ES2 с земли (My Reference). Я хочу сделать простой квадрат размером 2 в центре экрана.Неверное преобразование, отображающее простой квадрат на OpenGL ES 2 (iOS)
Это мой квадрат (2 Треугольники):
typedef struct {
float Position[3];
float Color[4];
} Vertex;
const Vertex Vertices[] = {
{{1, -1, 0}, {1, 0, 0, 1}},
{{1, 1, 0}, {0, 1, 0, 1}},
{{-1, 1, 0}, {0, 0, 1, 1}},
{{-1, -1, 0}, {0, 0, 0, 1}}
};
const GLubyte Indices[] = {
0, 1, 2,
2, 3, 0
};
I Настройка уровня, контекст рендеринга в некоторых популярных примеров на Google.
Это мой Vertex шейдер:
attribute vec4 Position; // 1
attribute vec4 SourceColor; // 2
varying vec4 DestinationColor; // 3
uniform mat4 Projection;
void main(void) { // 4
DestinationColor = SourceColor; // 5
gl_Position = Projection * Position;
}
Это моя Rendering функция:
-(void)render:(CADisplayLink*)displayLink
{
glViewport(0, 0, self.frame.size.width, self.frame.size.height);
glClearColor(0, 104.0/255.0, 55.0/255.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
// Setup Projection Matrix
GLfloat aspect = self.frame.size.height/self.frame.size.width;
//GLKMatrix4 mat = GLKMatrix4MakeFrustum(-2, 2, -2*aspect, 2*aspect, 2, 100);
GLKMatrix4 mat = GLKMatrix4MakeOrtho(-2.0, 2.0, -2.0*aspect, 2.0*aspect, 0, 100);
glUniformMatrix4fv(_projectionUniform, 1, 0, mat.m);
// Setup color & vertices
glVertexAttribPointer(_positionSlot, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), 0);
glVertexAttribPointer(_colorSlot, 4, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid*) (sizeof(float) * 3));
// Draw...
glDrawElements(GL_TRIANGLES, sizeof(Indices)/sizeof(Indices[0]),
GL_UNSIGNED_BYTE, 0);
[_context presentRenderbuffer:GL_RENDERBUFFER];
}
установка I Othor Project Matrix с шириной 4 и высотой 1,77 * 4 (16: 9 iPhone). Я ожидаю площади в центре экрана, но я получаю прямоугольник вместо:
Размер и расположение не то, что я ожидал. Что я сделал не так ? Я также перехожу к GLKMatrix4MakeFrustum, но получаю тот же результат.
Вы также можете скачать мой проект здесь: https://www.mediafire.com/?w0tb74z5tk0xig0
Спасибо за чтение моего длинный вопроса.