Не могу использовать glTranslatef iPhone - PullRequest
1 голос
/ 10 октября 2011

Когда я использую glTranslatef, у меня появляется предупреждение. Неявное объявление функции 'glTranslatef' недопустимо в C99. Если я собираю и запускаю, у меня появляется «EXC_BAD_ACCESS». Как я могу решить эту проблему?

1 Ответ

3 голосов
/ 10 октября 2011

Похоже, вы не импортировали требуемые заголовки.Для разработки приложения OpenGL ES 1.0 необходимо включить следующие заголовки:

#import <OpenGLES/EAGL.h>
#import <QuartzCore/QuartzCore.h>

#import <OpenGLES/ES1/gl.h>
#import <OpenGLES/ES1/glext.h>

Не забудьте добавить каркасы: OpenGLES.framework и QuartzCore.framework.

Редактировать:

В OpenGL ES 2.0 у вас нет каких-либо матричных операций, доступных в 1.0, таких как glTranslatef, glRotatef, glFustrum и многие другие.Больше.Реализовать их самостоятельно нелегко, но это цена, которую вам нужно заплатить, если вы хотите программируемый конвейер.Короче говоря: вам нужно написать свои собственные функции для представления и манипулирования матрицами 4x4: умножить их, умножить на векторы, создать матрицы поворота, перемещения и масштабирования, вам также нужна функция для создания матрицы проекции, такой как fustrum.После этого вам нужно объявить uniforms в ваших вершинных шейдерах для прохождения projection и modelview матриц.Затем вам нужно умножить их, чтобы применить преобразование и проекцию к вершине:

// Simple vertex shader
uniform mat4 projection;
uniform mat4 modelview;

attribute vec3 position;

void main(){
    gl_Position = projection * modelview * vec4(position, 1.0);
}

Есть отличная книга, которая научит вас, как использовать ES1 и ES2 на iPhone - Программирование iPhone 3d ,Если у вас нет времени, придерживайтесь ES1.Это нормально, если вам не нужен программируемый конвейер.Но, на мой взгляд, это стоит изучить.

...