opengl در مجیدآنلاین

شروع موضوع توسط saalek110 ‏4 سپتامبر 2019 در انجمن منطق و الگوریتم برنامه‌نویسی

کلمات کلیدی:
  1. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    opengl در مجیدآنلاین

    opengl2.png
     
    آخرین ویرایش: ‏4 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏4 سپتامبر 2019
    SajjadKhati از این پست تشکر کرده است.
  2. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    در این تاپیک قصد دارم هر چیزی مربوط به opengl است را بنویسم.
    مانند نصب در کامپایلرهای مختلف یا تکنیک های opengl.
    همچنین در محیط های دیگر مثل اندرویید یا در بروسر مثل webgl
    کلا هرکجا opengl به کار رفته باشد در این تاپیک آورده می شود.
    به همین خاطر فهرستی اول تاپیک اضافه می شود تا پیدا کردن مطالب آسان تر شود.

    زبان تاپیک:
    زبان تاپیک سی است.
    C و در مورد برنامه اندرویدی جاوا Java است.
    با زبان های سی شارپ #C و وی بی دات نت VB.net و سی CLR C کار نشده.
    ولی بحث های مفهومی opengl قابل استفاده است.
     
    آخرین ویرایش: ‏4 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏4 سپتامبر 2019
  3. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    همچنین از سایت های فارسی نقل هایی انجام خواهد شد.
    این نقل ها گاهی امکان تست ندارند ولی خوب است در دسترس باشد تا به افراد کمک کند.
     
    نوشته شده توسط saalek110 در ‏4 سپتامبر 2019
  4. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    همچنین فایلهایی برای دانلود قرار داده خواهد شد تا به افراد کمک کند تا سریع تر برنامه های خود را اجرا کنند.
     
    نوشته شده توسط saalek110 در ‏4 سپتامبر 2019
  5. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    چند پست اول تاپیک با نوشتن این پست ها رزرو می کنم چون ممکن است بعدا نیاز شود. مثلا شاید نیاز شود چند لیست ایجاد شود چون مطالب تاپیک بسیار متنوع خواهد یود.
     
    نوشته شده توسط saalek110 در ‏4 سپتامبر 2019
  6. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    راهنمایی: خیلی کدهای opengl در هر محیطی یکسان است پس توجهی نکنید در کدام محیط بحث می شود.

    پس ما یک بحث خود opengl را داریم
    و یک بحث نرم افزارهای مختلف.

    البته opengl محیط اندروید ممکن است تفاوت عمده داشته باشد.
    این محیط ها جدا بحث می شود.
     
    نوشته شده توسط saalek110 در ‏4 سپتامبر 2019
  7. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    ادیت شد.
     
    آخرین ویرایش: ‏4 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏4 سپتامبر 2019
  8. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    بعضی پستها با هم مرتبط هستند . این پستها به شکل گروهی لیست می شوند.
    مثلا یک لیست آموزش کلی opengl داریم که در هر محیطی یکسان است.
    اینها بحث های کلی جدا از محیط است. یک لیست کلی opengl خواهیم داشت.
    لیست کلی بحث های opengl:
    ......
    ......
     
    نوشته شده توسط saalek110 در ‏4 سپتامبر 2019
  9. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    لیست کل تاپیک:
    معرفی بسته ها و کامپایلرهای مختلف
    دانلود Dev c
    دانلود کد بلوک
    دانلود glut
    دانلود freeglut
    نصب glut بر Dev c
    نصب freeglut بر code::blocks
    برنامه opengl اندروید کار شده در در اکلیپس

    سورس opengl

    صفحه دوم پستهای 21 تا 40
    opengl
    صفحه دوم پستهای 41 تا 60
    webgl
     
    آخرین ویرایش: ‏7 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏4 سپتامبر 2019
  10. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    بنام خدا.
    در محیط ویندوز بسته های مختلفی از opengl معرفی شده اند مثل glut یا freeglut و بسته های دیگر.
    کامپایلرهای مختلفی هم برای کار موجود است.

    معروف ترین محیط ویژوال سی است.
    بعدی کدبلوک code::blocks
    و بعدی Dev c
    -------------
    پس دقت کنید کدام بسته را داریم روی کدام کامپایلر نصب می کنیم.
     
    نوشته شده توسط saalek110 در ‏4 سپتامبر 2019
  11. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    دانلود Dev c

    به لینک زیر بروید و طبق راهنمایی این سایت Dev c را دانلود کنید:
    How to install Dev-C++ and GLUT


    در پست سوم تاپیک
    نکات توابع سی و بعضی مهارتها

    لینک دانلود این کامپایلر گذاشته شده.
    به تالار سی مراجعه کنید. ولی بهتر است از سایت اصلی دانلود کنید. چون ممکن است کامپیوتر من ویروسی باشد.

    توجه کنید ممکن است بسته opengl یی که ما کار می کنیم با ورژن های دیگر Dev c کار نکند. همچنین پروژه سی ساخته شده نه سی پلاس.
    البته خودتان می توانید با ورژن های دیگر و ساختن پروژه سی پلاس امتحان کنید ولی در اینجا با این ورژن و پروژه سی کار شده.
     
    آخرین ویرایش: ‏4 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏4 سپتامبر 2019
  12. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    دانلود کد بلوک:
    s3.jpg

    Download binary
    w1.jpg
    codeblocks-17.12mingw-setup.exe را دانلود کنید. دو تا لینک دانلود هست. اولی مشکل ندارد. دومی بحث تحریم و ... دارد.
     
    نوشته شده توسط saalek110 در ‏4 سپتامبر 2019
  13. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    دانلود glut :
    از این لینک دانلود کنید:
    http://chortle.ccsu.edu/Bloodshed/glutming.zip
    در این تاپیک آموزش نصب این بسته بر Dev c گفته می شود.


    من بسته را ضمیمه می کنم ولی شما از سایت اصلی دانلود کنید. ممکن است کامپیوتر من ویروسی باشد.
     

    پیوست ها:

    • glut.rar
      اندازه فایل:
      کیلوبایت 165.1
      نمایش ها:
      2
    آخرین ویرایش: ‏4 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏4 سپتامبر 2019
  14. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113

    پیوست ها:

    نوشته شده توسط saalek110 در ‏4 سپتامبر 2019
  15. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    نصب glut بر Dev c

    c2.jpg
    منبع:
    How to install Dev-C++ and GLUT
    در پستهای قبلی در مورد دانلود Dev c صحبت کردیم.

    . نکته : طبق آموزش سایت پوشه پروژه را در درایو سی بسازید.
    ممکنه اگر جای پوشه عوض شود روش تنظیم این آموزش درست درنیاید.
    نرم افزار هم در درایو سی نصب می شود.ورژنهای دیگر در پروگرام فایل ایکس86 نصب می شود

    c11.png

    پروژه هم از نوع سی باید می بود که سایت هم همین را گفته. من وقتی نوع سی پلاس (در شروع ساخت پروژه) انتخاب کردم برنامه دچار خطا شد.
    آموزش آن سایت به طور خلاصه این میشه که
    اول نرم افزار را دانلود و نصب کنید
    دوم بسته مخصوص را از از پست قبل یا سایت آموزش دهنده دانلود کنید و
    به تریتب زیر در جاهای خود بیاندازید.
    اگر فایل موجود بود هم ریپلیس کنید چون ورژنش مهم است.
    -----------------------
    فایل
    glut.h
    به پوشه اینکلود
    dev
    و بعد داخل پوشه
    GL
    -------------------
    فایل
    libglut32.a
    به پوشه
    lib
    از
    dev
    -------------------
    فایل
    glut32.dll
    به پوشه سیستم 32
    از ویندوز
    system32
    C:\Windows\System32
    -------------------------
    بعد یک پروژه سی خالی(طبق شکل زیر)

    c14.jpg

    فایل سورسی اضافه کنید(از منوی پروجکت و بعد
    new file
    پروژه و کدها داخل آن درج
    و اجرا
    ------------------------------------------------
    طبق دستور سایت فایلهای زیر را از پوشه های نرم افزار پیدا کنید و به آپشن پروژه اضافه کنید.
    در منوی پروژه می توانید آپشن پروژه را پیدا کنید و بروید به پارامترها.
    libopengl32.a
    libglu32.a
    libglut32.a
    c18.png c20.png c21.png
    PHP:
    #include <GL/glut.h>

    const int   A = 500;  /* length of a side of the monitor window */
    const float B = 500;  /* length of a side of the clipping rectangle */
    const float C = 200;  /* length of a side of the square the program draws */

    void myinit(void)
    {
      glClearColor(0.7, 0.7, 0.7, 0.0); /* gray background */
      glMatrixMode(GL_PROJECTION);      /* In World coordinates: */
      glLoadIdentity();                 /* position the "clipping rectangle" */
      gluOrtho2D( -B/2, B/2, -B/2, B/2);/* at -B/2, its right edge at +B/2, its bottom */
      glMatrixMode(GL_MODELVIEW);       /* edge at -B/2 and its top edge at +B/2 */
    }

    void display( void )
    {
                                   
      glClear(GL_COLOR_BUFFER_BIT);     /* clear the window */
      glMatrixMode(GL_MODELVIEW);       /* The following coordinates are expressed */
      glLoadIdentity();                 /* in terms of World coordinates */

      glBegin(GL_POLYGON) ;             /* draw a filled polygon */
          glColor3f ( 1.0, 0.3, 0.2);       /* draw in light red */
          glVertex2f( -C/2, -C/2 );         /* (x,y) */
          glVertex2f(  C/2, -C/2 );         /* (x,y) */
          glVertex2f(  C/2,  C/2 );         /* (x,y) */
          glVertex2f( -C/2,  C/2 );         /* (x,y) */
      glEnd();

      glFlush();                        /* send all commands */
    }
    int main(int argc, char** argv)
    {
      glutInit(&argc,argv);
      glutInitWindowSize( A, A );       /* A x A pixel screen window  */

      glutInitDisplayMode( GLUT_RGB | GLUT_SINGLE);
      glutCreateWindow("My Rectangle"); /* window title                   */
      glutDisplayFunc(display);         /* tell OpenGL main loop what     */
      myinit();                         /* set attributes                 */

      glutMainLoop();                   /* pass control to the main loop  */
    }
    نتیجه اجرا:

    d1.jpg

    فایل
    dll
    را هم کنار فایل اجرایی قرار دادم تا اجرا بشه.
    در پوشه سیستم 32 انداختیم ولی گویا پیدا نکرده بود. کنارش انداختم.
     
    آخرین ویرایش: ‏12 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏4 سپتامبر 2019
  16. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    نصب freeglut بر code::blocks:
    محتویات دانلود freeglut را بریزید روی پوشه
    C:\Program Files (x86)\CodeBlocks\mingw
    ریپلیس کنید اگر موجود بود.
    freeglut.dll
    را از همین پوشه های که ریختید پیدا کنید و یک کپی بریزید در
    C:\Windows


    بعد دو تا فایل است باید پیدا کنید و چند خطش را عوض کنید.
    ======================
    فایل اول در مسیر
    C:\Program Files (x86)\CodeBlocks\share\CodeBlocks\templates\wizard\glut
    به نام
    wizard.script
    ----------------------------------
    This line "project.AddLinkLib(_T("Glut32"));" should now say "project.AddLinkLib(_T("freeglut"));"

    Also, this line "if (!VerifyLibFile(dir_nomacro_lib, _T("glut32"), _T("GLUT's"))) return false;" should now say "if (!VerifyLibFile(dir_nomacro_lib, _T("freeglut"), _T("GLUT's"))) return false;"
    --------------------------------------
    فایل دوم در مسیر
    C:\Program Files (x86)\CodeBlocks\share\CodeBlocks\templates
    به نام
    glut.cbp
    ---------------------------------------------------
    See this line "<Add library="Glut32" />" should now say "<Add library="freeglut" />"
    ===============================
    فایل را نمی توانید بعدش سیو کنید. اول در یک درایو دیگه سیو کنید و بعد
    move
    کنید سرجاش.
    move and replace
    ----------------------------------------------------
    بعد یک پروژه از نوع
    Glut
    بسازید و کار تمام است.

    e1.jpg


    اون جایی که مسیر
    Glut
    می خواهد
    پوشه
    mingw
    خود نرم افزار کد بلوک را بدهید.

    e2.jpg

    نتیجه اجرای کد این پروژه این است:

    e3.jpg

    شکلهای هندسی نورپردازی شده در حال چرخش.
     
    آخرین ویرایش: ‏12 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏4 سپتامبر 2019
  17. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    برنامه opengl اندروید در اکلیپس
    منبع

    کد سایت:
    PHP:

    /* GraphicGlDemoActivity.java
    * Author: Yong Bakos
    * Since: 11/26/2012
    * Thanks to:
    * Cube: http://intransitione.com/blog/create-a-spinning-cube-with-opengl-es-and-android/
    * OpenGL Boilerplate: http://www.jayway.com/2009/12/03/opengl-es-tutorial-for-android-part-i/
    */

    package com.humanoriented.sudoku;
    import java.nio.ByteBuffer;
    import java.nio.ByteOrder;
    import java.nio.FloatBuffer;
    import javax.microedition.khronos.egl.EGLConfig;
    import javax.microedition.khronos.opengles.GL10;
    import android.app.Activity;
    import android.opengl.GLSurfaceView;
    import android.opengl.GLSurfaceView.Renderer;
    import android.opengl.GLU;
    import android.os.Bundle;
    import android.view.Window;
    import android.view.WindowManager;
    public class GraphicGlDemoActivity extends Activity {
    public class DemoRenderer implements Renderer {
    private Cube cube = new Cube();
    private float rotation;
    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
    gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
    // Depth buffer setup.
    gl.glClearDepthf(1.0f);
    // Enables depth testing.
    gl.glEnable(GL10.GL_DEPTH_TEST);
    // The type of depth testing to do.
    gl.glDepthFunc(GL10.GL_LEQUAL);
    // Really nice perspective calculations.
    gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
    }
    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) {
    // Sets the current view port to the new size.
    gl.glViewport(0, 0, width, height);
    // Select the projection matrix
    gl.glMatrixMode(GL10.GL_PROJECTION);
    // Reset the projection matrix
    gl.glLoadIdentity();
    // Calculate the aspect ratio of the window
    GLU.gluPerspective(gl, 45.0f, (float) width / (float) height, 0.1f, 100.0f);
    // Select the modelview matrix
    gl.glMatrixMode(GL10.GL_MODELVIEW);
    // Reset the modelview matrix
    gl.glLoadIdentity();
    }
    @Override
    public void onDrawFrame(GL10 gl) {
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
    gl.glLoadIdentity();
    gl.glTranslatef(0.0f, 0.0f, -10.0f);
    gl.glRotatef(rotation, 1.0f, 1.0f, 1.0f);
    cube.draw(gl);
    gl.glLoadIdentity();
    rotation -= 0.15f;
    }
    }
    class Cube {
    private FloatBuffer mVertexBuffer;
    private FloatBuffer mColorBuffer;
    private ByteBuffer mIndexBuffer;
    private float vertices[] = {
    -1.0f, -1.0f, -1.0f,
    1.0f, -1.0f, -1.0f,
    1.0f, 1.0f, -1.0f,
    -1.0f, 1.0f, -1.0f,
    -1.0f, -1.0f, 1.0f,
    1.0f, -1.0f, 1.0f,
    1.0f, 1.0f, 1.0f,
    -1.0f, 1.0f, 1.0f
    };
    private float colors[] = {
    0.0f, 1.0f, 0.0f, 1.0f,
    0.0f, 1.0f, 0.0f, 1.0f,
    1.0f, 0.5f, 0.0f, 1.0f,
    1.0f, 0.5f, 0.0f, 1.0f,
    1.0f, 0.0f, 0.0f, 1.0f,
    1.0f, 0.0f, 0.0f, 1.0f,
    0.0f, 0.0f, 1.0f, 1.0f,
    1.0f, 0.0f, 1.0f, 1.0f
    };
    private byte indices[] = {
    0, 4, 5, 0, 5, 1,
    1, 5, 6, 1, 6, 2,
    2, 6, 7, 2, 7, 3,
    3, 7, 4, 3, 4, 0,
    4, 7, 6, 4, 6, 5,
    3, 0, 1, 3, 1, 2
    };
    public Cube() {
    ByteBuffer byteBuf = ByteBuffer.allocateDirect(vertices.length * 4);
    byteBuf.order(ByteOrder.nativeOrder());
    mVertexBuffer = byteBuf.asFloatBuffer();
    mVertexBuffer.put(vertices);
    mVertexBuffer.position(0);
    byteBuf = ByteBuffer.allocateDirect(colors.length * 4);
    byteBuf.order(ByteOrder.nativeOrder());
    mColorBuffer = byteBuf.asFloatBuffer();
    mColorBuffer.put(colors);
    mColorBuffer.position(0);
    mIndexBuffer = ByteBuffer.allocateDirect(indices.length);
    mIndexBuffer.put(indices);
    mIndexBuffer.position(0);
    }
    public void draw(GL10 gl) {
    gl.glFrontFace(GL10.GL_CW);
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVertexBuffer);
    gl.glColorPointer(4, GL10.GL_FLOAT, 0, mColorBuffer);
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
    gl.glDrawElements(GL10.GL_TRIANGLES, 36, GL10.GL_UNSIGNED_BYTE,
    mIndexBuffer);
    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glDisableClientState(GL10.GL_COLOR_ARRAY);
    }
    }
    @Override
    public void onCreate(Bundle state) {
    super.onCreate(state);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    GLSurfaceView view = new GLSurfaceView(this);
    view.setRenderer(new DemoRenderer());
    setContentView(view);
    }
    }
    تغییرات:
    اول اینکه : این خطش را استفاده نکنید و کد پروژه خودتان را استفاده کنید:
    PHP:
    package com.humanoriented.sudoku;
    دوم : بروید انتهای کد ببینید تابع onCreate را چطور تغییر داده. همان تغییرات را اعمال کنید.
    سوم : دو کلاس DemoRenderer و Cube که داخل کلاس MainActivity اضافه کرده اضافه کنید.
    جهارم: ایمپورت ها را هم اضافه کنید.
    نتیجه اجرا: یک مکعب رنگی در حال چرخش.

    a1.png
     
    آخرین ویرایش: ‏12 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏4 سپتامبر 2019
  18. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    یکی از کامپایلرهای معروف هم ویژوال سی است که من فعلا چون نصب ندارم نمی توانم روش کار در آن را پست بزنم ولی از معروف ترین هاست و با سرچ سریع پیدا می کنید.

    c1.jpg
     
    نوشته شده توسط saalek110 در ‏4 سپتامبر 2019
  19. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    نوشته شده توسط saalek110 در ‏4 سپتامبر 2019
  20. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    maddocks-farm-edible-flowers.png
     
    آخرین ویرایش: ‏12 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏4 سپتامبر 2019

به اشتراک بگذارید