نمایش نتایج 1 تا 3 از 3

نام تاپیک: OpenGL ES در اندروید

  1. #1
    کاربر دائمی آواتار amin1softco
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    پای آن سرو بلند
    پست
    1,832

    OpenGL ES در اندروید

    سلام بعد از مدتی دوباره وقت آزاد پیدا کردم و می خواهم اگر شد بحث OpenGL ES در اندروید را شروع کنم . البته من خودم همیشه وقتی مبتدی هستم مقاله نویسیم گل می کنه پس ممکنه اشتباهاتی هم در نوشته هام باشه که دوستانی که کار کردند بیاند شرح و اصلاحش را ذکر کنند ما هم تصحیح می کنیم .

    مقدمات :
    اندروید از چند لایه تشکیل شده که در شکل زیر می تونید این لایه ها را ببنید

    همانطور که در شکل می بینید این لینوکس دلاور میاد و با سخت ترین قسمت اندروید دست و پنجه نرم می کنه یعنی درایور های سخت افزاری را راه اندازی می کنه و بعد از اون

    لایه کتابخانه های داخلی اندروید قرار گرفته همانطور که در شکل مشخص است OpenGL ES و همینطور پایگاه داده SQLite مشاهده می شه که ما ازشون می تونم استفاده کنیم

    همانطورم که می دونید دالویک یک نسخه بهبود یافته از j2me است و در نتیجه شما در این لحظه دو تا راه دارید یا اینکه با سی++ و بطور native برای اندروید برنامه بنویسید که باید به ndk مراجعه کنید و خلاصه مدیریت و حافظه و عملکرد و اینا بیافته گردن خودتون ولی به زبان سی ++ یا سی کدتون را می نویسید که عملکرد برنامتون به مراتب بالاتر است یا اینکه بیایید از همین جاوا استفاده کنید و بیخیال پرفرمنس خیلی رویایی بشید (البته QT برای زبان سی++ و xamarin برای زبان سی شارپ به شما امکان کد نویسی را می دهند) که مورد بحث ما نیستند .
    و ما در اینجا بیخیال پرفرمنس و این داستانا میشیم و میریم به صورت عادی با همون جاوا OpenGL ES را به کار بگیریم و دقیقاً در بالاترین لایه در تصویربالا شروع به کد نویسی خواهیم کرد .
    نکته دیگه اینه که شما چه در سی شارپ و چه در اندروید می تونید از کلاس گرافیک استفاده کنید و شکل های ساده را ترسیم کنید و خودتون را اصلاً با openGL در گیر نکنید .
    برای شروع باید برید و sdk اندروید که به همراه اکلیپس ارائه شده را دانلود کنید.

    حالا اگر دانلود شد میام ادامشو می نویسم فعلاً :D


    یکسری اصطلاحات در آندروید هست که بدونید بهتره :
    اکتیویتی ها (Activities)
    اکتیویتی، واسط گرافیکی است که کل صفحه نمایشگر را در اختیار بگیرد. اکتیویتی میتواند از چندین View تشکیل شده باشد یا به UI عملکرد مورد نیازش را بدهد. بعنوان مثال برنامه ارسال ایمیل. میتواند شامل دو اکتیویتی باشد. یکی شامل تمامی ایمیل هایی که دریافت کرده ایم، دیگری اکتیویتی که شامل محیط نوشتن ایمیل و ارسال آن باشد. هر دو اکتیوی به هم مربوط می باشند ولی عملکرد آنها کاملاً مستقل از یکدیگر است.
    سرویس ها (Services)
    یک سرویس در بک گراند (background) اجرا میشود و UI یا واسط کاربری ندارد. مثالی برای سرویس ها اطلاعی (notification) است که بوسیله زنگ و روشن شدن صفحه نمایشگر در زمان دریافت SMS یا ایمیل و یا زمانیکه کسی با ما تماس میگیرد، ارسال میشود.
    Content providers (تامین کنندگان محتوا!)
    از طریق Content provider ها دسترسی به تمامی اطلاعات ذخیره شده در گوشی – توسط برنامه های دیگر و یا برنامه ای که ما مینویسیم – امکان پذیر است. برای اینکه سایر برنامه ها بتوانند به اطلاعات دسترسی داشته باشند، معمولاً اطلاعات در فایل ها یا دیتابیس ذخیره میشوند.
    Layout (قیافه!:) )
    Layout ها شامل المانهای طراحی واسط کاربری هستند. هر زمانیکه یک فایل XML برای واسط کاربری ایجاد میکنیم، نیاز به Layout داریم تا طراحی ما را در خودش نگه دارد. در مورد Layout ها در نوشته های بعدی شرح ییشتری خواهم داد. پنج نوع Layout مختلف داریم که حتی میتوانند تو در تو بکار گرفته شوند.
    View
    View یک عضو مستقل (single object) در واسط کاربری است. View در داخل Layout قرار میگیرد و از ترکیب View ها ساده ترین تا پیچیده ترین واسط های گرافیکی و غیر گرافیکی کاربری ساخته میشود. بعنوان مثال، برچسب (Label) یک نوع View است. اندروید این قابلیت را دارد که ما طرحهای گرافیکی خود را بر اساس XML تولید کنیم و در قسمت کد صرفاً به عملکرد (functionality) برنامه بپردازیم و بدین سبب از پیچیدگی برنامه بکاهیم.
    اتفاقات (Events)
    Event ها اتفاقاتی هستند مانند کلیک کردن یا لمس کردن، که برای دریافت این اتفاقات متد Listener آن اتفاق باید تعریف شود. Eventاتفاقی است که از بیرون رخ میدهد؛ چیزی است که کنترل آن دست ما نیست؛ یا حتی چیزیست که ما نمیدانیم کی اتفاق میافتد. بدین منظور کنترلر های اتفاق (Events controllers) مورد استفاده قرار میگیرند. این امکان وجود دارد که برای هر اتفاقی که رخ میدهد به سیستم بگوییم که چه کاری انجام دهد. معمول ترین اتفاق دریافت لمس صفحه نمایشگر است که برای دریافت آن Listener مورد نیاز باید تنظیم شود.
    منابع (Resources)
    منابع، المانهای خارجی هستند که ما در برنامه خود بکار میگیریم. آنها در فولدر “res” ذخیره میشوند و میتوانند فایلهای تصویری، صوتی مانند عکس، فیلم، انیمیشن و موزیک باشند. همچنین فایلهای XML که شامل طراحی های پوسته، واسط کاربری و تم ها هستند، در این پوشه ذخیره میشوند. وقتی عملیات کامپایل انجام میشود، آنها بطور کامل از طریق کدهای جاوا قابل دسترسی هستند.
    منبع : کمالان



    لینک های مفید : پورت آموزش های nehe در اندروید
    آموزش مختصر در باب openGL es
    آخرین ویرایش به وسیله amin1softco : دوشنبه 24 شهریور 1393 در 20:51 عصر

  2. #2

    نقل قول: OpenGL ES در اندروید

    سلام به همگی دوستان
    من یک کد ساده‌ای دارم در OpenGL ES 1.0 اندروید و میخوام اونو ببرم به OpengGL ES 2.0. این کد فقط 20 تا نقطه ورودی میگیره و این نقاط را به هم وصل میکنه که یک موج سینوسی حاصل می شود.
    برای ارتقا کد ها به نسخه دو باید چکار کنم؟ میدونم باید vertshader و fragshader اضافه کنم و یه سری کار دیگه اما اصلا نمیدونم چطوری. ممنون میشم اگه کسی کمک بکنه.
    خیلی ممنون
    کد ها در ادامه آمده است.

    Activity main=

    public class mainActivuty extends Activity {
    private GLSurfaceView surface;
    public void onCreate(Bundle bundle) {
    super.onCreate(bundle);
    surface = new GLSurfaceView(this);
    surface.setEGLContextClientVersion(1);
    surface.setRenderer(new MyGLRenderer());

    setContentView(surface);
    }

    public void onPause(){
    super.onPause();
    surface.onPause();
    }

    public void onResume() {
    super.onResume();
    surface.onResume();
    }
    }


    Renderer=

    public class MyGLRenderer implements Renderer {
    Shape s;

    public MyGLRenderer() {
    s = new Shape();
    }

    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
    gl.glClearColor(0.0f, 0.0f, 0.5f, 0.5f);
    }

    public void onDrawFrame(GL10 gl) {
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
    gl.glLoadIdentity();
    gl.glTranslatef(0, 0, -8);
    s.draw(gl);
    }

    public void onSurfaceChanged(GL10 gl, int width, int height) {
    gl.glViewport(0, 0, width, height);
    gl.glMatrixMode(GL10.GL_PROJECTION);
    gl.glLoadIdentity();
    GLU.gluPerspective(gl, 45.0f, (float) width / (float) height, 0.1f,
    100.0f);
    gl.glMatrixMode(GL10.GL_MODELVIEW);
    gl.glLoadIdentity();
    }

    @Override
    public void onSurfaceCreated(GL10 arg0, javax.microedition.khronos.egl.EGLConfig arg1) {
    // TODO Auto-generated method stub

    }


    }


    و کلاس Shape:

    public class Shape {

    float vertices[] = {
    -3.14f, -0.00159265f, 0f,
    -2.826f, -0.31038f, 0f,
    -2.512f, -0.588816f, 0f,
    -2.198f, -0.809672f, 0f,
    -1.884f, -0.951351f, 0f,
    -1.57f, -1f, 0f,
    -1.256f, -0.950859f, 0f,
    -0.942f, -0.808736f, 0f,
    -0.628f, -0.587528f, 0f,
    -0.314f, -0.308866f, 0f,
    0f, 0f, 0f,
    0.314f, 0.308866f, 0f,
    0.628f, 0.587528f, 0f,
    0.942f, 0.808736f, 0f,
    1.256f, 0.950859f, 0f,
    1.57f, 1f, 0f,
    1.884f, 0.951351f, 0f,
    2.198f, 0.809672f, 0f,
    2.512f, 0.588816f, 0f,
    2.826f, 0.31038f, 0f,
    3.14f, 0.00159265f, 0f
    };
    private short[] indices = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};

    FloatBuffer vertexBuffer;
    ShortBuffer indexBuffer;
    public Shape() {
    ByteBuffer bb = ByteBuffer.allocateDirect(vertices.length * 4);
    bb.order(ByteOrder.nativeOrder());
    vertexBuffer = bb.asFloatBuffer();
    vertexBuffer.put(vertices);
    vertexBuffer.position(0);

    ByteBuffer bb2=ByteBuffer.allocateDirect(indices.length*2);
    bb2.order(ByteOrder.nativeOrder());
    indexBuffer=bb2.asShortBuffer();
    indexBuffer.put(indices);
    indexBuffer.position(0);
    }

    public void draw(GL10 gl) {
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
    gl.glDrawElements(GL10.GL_LINE_STRIP,indices.lengt h,GL10.GL_UNSIGNED_SHORT,indexBuffer);
    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
    }

    }

  3. #3
    کاربر دائمی آواتار amin1softco
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    پای آن سرو بلند
    پست
    1,832

    نقل قول: OpenGL ES در اندروید

    برای استفاده از opengl ES 2.0 باید اول در بخش منیفست پروژه تعریفش کنید به این شکل

    <uses-feature android:glEsVersion="0x00020000"
    android:required="true" />




    بعدشم چک کنید ببنید دیوایز مورد نظر پشتیبانی می کنه ازش یا خیر


    private boolean hasGLES20() {
    ActivityManager am = (ActivityManager)
    getSystemService(Context.ACTIVITY_SERVICE);
    ConfigurationInfo info = am.getDeviceConfigurationInfo();
    return info.reqGlEsVersion >= 0x20000;
    }




    بعدشم کد هاتون را می نویسید دیگه می تونید به لینک های زیر مراجعه کنید
    https://www.khronos.org/assets/uploa...ide_sample.pdf
    https://blog.jayway.com/2013/05/09/o...tting-started/

تاپیک های مشابه

  1. امکان Zoom در OpenGl اندروید
    نوشته شده توسط hasti.lm در بخش Android Studio
    پاسخ: 0
    آخرین پست: دوشنبه 22 خرداد 1391, 14:51 عصر
  2. نمایش متن در OpenGL اندروید
    نوشته شده توسط hasti.lm در بخش Android Studio
    پاسخ: 2
    آخرین پست: دوشنبه 22 خرداد 1391, 14:46 عصر
  3. openGL در اندروید
    نوشته شده توسط miladhzz در بخش Android Studio
    پاسخ: 3
    آخرین پست: جمعه 19 اسفند 1390, 14:00 عصر
  4. مقایسه ی کارت های گرافیکی موجود در ایران از دیدگاه OpenGL
    نوشته شده توسط Vahid_Nasiri در بخش طراحی و ساخت بازی‌های کامپیوتری
    پاسخ: 2
    آخرین پست: شنبه 03 آبان 1382, 17:54 عصر
  5. Opengl & 3D Max
    نوشته شده توسط Bandeye_khoda در بخش طراحی و ساخت بازی‌های کامپیوتری
    پاسخ: 1
    آخرین پست: چهارشنبه 14 خرداد 1382, 19:13 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •