Create 3d earth for SIO2 project
Categories: iPhone, others on Mar.15, 2009
Припомощи SIO2 мне захотелось сделать землю. Другими словами просто создать шар и наложить на него текстуру.
В процессе этих действий столкнулся с некоторыми проблемками:
- Это какой тип шара можно использовать в SIO2.
- Размер текстуры.
- Накладывание текстуры.
Сейчас пошагово опишу как я это сделал:
Открываем Blender. Удаляем стандартный куб. Нажимаем пробел и в меню выбираем Add -> Mesh -> IcoSphere. Выставляем subdivision на 5, а радиус на 2 к примеру. В низу на панели “Link and Materials” нажимаем “Set Smooth”, а в “Mesh” создаем новую UV Texture, если ее там нету, нажав на кнопку “New”.

Переходим в Shading (Нажать F5), если не создан “Link to Object”, то жмем на кнопку “Add New”. Наводим на шар и нажимаем Tab, он должен подсветиться. Переходим в текстурирование (или нажать F6) и создаем новую текстуру с типом “Image” и в настройке “Image” загружаем картинку нажав на кнопку “Load”. У текстуры ширина должна быть ровна высоте, и не более 1024 пикселов. Вот моя текстура планеты земля.

Разделим экран (нажмите на верхнюю грань и выберите “Split Area”) и в новой областе выберем “UV/Image Editor” и берем нашу текстуру. Наводим на шар нажимаем Tab, далее нажимаем D и выбираем “Textured Solid” мы наблюдаем результат ниже на картинке, текстура наложилась не правильно.

Текстура наложилась неправильно т.к. она по умолчанию накладывается на каждую поверхность. Выбираем шар, нажимаем Tab, нажимаем U и выбираем “Sphere form View”. Можно подкорректировать сетку наложения.

Экспортируем нашу планету по примерам SIO2 (можно скачать мою землю) и закидываем в проект (желательно использовать пример 3), в template.mm прописуем ее имя, компилируем и смотрим на результат:

Чтоб можно было вращать планету добавим немного кода в template.mm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | vec2 start; void templateScreenTap( void *_ptr, unsigned char _state ) { if( sio2->_SIO2window->n_touch ) { start.x = sio2->_SIO2window->touch[ 0 ].x; start.y = sio2->_SIO2window->touch[ 0 ].y; } } void templateScreenTouchMove( void *_ptr ) { if( sio2->_SIO2window->n_touch ) { float d1 = sio2->_SIO2window->touch[ 0 ].x - start.x; float d2 = sio2->_SIO2window->touch[ 0 ].y - start.y; // Get the object Suzanne located inside our resources. SIO2object *_SIO2object = ( SIO2object * )sio2ResourceGet( sio2->_SIO2resource, SIO2_OBJECT, "object/Sphere" ); // Check if we get a pointer. if( _SIO2object ) { // Apply a rotation based on the // touch movement. if( d1 > 5.0f || d1 < -5.0f ) { _SIO2object->_SIO2transform->rot->z += ( d1 * 0.025f ); } if( d2 > 5.0f || d2 < -5.0f ) { _SIO2object->_SIO2transform->rot->x += ( d2 * 0.025f ); } // Update the OpenGL matrix and apply the // new rotation specified above. sio2TransformBindMatrix( _SIO2object->_SIO2transform ); } } } |
Similar posts:

April 30th, 2009 on 11:40 am
Please post your blog in “ENGLISH”,so anyone can understand.
May 5th, 2009 on 4:45 pm
http://translate.google.com/translate?prev=_t&hl=en&ie=UTF-8&u=http%3A%2F%2Fwww.developers-life.com%2Fcreate-3d-earth.html&sl=auto&tl=en&history_state0=
May 6th, 2009 on 11:06 am
Thaks…….
July 9th, 2009 on 11:44 am
Доброго дня. Я цікавлюся OpenGL на платформі Android.Цікаво як ви експортували 3d обєкт в OpenGL ES. Ви використовували якісь сторонні бібліотеки? Опишіть будь-ласка сам процес експорту обєкта з 3d редактора в проект для IPhone.Дякую.
July 10th, 2009 on 12:27 pm
Использовался экспортер SIO2, но можно сохранить как *.obj и использовать Wavefront OBJ Loader.
Вот статья http://www.developers-life.com/wavefront-obj-loader-export-3d-objects-to-iphone.html
July 10th, 2009 on 12:29 pm
правда это для iPhone, но можно и переделать под Android. А *.obj можно и самому считать и отрисовать ( это ж текстовый фаил ).
July 13th, 2009 on 10:12 am
дякую. Все вийшло.Також напишу статтю але з платформою Android