Want to display a 3D model on the iPhone: how to get started?

IphoneIosOpengl Es

Iphone Problem Overview


I want to display and rotate a single 3D model, preferably textured, on the iPhone. Doesn't have to zoom in and out, or have a background, or anything.

I have the following:

  • an iPhone
  • a MacBook
  • the iPhone SDK
  • Blender

My knowledge base:

  • I can make 3D models in various 3D programs (I'm most comfortable with 3D Studio Max, which I once took a course on, but I've used others)
  • General knowledge of procedural programming from years ago (QuickBasic - I'm old!)
  • Beginner's knowledge of object-oriented programming from going through simple Java and C# tutorials (Head Start C# book and my wife's intro to OOP course that used Java)
  • I have managed to display a 3D textured model and spin it using a tutorial in C# I got off the net (I didn't just copy and paste, I understand basically how it works) and the XNA game development library, using Visual Studio on Windows.

What I do not know:

  • Much about Objective C
  • Anything about OpenGL or OpenGL ES, which the iPhone apparently uses
  • Anything about XCode

My main problem is that I don't know where to start! All the iPhone books I found seem to be about creating GUI applications, not OpenGL apps. I found an OpenGL book but I don't know how much, if any, applies to iPhone development. And I find the Objective C syntax somewhat confusing, with the weird nested method naming, things like "id" that don't make sense, and the scary thought that I have to do manual memory management.

Where is the best place to start? I couldn't find any tutorials for this sort of thing, but maybe my Google-Fu is weak. Or maybe I should start with learning Objective C? I know of books like Aaron Hillgrass', but I've also read that they are outdated and much of the sample code doesn't work on the iPhone SDK, plus it seems geared towards the Model-View-Controller paradigm which doesn't seem that suited for 3D apps.

Basically I'm confused about what my first steps should be.

Iphone Solutions


Solution 1 - Iphone

Once again, if I may plug my own work, I have written a post about the things I've learned from developing an OpenGL ES application on the iPhone. That application, Molecules (referred to by frankodwyer), is open source and I have a writeup on some of the other tricky issues I ran into while developing it. The application generates 3-D models and lets you rotate and scale them with your fingers, which sounds close to your needs. You can download the code, compile it, and run it on your desktop in a matter of a few minutes. If you join the iPhone Developer Program, you can install it on your device.

When it comes to object loading, Bill Dudney is working on a Wavefront OBJ loader for the iPhone that might be able to take in your Blender files, should they be exportable in that format. I haven't done much texture work on the iPhone yet, but it sounds like his example has that working now.

Overall, I find that learning by example and by jumping into development of some small, targeted applications (that you may never release) are what works for me. Try tweaking the examples listed above and see what happens. You should be able to read through the Objective-C code in those examples and start to get a feel for what they're doing.

Even though Hillegass's book (the third edition just came out and is up-to-date) focuses on the Mac, the Cocoa fundamentals he teaches are still relevant for the iPhone. The MVC design pattern serves you just as well on the iPhone as the Mac. I actually deviated from that pattern in a few places within Molecules, and I regret that decision because those sections of the application became a mess. The book is an easy read and well worth your time.

Solution 2 - Iphone

You should probably start with some simpler iphone apps/tutorials, just to get your footing on obj-c and xcode etc.

For that, I recommend the pragmatic programmer's iphone book, which has enough information to get started (I started with no knowledge of xcode, obj-c, iphone or mac and got to a working app fairly fast, using mainly this). However I should add that I come from a fairly good background in C/C++ and Java.

For your particular project, perhaps take a look at this answer which refers to an open source 3D app that you can look at and get tips from.

Solution 3 - Iphone

This is an ancient thread and I am terribly late. But still I am going to post my 2 pence here.

A Sneak Preview

Before I get in to the beast, this is my setup.

I use

  1. Blender to create 3D models. (You can use Maya or 3D Max, I will tell you how to export the model for Blender, same works for 3D Max and Maya).
  2. Cocos3D game engine.
  3. PVRGeoPOD blender extension from Imagination Technology to convert blender model to format that Cocos3D understand. You can see that the link downloads an installer file which in turns downloads the entire SDK. I can't see an easy way to download the blender extension alone.

So if you are not intending to use Cocos3D, you can skip this answer and run for your money.

Initial Setup

  1. Install blender.

    I am not going to embarrass you by going in to details.

  2. Download Cocos3D..

    When I type this, the current version is 0.7.2.

  3. Download Cocos2D.

    Cocos3D is written on top of popular Cocos2D, a popular 2D game framework. Important think to note here is that, Cocos2D 2.x version is already there and stable. But Cocos3D works with Cocos2d 1.x version only.

    When you unzip the source you downloaded you will find a README file inside and it specifically says, > PLEASE NOTE THAT cocos3d 0.7.2 IS NOT COMPATIBLE WITH cocos2d 2.x. BE > SURE TO DOWNLOAD cocos2d 1.x FOR USE WITH cocos3d.(emphasis mine)

    The README file clearly tells the installation procedure. After installation, you will get a nice Cocos3D project template in XCode.

  4. Add PVRGeoPOD extension to Blender.

    This requires some explanation. When you run the PVRGeoPOD installer, a screen shows what and what features need to be installed. I only selected

    • PVRGeoPOD - To convert my models in my .blend file to .POD format that Cocos3D understands

    • PVRShaman - you can view the model inside .POD using this tool.

    enter image description here

    You can install other tools in the list, but I only used these two.

    Now after the installation process (which may take some time), you need to add the PVRGeoPOD AddOn to blender. You can find the PVRGeoPOD.UserManual.PDF file in the just installed folder, which also contains below information.

    • Find Blender Add-On folder, you can open blender python console and run command bpy.utils.script_paths("addons") to see the path to this folder.
    • Find the blender add-on files inside the PVRGeoPOD folder, in your installation path. When you see files like libPVRGeoPOD.dylib and PVRGeoPODScript.py and 2 QTfiles, stop there as this is the location. Copy these 4 files and paste them in blender add on folder.
    • Now open blender, choose Preferences, find Add-On tab, search and find PVRGeoPOD extension and enable it by clicking the checkbox on the right.
    • Now Quit and restart blender, if needed, and select file->export and see if there is an option called PVRGeoPOD(.pod/.h/.cpp), if yes,you are successful.

    Now you can create models in blender, and export these models as .POD files which Cocos3D understands.

    If you are using other 3D designing tools like Maya, 3D Max, this PVRGeoPOD extension can be added to them also. Just see the PDF I mentioned above.

Using in project

  1. Step by step procedure is given below.

    Create your model in blender (.blend) and export it as .POD file. When you export I normally select following options

    • Primitive Type - Indexed Triangle List
    • Material tab - Check Export Material Option

    and rest I left it as default.

  2. Create a new project in XCode, choose Cocos3D template.

  3. Add the .POD files to your project. If yours a textured model, add that texture to your project also.

  4. The template project itself contains a HelloWorld.POD file, you can replace that line with your .POD file so that your model will be visible.

    [self addContentFromPODFile: @"YourPODFileName.pod"];
    

Now you have your first 3D model visible in iOS device.

Solution 4 - Iphone

I'm having a play with iPhone development for a bit of fun and bought Beginning iPhone Development by Dave Mark and Jeff LaMarche (ISBN13: 978-1-4302-1626-1) and am enjoying working through the chapters. I have a Win32 Delphi background with a bit of .NET and so Objective C is very new to me.

One of the chapters is on OpenGL and Quartz which may be of interest to you. I've haven't got that far yet so I can't really comment on how useful it will be for yourself but the writing style is very accessible and it's paced well (for me anyway).

The initial chapters explain exactly how to get up an running with a good introduction to Xcode and InterfaceBuilder.

Solution 5 - Iphone

For anything on iOS 8 or later, the answer is SceneKit. SceneKit will render Collada (DAE) files. Any decent modelling package (eg Cheetah, Blender) should export a DAE file - it's a documented portable format in XML (though xCode compiles them into binary format to save space).

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJeremyReimerView Question on Stackoverflow
Solution 1 - IphoneBrad LarsonView Answer on Stackoverflow
Solution 2 - IphonefrankodwyerView Answer on Stackoverflow
Solution 3 - IphoneKrishnabhadraView Answer on Stackoverflow
Solution 4 - IphoneSimon TemlettView Answer on Stackoverflow
Solution 5 - IphoneAirsource LtdView Answer on Stackoverflow