2011-05-21 19 views
5

Mobil platformlar için bir 3D Projesi başlatmalıyım. Her şeyden önce ana hedefi - iskelet animasyonu - anahatlarını vurgulamak istiyorum. Çözüm gelince OpenGL ES ve C++ düşünüyordum. Yani sorular şunlardır: OpenGL ES (bu arayüz shader dahil) iskelet animasyon OpenGL ES iskelet animasyonlarını gerçekleştirmek için uygun mu?

  • OpenGL ES, mobil platformlarda yaygın olarak destekleniyor mu kaldıracak kadar sağlam

    1. mi ve en ünlü olanları nelerdir? (örneğin, iPad destekli midir?)
    2. Bu mümkün mü, demek istediğim yeterli hesaplama gücüne sahip miyim?
    3. SIMD optimizasyonu nedeniyle (SIMD'nin mobil platformlarda desteklendiğinden emin değilim, ancak kim bilir ...) XNA matematik kitaplığını kullanmaya değer mi?
    4. Bunun için C++ kullanmak güzel midir? Eğer evet ise, o zaman hangi derleyiciyi geliştirme ve test için seçmeliyim? Dahası, mobil platformlar için derleyicilerin ne işe yaradığına dair bir fikrim yok mu?

    Elde etmiş olabileceğiniz gibi - Henüz mobil platformlar için programlanmamıştım. Bu nedenle, bazı genel öneriler kabul edilir. Kısacası

  • +0

    Çok geniş. Ve iPad ve OpenGL ES gibi bu ayrıntıların çoğunu ve ana mobil platformların hangi dilleri/derleyicileri kullandığını kolayca görebilirsiniz. – YXD

    cevap

    7

    Evet, OpenGL ES 2.0, iskelet animasyonları için vertex arayüzünü oldukça iyi işleyebilir. OpenGL ES 1.1, gölgelendiriciler olmaksızın sabit bir işlev boru hattını kullanmıştır, bu yüzden eski API'da bunu yapmak daha zordur, ancak 2.0, gölgelendiriciler için destek ekler. OpenGL ES 2.0, tüm gönderim iOS cihazlarında (iPhone 3G S ve daha yeni iPad'ler de dahil olmak üzere) ve hemen hemen tüm Android cihazlarda (yalnızca birkaç düşük son el cihazı bulunamamıştır) mevcuttur. Windows Phone 7, OpenGL ES'yi destekliyor görünmüyor, ancak BlackBerry'nin yaptığı gibi.

    Bu konuyla ilgileniyorsanız, Philip Rideout'un "iPhone 3D Programming" adlı kitabını okumanızı şiddetle tavsiye ederim. Başlığında "iPhone" var iken, kitaptaki kodun neredeyse tamamı için genel C++ kullanıyor, bu yüzden diğer platformlara iyi bir şekilde tercüme etmeli ve anlamanız kolay olmalı. Hatta "En İyileştirme" bölümünde OpenGL ES 2.0 ve hatta 1.1'de vertex skinning yapmak için kod içeren bir bölüm var. Bu arayüzün bir gösterimi de dahil olmak üzere here kitabı için örnek kodu alabilirsiniz.

    C++, Objective-C'ye platforma özgü UI öğeleri oluşturabileceğiniz ve daha sonra tüm arka uç ve oluşturma mantığınızı C++ içinde yapabileceğiniz supported on iOS through Objective-C++'dur. Yine, Philip kitabında bunu yapar ve kaynak kod örnek uygulamalarında bunu nasıl yapılandığını görebilirsiniz. Imagination Technologies'teki insanlar ayrıca bazı kullanıcıların 3-D işlerini hızlı bir şekilde mobil cihazlarda çalıştırmaya ve çalıştırmaya alışkın oldukları PowerVR SDK modelinde platform-agnostik bir iskele kurdular.Ayrıca, SDK, OpenGL'den OpenGL ES'ye geçişle ilgili bazı harika belgelerin yanı sıra bu GPU'larda çeşitli efektler de gerçekleştiriyor.

    Bazı kullanıcıların küçük CPU setlerinde CPU üzerinde dönüşümler gerçekleştirerek biraz daha iyi performans aldıklarını duydum (iOS'ta bu işlem Accelerate framework kullanılarak yapılabilir), ancak ben vertex shader'ların çok daha hızlı olacağını hayal ediyorum. daha büyük geometri. Mobil cihazlarda çalıştığım PowerVR GPU'lar, düşündüğünüzden çok daha güçlüdür, özellikle de iPad 2'de yeni gelenler.

    Xcode IDE'yi ya IOS cihazlarını hedeflemek için GCC veya LLVM derleyicisi, ancak Android'in bu konuda birkaç seçeneği daha var.

    +1

    Çok küçük bir eklenti: iOS cihazlarda OpenGL ES 1.1, matris paleti uzantısını destekler (http://www.khronos.org/registry/gles/extensions/OES/OES_matrix_palette.txt). Diğer platformlardan emin değilim. – Tommy

    +0

    @Tommy - İyi nokta. Bunu, Philip'in örnek koduna baktıktan hemen sonra, OpenGL ES 1.1 ciltleme örnekleri için kullandım. –

    2

    :

    1. Evet, tabii. Neden olmasın?
    2. Evet, sanırım. Başka? DirectX kesinlikle değil.
    3. Evet, sanırım. Ama başka ne yapmak istediğinize bağlı.
    4. Hayır, en azından SIMD yüzünden değil, mobil platformlarda çok fazla desteklenmediğini düşündüğümden, en azından XNA'nın SIMD yönergeleri için optimize edildi.
    5. Evet, neden olmasın? Bence ... çoğunlukla Objective-C kullanıyoruz, ama C++ için de derleyiciler olmalı. Mobil cihazlara da sahip olmadığım için Google'a sor.
    +0

    Sanırım yanlış anlaşıldım - OpenGL ile iyi bir deneyimim var ama PC platformları için ve OpenGL ES ya da genel mobil platform programlama deneyimi yok :) –

    +0

    Tamam, pardon o zaman değiştirdim. Ama bence cevaplarım hala geçerli. –