2016-03-05 1 views
0

Я изучаю 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). Я ожидаю площади в центре экрана, но я получаю прямоугольник вместо:

enter image description here

Размер и расположение не то, что я ожидал. Что я сделал не так ? Я также перехожу к GLKMatrix4MakeFrustum, но получаю тот же результат.

Вы также можете скачать мой проект здесь: https://www.mediafire.com/?w0tb74z5tk0xig0

Спасибо за чтение моего длинный вопроса.

ответ

0

После полудня проверки линии по строке кода.

Я выяснил, что проблема с AutoLay-Out является причиной проблемы. Отключите автоматическую компоновку, и все работает отлично.

ТОЛЬКО НЕ ИСПОЛЬЗУЕТ АВТОЛАЙН, ЧТОБЫ ИЗМЕНИТЬ ОТКРЫТЬ ОТКРЫТЬ. Возможно, это влияет на уровень СА, который отображается OpenGL.

Смежные вопросы