Июн 19

shapeimage_2Я и обещал в прошлом уроке, устав от примитивных белых объектов на экране, начнем добавлять к ним цвета (помните исходный шаблон Apple, который мы удалили?) Просьба отнестись к этому уроку крайне внимательно, поскольку некоторые из представленных здесь концепций позже пригодятся нам в наложении текстур (да-да, осталось совсем немного).

В OpenGL ES цвет можно задавать сплошной заливкой для целого объекта, а можно раскрашивать объект, добавляя к нему полутона (когда цвета спектра плавно переходят один в другой). Начнем с самого простого — раскрасим наши объекты в один цвет.

Смена цвета, как обычно, переводит OpenGL в определенное «состояние»: все последующие операции рисования будут выполняться данным цветом, даже если вызвать для “сброса” функцию “glLoadIdentity()” (а все потому, что она работает только с вершинами). Поэтому с помощью всего одной строки кода мы можем окрасить наши объекты в любой цвет — пока остановимся на синем. Продолжить чтение »

1 звезда2 звезд3 звезд4 звезд5 звезд (3 голосов, средний: 5.00 из 5)
Загрузка ... Загрузка ...
Нет комментариев »

Июн 18

firstrotationВ этом уроке, базируясь на уже изученном материале, мы одновременно выведем на экран треугольник и квадрат — с перемещением. Перемещение объекта — один из видов трансформации.

К модели (объекту) в OpenGL ES применимы три разных вида трансформаций:

  • Перемещение Translate — движение объекта в трехмерном пространстве.
  • Вращение Rotate — вращение вокруг оси X, Y или Z.
  • Масштабирование — изменение размеров объекта. Применяется преимущественно в системах двухмерной ортографической проекции, т.к. в трехмерном пространстве размер визуализируемого объекта уменьшается с его отдалением (т.е. с возрастанием негативного значения по координате Z). Подходит для “спецэффектов”.

Для демонстрации функциональных возможностей сначала одновременно выведем на экран квадрат и треугольник с помощью функции “Translate“, а после перейдем к двум следующим.

Перемещение

За эффект перемещения в OpenGL ES отвечает одна единственная функция с говорящим за себя названием — “glTranslatef()“. Обратили внимание на букву “f” после слова “translate”? Значит, OpenGL будет принимать данные с плавающей запятой. Для обработки данных с фиксированной точкой вызывается функция “glTranslatex()“. Этот вариант применим там, где аппаратное обеспечение не предусматривает сопроцессора для вычислений с плавающей точкой, но в iPhone он есть, поэтому будем придерживаться первой опции. Продолжить чтение »

1 звезда2 звезд3 звезд4 звезд5 звезд (2 голосов, средний: 5.00 из 5)
Загрузка ... Загрузка ...
1 Комментарий »

Июн 17

Вообще-то, квадраты в OpenGL ES примитивами не являются, но работать с ними крайне удобно, а визуализировать — ничуть не сложнее треугольника. В этом уроке, взяв за основу код треугольника, мы превратим его в квадрат. Визуализацию опять будем выполнять статичную, но вплотную подберемся к трансформациям (т.е. перемещению). Само собой, позже квадрат можно будет превратить в куб, а потом и в куб с текстурами.

Краткий обзор прошлого урока и введение в следующий

На прошлом уроке, оттолкнувшись от «чистого холста» в виде проекта Xcode мы получили белый треугольник с заливкой. Для этого мы создали массив вершин, с помощью “glVertexPointer()” сообщили OpenGL о данных и их формате, активировали готовность к визуализации массива вершин и выполнили собственно рендеринг с помощью “glDrawArrays()“.

На сей раз, взяв этот код за основу, мы сделаем из треугольника квадрат. Для этого достаточно будет отредактировать пару строк кода. Во-первых, как все, наверное, уже догадались, количество точек с 3 нужно изменить на 4. Изменится и способ рисования, о чем и сообщим OpenGL через “glDrawArrays()“. Продолжить чтение »

1 звезда2 звезд3 звезд4 звезд5 звезд (3 голосов, средний: 5.00 из 5)
Загрузка ... Загрузка ...
Нет комментариев »

Июн 16

Базовые фигуры (примитивы) — основные элементы, из которых при рисовании выстраиваются сложные объекты. В OpenGL ES такими примитивами выступают объекты Point (Точка), Line (Линия), Triangle (Треугольник). Думаю, их названия говорят сами за себя.

В этом уроке мы будем анализировать код, на основании которого впоследствии можно будет создавать собственные проекты.

Примитив №1 — треугольники

Треугольники — самые сложные из базовых фигур, но они настолько удобны и полезны, что с них мы и начнем. Чтобы нарисовать треугольник, необходимо указать OpenGL три координаты трехмерного пространства — остальное программа сделает сама.

Первым делом создайте копию проекта из урока “OpenGL ES: настройка проекта в Xcode” или загрузите исходный код отсюда. Открыв проект в Xcode, перейдите к файлу “EAGLView.m” и найдите метод “drawView“. Начинается настоящее волшебство!

Первым шагом зададим параметры треугольника. Сразу обращаю внимание на то, что мы будем работать с координатами двух типов: Model и World. Координаты Model относятся к отрисовываемому примитиву, а координаты World сообщают OpenGL о его местонахождении относительно зрителя (который в пространстве World всегда находится в точке (0.0, 0.0, 0.0)).

Итак, задаем координаты треугольника в пространстве Model через три трехмерные координаты (X, Y, Z):

1
2
3
4
5
const GLfloat triangleVertices[] = {
0.0, 1.0, -6.0,// Верхняя центральная точка треугольника
-1.0, -1.0, -6.0,// нижняя левая
1.0, -1.0, -6.0,// нижняя правая
};

Заметьте, что координаты описаны последовательно, в направлении против часовой стрелки (оно может быть и противоположным — главное, задавать их последовательно и придерживаться единой схемы). Для начала я бы рекомендовал работу по схеме “против часовой стрелки”, поскольку именно такой порядок требуется для некоторых рассматриваемых ниже функций. Продолжить чтение »

1 звезда2 звезд3 звезд4 звезд5 звезд (2 голосов, средний: 5.00 из 5)
Загрузка ... Загрузка ...
1 Комментарий »

Июн 15

Настройка OpenGL ES в Xcode на iPhone не представляет собой абсолютно ничего сложного, особенно после того как в пакет SDK разработчики из Apple добавили соответствующий шаблон. Все что нужно — это проект, в который легко и быстро добавляется нужный код. Именно этим мы и займемся в данном уроке.
Откровенно говоря, не вижу необходимости перенабирать весь приведенный здесь код. Если хотите сразу перейти к практическим проектам по OpenGL — пожалуйста. Пропустив урок по настройке, вы ничего не потеряете, поскольку вдаваться в подробности особо я не буду — можете переходить сразу в конец урока и загружать файл проекта.

Для начала запустим Xcode и создадим новый проект. Выберите шаблон “OpenGL ES Application” и сохраните проект, куда сочтете нужным.

figure01

Полагаю, что все уже в общих чертах знакомились с этим шаблоном, а, возможно, даже и запускали приложение. Сейчас нам предстоит удалить код для вращающегося цветного квадрата и добавить в представление буфер глубины (т.е. сделать его по-настоящему трехмерным). Полученный результат пригодится нам для последующих уроков. Продолжить чтение »

1 звезда2 звезд3 звезд4 звезд5 звезд (2 голосов, средний: 4.00 из 5)
Загрузка ... Загрузка ...
Комментариев: 4 »

Июн 14

В этом уроке речь пойдет о создании приложения Hello World для cocos2d. Тем, кто еще не выполнил установку и компиляцию cocos2d, стоит прочесть предыдущий урок.

Шаг 1

Командой “File->New Project” создайте новый проект.

Шаг 2

Выберите опцию “Window-Based Application“. Продолжить чтение »

1 звезда2 звезд3 звезд4 звезд5 звезд (2 голосов, средний: 1.00 из 5)
Загрузка ... Загрузка ...
Комментариев: 5 »

Июн 12

Cocos2d — набор средств разработки, ориентированный преимущественно на создание игр на iPhone и iTouch. Изначально данный SDK создавался для языка Phyton (лицензия GNU LGPL).

Где загрузить

ЗДЕСЬ!

Требования

  • Mac и Mac OS с поддержкой iPhone SDK (например, Mac OS 10.5.6)
  • Xcode v. 3 и выше
  • iPhone SDK

Подробнее об установке Xcode и iPhone SDK, а также о том, где их взять, можно прочесть здесь.

Установка

1. Загружаем отсюда.

2. Распаковываем архив и копируем файлы в папку “Library” (может быть и любая другая, но я выбрал “Library“). Продолжить чтение »

1 звезда2 звезд3 звезд4 звезд5 звезд (3 голосов, средний: 3.67 из 5)
Загрузка ... Загрузка ...
Комментариев: 2 »

Июн 12

В этом примере мы создадим скачущий мяч, используя средства Cocos2d по сценарийной анимации. Урок предполагает знакомство с основами настройки проектов в cocos2d (при необходимости рекомендуем обратиться к предыдущим урокам, раз, два). Представленный проект основан на примере с именем “Click And Move“, входящем в состав пакета cocos2d.

Шаг 1

Выполните “File->New Project“, выбрав “Window-Based Application“. Присвойте проекту имя “BouncingCocos“.

Шаг 2

Выберите изображение для скачущего мяча и добавьте его в группу “Resources“. Свой мяч я загрузил отсюда.

ico2-150x150

Шаг 3

Добавьте в проект файлы Cocos2d (или сошлитесь на библиотеку, если таковая создана). Для добавления файлов щелкните на имени проекта в списке “Group & Files“, удерживая нажатой клавишу <Control>, и включите имеющиеся файлы из дистрибутива Cocos2d. Продолжить чтение »

1 звезда2 звезд3 звезд4 звезд5 звезд (1 голосов, средний: 4.00 из 5)
Загрузка ... Загрузка ...
1 Комментарий »

Июн 11

При работе с синглетоном Director на Cocos2d программа не реагирует на события касания при наличии в окне объекта “Scene“. Соответственно, реализация “UIApplicationDelegate” не получает уведомления “touchesBegan“.

Исправить эту особенность можно следующим образом:

1) внедрив протокол “TouchEventsDelegate” со следующей спецификацией:

1
2
3
4
5
6
7
8
9
10
11
/**Touch event delegate
* return YES if the event was handled
* return NO if the event was not handled
*/

@protocol TouchEventsDelegate
@optional
- (BOOL)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (BOOL)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (BOOL)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (BOOL)ccTouchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;
@end

2) связав с синглетоном обработчик событий:

1
[[Director sharedDirector] addEventHandler:(id)touchEventDelegateHandler];

Продолжить чтение »

1 звезда2 звезд3 звезд4 звезд5 звезд (Оцените приложение)
Загрузка ... Загрузка ...
Комментариев: 2 »

Июн 11

Данный урок подразумевает знакомство с Cocos2d для iPhone (здесь мы будем работать с Cocos2d v. 0.7.1). Для базовой информации по Cocos2d можно прочесть инструкцию по установке здесь и урок Hello World.

Введение

К переходам, которые используются для переключения между объектами Cocos2d Scene, относятся такие эффекты, как wipe (вытеснение), fade (постепенное появление / исчезновение), zoom (масштабирование) и split (разделение). Класс “Scene” — производная “CocosNode“, по свойствам аналогичная “Layer“. В любой объект “Scene” можно добавить еще один “CocosNode“, например, “Layer” (один или несколько) или “Sprite” (один или несколько). Для обработки перехода служит представленный ниже код:

1
+(id) transitionWithDuration:(ccTime) t scene:(Scene*)s;

где “scene” — сцена, которая, появляясь, сменяет текущую, “time” — число секунд, которые длится переход. При применении перехода к сценам синтаксис будет следующим:

1
[[Director sharedDirector] replaceScene: [TransitionClass transitionWithDuration:duration scene:nextScene]];

Встречаются переходы со специализированными параметрами. Так, например, в “FadeTransition” в качестве дополнительного параметра присутствует цвет. Продолжить чтение »

1 звезда2 звезд3 звезд4 звезд5 звезд (Оцените приложение)
Загрузка ... Загрузка ...
1 Комментарий »