2010-08-24 18 views
92

ठीक है, मेरा अनुरोध यहां है। मुझे ओपनजीएल पहले से ही नहीं पता है, और मैं इसे सीखने को तैयार नहीं हूं, मैं ओपनजीएल ईएस को सीधे सीखना चाहता हूं क्योंकि मैं एंड्रॉइड में अपने विकास को लक्षित कर रहा हूं। मैं अपना 2 डी गेम विकसित करने के लिए ओपनजीएल ईएस सीखना चाहता हूं। मैंने प्रदर्शन उद्देश्यों के लिए इसे चुना है (चूंकि आरटी गेम्स की बात आती है तो बुनियादी सतह दृश्य ड्राइंग उस कुशल नहीं है)। मेरा सवाल है: कहां से शुरू करें? मैं एक महीने ब्राउज़िंग गूगल और पढ़ने/कुछ ट्यूटोरियल की कोशिश कर रहा/उदाहरणों पर खर्च किया है मैं कहीं भी पाया है, लेकिन ईमानदारी से, यह बहुत मदद नहीं की है और इस दो कारणों के लिए है:एंड्रॉइड ओपनजीएल ईएस और 2 डी

  1. लगभग सभी मेरे द्वारा पार किए गए लेख/ट्यूटोरियल 3 डी संबंधित हैं (मैं केवल सीखना चाहता हूं कि मेरे 2 डी स्प्राइट्स ड्राइंग कैसे करें)
  2. से शुरू करने के लिए कोई आधार नहीं है क्योंकि सभी लेख एक विशिष्ट चीजों को लक्षित करते हैं जैसे: "कैसे आकर्षित करें एक त्रिकोण (शिखर के साथ) "," मेष कैसे बनाएं "... आदि

मैंने फिर से प्रयास करने की कोशिश की है कुछ स्रोत कोड भी विज्ञापन करें (उदा .: प्रतिकृति द्वीप) लेकिन कोड बहुत जटिल हैं और इसमें बहुत सी चीजें हैं जो आवश्यक नहीं हैं; परिणाम: मैं अजीब वर्ग के नाम और सामान के साथ 100 .java फ़ाइलों के बीच खो गया।

मुझे लगता है कि वहाँ एक मैं तलाश कर रहा हूँ की तरह कोई पाठ्यक्रम है, लेकिन अगर किसी को जानने के लिए कि मैं क्या करने के लिए (केवल OpenGL ES अप कर रहा हूँ मुझे कुछ दिशानिर्देश और कुछ लिंक शायद दे सकता है मैं बहुत खुशी होगी 2 डी स्प्राइट्स प्रतिपादन! कुछ भी नहीं 3 डी)।

+32

'और मैं इसे सीखने के लिए तैयार नहीं हूं' यह प्रश्न शुरू करने के लिए बहुत अच्छा तरीका नहीं है – Falmarri

+56

कृपया मेरा पूरा प्रश्न पढ़ें, आपने इसका एक संवेदनशील हिस्सा लिया और सबसे महत्वपूर्ण समापन छोड़ दिया: "मैं नहीं हूं" ओ ओपनजीएल पहले से ही नहीं जानता है, और मैं इसे सीखने को तैयार नहीं हूं, मैं ओपनजीएल ईएस को सीधे सीखना चाहता हूं क्योंकि मैं एंड्रॉइड में अपने विकास को लक्षित कर रहा हूं " ओपनजीएल सीखने का क्या मतलब है अगर मैं केवल ओपनजीएल के साथ काम करने जा रहा हूं एम्बेडेड उपकरणों पर ईएस? चीयर्स – CoolStraw

+5

यह देखते हुए कि ओपनजीएल ईएस ज्यादातर ओपनजीएल का सबसेट है, मुझे यह कहने का मुद्दा नहीं दिख रहा है कि आप ओपनजीएल सीखने वाले नहीं हैं, क्योंकि परिभाषा के अनुसार आपको यह करना होगा। –

उत्तर

84

मैं इसी तरह की स्थिति में था।
जिस तरह से मैंने ओपनजीएल के साथ शुरुआत की, शुरुआत के साथ बहुत ही बुनियादी GLSurfaceView नमूने/डेमो को देखकर शुरू किया।

प्रारंभ करें, अपनी ऐप गतिविधि सेट करके, और मूल कैनवास सेट अप करें।

प्रतिकृति द्वीप स्रोत कोड फ़ाइल पर एक लूट लें: GameRenderer.java 2 डी (स्प्राइट) प्रतिपादन के लिए उचित जीएल झंडे के साथ अपने कैनवास को कैसे सेट अप करें। http://code.google.com/p/apps-for-android/source/browse/trunk/SpriteMethodTest

इस सवाल का जहां मैं अपने खुद के कोड पोस्ट देखें:: यदि आप अपने कैनवास सेट करने के बाद Using OpenGL to replace Canvas - Android

, आप कुछ फोन करके शुरू आप वास्तव में प्रतिकृति द्वीप के एक ही लेखक द्वारा SpriteMethodTest पर एक नज़र रखना चाहिए जैसे: gl.glClear (GL10.GL_COLOR_BUFFER_BIT);

उसके बाद आप एक स्प्राइट प्रस्तुत करने के लिए तैयार हैं। पहले, आप एक बनावट में स्प्राइट लोड करने के लिए की आवश्यकता होगी: http://tkcodesharing.blogspot.com/2008/05/working-with-textures-in-androids.html

यह कैसे मैं यह कर, मेरे पास है: http://qdevarena.blogspot.com/2009/02/how-to-load-texture-in-android-opengl.html

हालांकि, इस ट्यूटोरियल है कि वास्तव में मुझे लोड हो रहा है स्प्राइट के साथ बाहर की मदद की है एक वर्ग के नाम पर रखा गया Texture.java:

public class Texture 
{ 
    /*Begin public declarations*/ 
    public float x = 0; 
    public float y = 0; 
    public float z = 0; 
    public float width = 0; 
    public float height = 0; 
    /*Begin Private Declarations*/ 
    private GL10 gl; 
    public int[] texture; //holds the texture in integer form 
    private int texture_name; 
    private int[] mCropWorkspace; 
    private final BitmapFactory.Options sBitmapOptions; 


/*Begin Methods*/ 
public Texture(GL10 gl_obj) 
{ 
    gl = gl_obj; 
    texture = new int[1]; 
    mCropWorkspace = new int[4]; 
    sBitmapOptions = new BitmapFactory.Options(); 
    sBitmapOptions.inPreferredConfig = Bitmap.Config.RGB_565; 
    //Log.d(TAG, "Initializing Texture Object"); 
}  
public int get_texture_name() 
{ 
    return texture_name; 
} 

/*Loads the resource to memory*/ 
public boolean Load(Bitmap bitmap) //rename this to glLoad and don't have it as an initializer parameter 
{ 
    /*many thanks to sprite method test if this works*/ 
    if (gl == null) 
    { 
     Log.e(TAG, "Failed to load resource. Context/GL is NULL"); 
     return false; 
    } 
    int error; 

    int textureName = -1; 
    gl.glGenTextures(1, texture, 0); 
    textureName = texture[0]; 

    //Log.d(TAG, "Generated texture: " + textureName); 
    gl.glBindTexture(GL10.GL_TEXTURE_2D, textureName); 
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST); 
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR); 
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE); 
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE); 
    gl.glTexEnvf(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE, GL10.GL_REPLACE); 

    GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0); 

    mCropWorkspace[0] = 0; 
    mCropWorkspace[1] = bitmap.getHeight(); 
    mCropWorkspace[2] = bitmap.getWidth(); 
    mCropWorkspace[3] = -bitmap.getHeight(); 

    ((GL11) gl).glTexParameteriv(GL10.GL_TEXTURE_2D, 
      GL11Ext.GL_TEXTURE_CROP_RECT_OES, mCropWorkspace, 0); 

    error = gl.glGetError(); 
    if (error != GL10.GL_NO_ERROR) 
    { 
     Log.e(TAG, "GL Texture Load Error: " + error); 

    } 
    //Log.d(TAG, "Loaded texture: " + textureName); 
    return true; 
} 
} 
तब मेरे onDrawFrame में

() विधि मैं बस कार्य करें:

Texture texture = ... 
gl.glBindTexture(GL10.GL_TEXTURE_2D, texture.texture[0]); 
((GL11Ext) gl).glDrawTexfOES((float)(draw_x + 0.5), (float)(draw_y + 0.5), 0, tile_width, tile_height); 

आपको ओपनजीएल कैनवास पर 2 डी स्प्राइट्स ड्राइंग के साथ जाना चाहिए। मैंने देखा है कि इस पर वास्तव में कोई सीधा ट्यूटोरियल नहीं है। उम्मीद है कि भविष्य में मैं अपने देव ब्लॉग में एक पोस्ट करूंगा: http://developingthedream.blogspot.com/

+6

दोस्त आपको बहुत धन्यवाद! मैंने कभी इस तरह की दिशाएं नहीं प्राप्त की हैं, यही वही है जो मैं ढूंढ रहा था! और मैं आपके ब्लॉग पर नजर रखूंगा, उम्मीद है कि आप हमें भविष्य में एक महान ट्यूटोरियल प्रदान करेंगे :), फिर से आपको बहुत धन्यवाद – CoolStraw

+1

ओपी के समान स्थिति में और आपके उत्तर के रूप में धन्यवाद। अपने गेम/ब्लॉग के साथ शुभकामनाएँ। thx फिर – unR

+1

धन्यवाद @ मिगुएल मोरालेस मैं जीएल के साथ 2 डी ड्राइंग के लिए थक गया था। कूलस्ट्रॉ ने कहा कि इसमें बहुत सारी अनावश्यक चीजें हैं जिनमें बहुत सारे अनावश्यक चीजें हैं। वह जवाब एक क्रिस्टल की तरह स्पष्ट था। –

11

2 डी प्रोग्रामिंग सिर्फ 3 डी प्रोग्रामिंग है जो एक विमान के लिए बाध्य है। आपके पास 3 डी सीखने के अलावा कोई विकल्प नहीं होगा, लेकिन जब आप इसका उपयोग कर रहे हों तो बस z = 0.

ओपनजीएल ES पर एक ऑफिकल पुस्तक है। यही कारण है कि आप पहचान आप कर रहे हैं कि दे सकता है के बाद: http://www.amazon.com/OpenGL-ES-2-0-Programming-Guide/dp/0321502795/

+7

पैडेंटिक होने के लिए, आप अभी भी ज़ेड का उपयोग करते हैं ताकि आप हार्डवेयर को आपके लिए सॉर्ट करने दे सकें। बड़ा परिवर्तन यह है कि (संभवतः) 2 डी एप्लिकेशन एक परिप्रेक्ष्य के बजाय एक ऑर्थोग्राफिक दृश्य का उपयोग करेगा। –

+0

आपके उत्तर के लिए बहुत बहुत धन्यवाद, आपका कथन मुझे दिखाता है कि मैं ओपनगल और ओपनगल ES परिभाषा के बारे में गलत था। – CoolStraw

2

मैं करूंगा निश्चित रूप से चेकआउट एंड्रॉयड - क्रिस प्रुएट गूगल आईओ व्याख्यान के लिए एंड्रॉयड redux

हड़पने पीडीएफ भी

लेखन वास्तविक समय खेल यह कई स्तरों पर वास्तव में मददगार है, क्रिस मोबाइल उपकरणों

लेकिन अगर आप वास्तव में 2 डी पर ध्यान केंद्रित कर रहे हैं तो कैनवास के साथ शुरू के लिए खेल बनाने के साथ वास्तव में महान अनुभव है http://developer.android.com/guide/topics/graphics/index.html#drawing-with-canvas

एक और विकल्प कौशल स्तर पर निर्भर करता है फ्लैश + एंड्रॉइड के लिए एडोबएयर, मैं खुद को प्रोग्रामिंग स्तर पसंद करता हूं और प्यार करता हूं और जैसे ही आप विकास शुरू करते हैं, आपको पता चल जाएगा कि क्यों।

ओपन: के लिए चेक - Nehe प्रोडक्शंस

क्षुधा की एक जोड़ी आप अपने फोन पर डाल दिया है कि इसके लायक है और वे स्वतंत्र हैं चाहते हो सकता है है: ओपन डेमो, min3d फ्रेमवर्क, Redbook नमूना

1

मुझे लगता है कि बहुत अच्छी जानकारी पहले ही प्रदान की जा चुकी है। मैं एक ऐसी साइट साझा करना चाहता था जिसने ओपनगल पर तेजी लाने में मदद की! इसमें केवल कुछ महीने लगे और कार्टेशियन समन्वय प्रणाली के आधार पर एक कस्टम समन्वय प्रणाली थी। मैं Augmented रियलिटी तकनीकों का उपयोग कर 3 डी ऑब्जेक्ट नो कैमरा प्रस्तुत करने में सक्षम था।

मैंने ओपनजीएल अनुभव के साथ केवल प्रोग्रामिंग अनुभव के साथ शुरुआत की। मैंने रे वेंडरलिच के ट्यूटोरियल साइट का इस्तेमाल किया। प्रदान की गई जानकारी शीर्ष पायदान और समझने में आसान है। वह अधिकांश आवश्यक जानकारी के माध्यम से कटौती करता है और आपको उत्पादक बनने के लिए जो कुछ जानने की आवश्यकता है उसे प्रदान करता है। मैं इस ट्यूटोरियल को शुरुआती बिंदु के रूप में अत्यधिक अनुशंसा करता हूं: http://www.raywenderlich.com/5223/beginning-opengl-es-2-0-with-glkit-part-1

अन्य संसाधन जो मैं सुझाता हूं वह आईरिक के लिए लर्निंग ओपनजीएल ईएस नामक एरिक एम बक द्वारा एक पुस्तक है।

Learning OpenGL ES for iOS book cover art

कुछ कह रही है कि यह बहुत साधारण था यह आलोचना की। लेकिन यह वही है जो मैं खोज रहा था। इससे मुझे सभी मूलभूत बातें समझने में मदद मिली और मुझे एक विचार दिया कि मुझे और अधिक उन्नत सामग्री सीखने के लिए आगे जाना चाहिए। लेकिन आश्चर्य की बात नहीं है, मैं रे की साइट और एरिक की किताब से सीखने वाली सरल तकनीकों का उपयोग करके अपना उन्नत वास्तविकता ऐप बनाने में सक्षम था। साझा करने के लिए दोनों के लिए धन्यवाद !!!

0

आप प्रोजेक्ट देख सकते हैं: https://github.com/ChillingVan/android-openGL-canvas/blob/master/README-en.md यह ओपनजीएल के साथ कैनवास लागू करता है। यह शुद्ध जावा है। यह सामान्य कैनवास क्या कर सकता है के कुछ हिस्सों को लागू करता है।

संबंधित मुद्दे