صفحه 8 از 10 اولاول ... 678910 آخرآخر
نمایش نتایج 281 تا 320 از 376

نام تاپیک: آموزش OpenGL

  1. #281

    نقل قول: آموزش OpenGL

    نقل قول نوشته شده توسط davod_ مشاهده تاپیک
    درود به دوستان

    این سه خط چیکار میکنه؟ممنون میشم راهنماییم کنین
    glutAttachMenu(GLUT_RIGHT_BUTTON);
    glutAttachMenu(GLUT_MIDDLE_BUTTON);
    glutMouseFunc(mouse);

    سپاس
    سلام دوست عزیز،
    خط اول برای ارتباط کلید راست به منویی که از قبل نوشته شده هست و همچنین خط دوم نیز برای ارتباط منو با کلید وسط موس هستش.
    خط آخر هم تابع کالبکی هستش که باید به برنامه بفهمونیم از کدوم تابع برای عکس العمل نشون دادن به رویدادهای موس استفاده کنه، که در تابع main نوشته میشه و اسمی که در ورودی اون نوشته شده(mouse) همون تابع مورد نظر هستش.

  2. #282
    کاربر دائمی
    تاریخ عضویت
    اردیبهشت 1391
    محل زندگی
    خوی
    پست
    454

    نقل قول: آموزش OpenGL

    سلام
    من می خواستم یه برنامه به شیوه rastering بنویسم و نحوه نوشتن به این شیوه رو هم مطالعه کردم ولی آدرس دهی خونه ها رو خوب متوجه نشدم.میشه کمی به من توضیح بدین جریان چیه؟
    ممنون از لطفتون

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

    نقل قول: آموزش OpenGL

    یکی از دوستان در مورد بافت ها سئوال پرسیده بود و در خواست یک مثال ساده از لود کردن یک فایل bmp توسط سی++ و قرار دادن بعنوان بافت را داشته بود من این کد را زدم که ضمیمه این پست است <br>
    برای اینکار ما ابتدا باید فایل را باز کنیم و هدر های فایل را بخونیم و اندازه طول و عرض فایل بیتمپ را بدست بیاریم و بعد از اون بوسیله توابع یک تکسچر ایجاد و مقید کنیم برای توضیحات مفصل تر از لینک های زیر استفاده کنید :
    http://nehe.gamedev.net/tutorial/texture_mapping/12038/
    http://www.opengl-tutorial.org/begin...textured-cube/



    #include <iostream>
    #include <GL/gl.h> //سر فایل که هسته اپن جی ال را به برنامه اضافه می کند

    #include <GL/glut.h>//سر فایل برای اضافه کردن توابع مورد نیاز ایجاد پنجره

    GLfloat angle = 0.0;// برای چرخش مکعب ااین متغیر استفاده می کنیم ز

    GLuint textureID; // ایجاد یک متغیر برای ایجاد شناسه برای بافت
    GLuint loadBMP_custom(const char * imagepath){// تابع ساده برای لود کردن تصاویر بیتمپ از نوع 24 بیتی

    // خواندن اطلاعات هدر فایل بیتمپ
    unsigned char header[54]; // هر فایل بیتمپ با 54 بایت هدر شروع می شود که در این متغیر ذخیره می شود
    unsigned int dataPos; // نگهداری موقعیت ما در فایل که تا کجا خوانده شده
    unsigned int width, height;// متغیر برای ذخیره کردن طول و عرض بیتمپ
    unsigned int imageSize; // = width*height*3 اندازه کلی تصویر برابر است با طول در عرض در 3 که شامل 3 مقدار رنگی است
    // داده های واقعی بیتمپ در این متغیر ذخیره می شوند
    unsigned char * data;

    // باز کردن فایل
    FILE * file = fopen(imagepath,"rb");//آدرس از ورودی تابع اصلی گرفته می شود
    if (!file) {printf("Image could not be opened\n"); return 0;}

    if ( fread(header, 1, 54, file)!=54 ){ // اگر 54 بایت هدر نداریم پس یک مشکل وجود دارد
    printf("Not a correct BMP file\n");
    return 0;
    }
    //هر فایل بیتمپ با این دو حرف شروع می شود
    if ( header[0]!='B' || header[1]!='M' ){
    printf("Not a correct BMP file\n");
    return 0;
    }

    // گرفتن اطلاعات از هدری که قبلاً خوانده شده
    dataPos = *(int*)&(header[0x0A]);
    imageSize = *(int*)&(header[0x22]);
    width = *(int*)&(header[0x12]);
    height = *(int*)&(header[0x16]);

    // بعضی فایل های بیتمپ درست قالب بندی نشده اسند
    if (imageSize==0) imageSize=width*height*3;
    if (dataPos==0) dataPos=54; // گذر از هدر فایل بیتمپ

    // ساخت یک بافر
    data = new unsigned char [imageSize];

    // خواندن داده های واقعی از فایل به داخل بافر
    fread(data,1,imageSize,file);

    //همه چیز در حافظه است الان می تونیم فایل را ببندیم
    fclose(file);

    //بیتمپ ها با فرمت بی جی آر ذخیره می شوند
    //است که باید به آرایش ار جی بی تبدیل شود.
    //BGR 2 RGB
    for (int i = 0; i < imageSize; i+=3)
    {
    char c = data[i];
    data[i] = data[i+2];
    data[i+2] = c;
    }


    glGenTextures(1, &textureID); // ساخت یک بافت اپن جی ال

    glBindTexture(GL_TEXTURE_2D, textureID);// مقید سازی بافت ساخته شده جدید تمام توابع بعدی این بافت را تغییر می دهند

    // دادن تصویر به اپن جی ال
    glTexImage2D(GL_TEXTURE_2D, 0,GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTE R,GL_LINEAR); // فیلتر سازی خطی
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTE R,GL_LINEAR);
    }
    void init (void) {

    loadBMP_custom("NeHe.bmp"); // لود کردن تصویر از آدرس داده شده
    glEnable(GL_TEXTURE_2D); // فعال کردن نگاشت بافت دو بعدی
    glShadeModel(GL_SMOOTH); // فعال کردن نرم کننده
    glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // مشخص کردن رنگ بک گراند
    glClearDepth(1.0f); // فعال کردن بافر عمق
    glEnable(GL_DEPTH_TEST); // فعال کردن تست عمق
    glDepthFunc(GL_LEQUAL); // مشخص کردن نوع تست عمق
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // ساخت پرسپکتیو
    glBlendFunc(GL_SRC_ALPHA,GL_ONE); // فعال کردن بلندینگ و مشخص کردن نوع ان
    glEnable(GL_BLEND);
    }
    void display (void) {

    glClearColor (0.0,0.0,0.0,1.0);
    glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// پاک کردن بافر
    glLoadIdentity(); // لود ماتریس همانی یا 1
    gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);//مشخص کردن موقعیت دوربین
    glRotatef(angle, 1.0, 0.0, 0.0);//چرخش با زاویه آنگل
    glRotatef(angle, 0.0, 1.0, 0.0);//چرخش با زاویه آنگل
    glRotatef(angle, 0.0, 0.0, 1.0);//چرخش با زاویه آنگل

    glBegin(GL_QUADS);
    /*برای نگاشت صحیح یک بافت روی مکعب , شما باید مطمئن شوید که بالا سمت راست بافت به بالا سمت راست مکعب نگاشت میشود و به همین ترتیب گوشه های دیگر اگر گوشه ها با یکدیگر مچ نشوند ممکن است تصویری نمایش داده نشود یا تصویر بر عکس شود ویا...
    اولین glTexCoord2f روی محور ایکس سمت چپ است 0.5f وسط بافت و 1.0f سمت راست بافت است .
    بنابراین حالا ما می دانیم که گوشه بالا سمت چپ با 0.0f در محور x و 1.0f برای محور y در بافت و بالا سمت چپ مکعب دارای مختصات -1.0f برای x و 1.0f برای محور y است و به همین ترتیب تا آخر*/
    glTexCoord2f(0.0f, 0.0f); //مشخص کردن مختصات بافت
    glVertex3f(-1.0f, -1.0f, 1.0f);//مشخص کردن رأس اول مکعب
    glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
    glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
    glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
    // Back Face
    glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
    glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
    glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
    glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
    // Top Face
    glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
    glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
    glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
    glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
    // Bottom Face
    glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
    glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
    glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
    glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
    // Right face
    glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
    glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
    glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
    glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
    // Left Face
    glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
    glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
    glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
    glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
    glEnd();



    glutSwapBuffers();
    angle ++;

    }

    void reshape (int w, int h) {

    glViewport (0, 0, (GLsizei)w, (GLsizei)h);

    glMatrixMode (GL_PROJECTION);

    glLoadIdentity ();

    gluPerspective (60, (GLfloat)w / (GLfloat)h, 1.0, 100.0);

    glMatrixMode (GL_MODELVIEW);

    }

    int main (int argc, char **argv) {

    glutInit (&argc, argv);

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);

    glutInitWindowSize (500, 500);

    glutInitWindowPosition (100, 100);

    glutCreateWindow ("A basic OpenGL Window");

    init ();

    glutDisplayFunc (display);

    glutIdleFunc (display);

    glutReshapeFunc (reshape);

    glutMainLoop ();

    return 0;

    }
    عکس های ضمیمه عکس های ضمیمه
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله amin1softco : سه شنبه 28 خرداد 1392 در 20:43 عصر

  4. #284
    کاربر دائمی آواتار orache
    تاریخ عضویت
    مرداد 1391
    محل زندگی
    رشت
    سن
    28
    پست
    571

    نقل قول: آموزش OpenGL

    اقا یک سوال داشتم من چجوری میتونم حرکت موس رو پیدا کنم ؟؟ و چجوری میتونم بگم وقتی موس روی فلان ابجکت رفت فلان اتفاق بی افته
    در کل میخام این کار رو انجام بدم -> یک مربع 2 بعدی ترسیم کنم و وقتی موس روی اون مربع قرار گرفت و کلید چپ زده شد و موس به هرطرف رفت اون مربع هم به همون طرف بده
    کسی میتونه کمکم کنه ؟؟
    ممنون

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

    نقل قول: آموزش OpenGL

    من والا چندتا مثال برای کار با مأوس گذاشتم قبلاً
    حالا نمی دونم این درسته یا نه ولی من خودم اگر بودم اول یک لیست پیوندی درست می کردم و اسمش را می گذاشتم لیست نمایش و بعد برای هر فرم می اومدم و یک بار این لیست را پیمایش می کردم و در هر گره مختصات آبجکت یا شکل را ذخیره می کردم مثلاً دو تا متغیر x,y + اینکه یک شرط که در اون فرم مختصات مأوس کجاست و یک فلگ مثلاً تعریف می کردم که با شرط بیاد و چک کنه اگر مختصات مأوس با مختصات این آبجکت بر خورد داره اون فلاگ مقدارش عوض بشه و اینجوری کل صحنه دستم بود
    برای همین مثالم این کفایت می کنه ولی چون یک مربع بیشتر نیست می تونید یک کلاس تعریف کنید مختصات این مربع در اون ذخیره بشه.....

  6. #286
    کاربر دائمی آواتار orache
    تاریخ عضویت
    مرداد 1391
    محل زندگی
    رشت
    سن
    28
    پست
    571

    نقل قول: آموزش OpenGL

    نه داداش ببین من باید یه جوری این کد رو بنویسم که بتونم تو کتابخونه ی خودم بذارمش و به عنوان مثال یککاربر بتونه با 1 خط کد همه چی رو تعریف کنه من دارم از دستورات جی ال یو تی استفاده میکنم (فعلا )

  7. #287
    کاربر دائمی
    تاریخ عضویت
    اردیبهشت 1391
    محل زندگی
    خوی
    پست
    454

    نقل قول: آموزش OpenGL

    نقل قول نوشته شده توسط amin1softco مشاهده تاپیک
    یکی از دوستان در مورد بافت ها سئوال پرسیده بود و در خواست یک مثال ساده از لود کردن یک فایل bmp توسط سی++ و قرار دادن بعنوان بافت را داشته بود من این کد را زدم که ضمیمه این پست است <br>
    برای اینکار ما ابتدا باید فایل را باز کنیم و هدر های فایل را بخونیم و اندازه طول و عرض فایل بیتمپ را بدست بیاریم و بعد از اون بوسیله توابع یک تکسچر ایجاد و مقید کنیم برای توضیحات مفصل تر از لینک های زیر استفاده کنید :
    http://nehe.gamedev.net/tutorial/texture_mapping/12038/
    http://www.opengl-tutorial.org/begin...textured-cube/



    #include <iostream>
    #include <GL/gl.h> //سر فایل که هسته اپن جی ال را به برنامه اضافه می کند

    #include <GL/glut.h>//سر فایل برای اضافه کردن توابع مورد نیاز ایجاد پنجره

    GLfloat angle = 0.0;// برای چرخش مکعب ااین متغیر استفاده می کنیم ز

    GLuint textureID; // ایجاد یک متغیر برای ایجاد شناسه برای بافت
    GLuint loadBMP_custom(const char * imagepath){// تابع ساده برای لود کردن تصاویر بیتمپ از نوع 24 بیتی

    // خواندن اطلاعات هدر فایل بیتمپ
    unsigned char header[54]; // هر فایل بیتمپ با 54 بایت هدر شروع می شود که در این متغیر ذخیره می شود
    unsigned int dataPos; // نگهداری موقعیت ما در فایل که تا کجا خوانده شده
    unsigned int width, height;// متغیر برای ذخیره کردن طول و عرض بیتمپ
    unsigned int imageSize; // = width*height*3 اندازه کلی تصویر برابر است با طول در عرض در 3 که شامل 3 مقدار رنگی است
    // داده های واقعی بیتمپ در این متغیر ذخیره می شوند
    unsigned char * data;

    // باز کردن فایل
    FILE * file = fopen(imagepath,"rb");//آدرس از ورودی تابع اصلی گرفته می شود
    if (!file) {printf("Image could not be opened\n"); return 0;}

    if ( fread(header, 1, 54, file)!=54 ){ // اگر 54 بایت هدر نداریم پس یک مشکل وجود دارد
    printf("Not a correct BMP file\n");
    return 0;
    }
    //هر فایل بیتمپ با این دو حرف شروع می شود
    if ( header[0]!='B' || header[1]!='M' ){
    printf("Not a correct BMP file\n");
    return 0;
    }

    // گرفتن اطلاعات از هدری که قبلاً خوانده شده
    dataPos = *(int*)&(header[0x0A]);
    imageSize = *(int*)&(header[0x22]);
    width = *(int*)&(header[0x12]);
    height = *(int*)&(header[0x16]);

    // بعضی فایل های بیتمپ درست قالب بندی نشده اسند
    if (imageSize==0) imageSize=width*height*3;
    if (dataPos==0) dataPos=54; // گذر از هدر فایل بیتمپ

    // ساخت یک بافر
    data = new unsigned char [imageSize];

    // خواندن داده های واقعی از فایل به داخل بافر
    fread(data,1,imageSize,file);

    //همه چیز در حافظه است الان می تونیم فایل را ببندیم
    fclose(file);

    //بیتمپ ها با فرمت بی جی آر ذخیره می شوند
    //است که باید به آرایش ار جی بی تبدیل شود.
    //BGR 2 RGB
    for (int i = 0; i < imageSize; i+=3)
    {
    char c = data[i];
    data[i] = data[i+2];
    data[i+2] = c;
    }


    glGenTextures(1, &textureID); // ساخت یک بافت اپن جی ال

    glBindTexture(GL_TEXTURE_2D, textureID);// مقید سازی بافت ساخته شده جدید تمام توابع بعدی این بافت را تغییر می دهند

    // دادن تصویر به اپن جی ال
    glTexImage2D(GL_TEXTURE_2D, 0,GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTE R,GL_LINEAR); // فیلتر سازی خطی
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTE R,GL_LINEAR);
    }
    void init (void) {

    loadBMP_custom("NeHe.bmp"); // لود کردن تصویر از آدرس داده شده
    glEnable(GL_TEXTURE_2D); // فعال کردن نگاشت بافت دو بعدی
    glShadeModel(GL_SMOOTH); // فعال کردن نرم کننده
    glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // مشخص کردن رنگ بک گراند
    glClearDepth(1.0f); // فعال کردن بافر عمق
    glEnable(GL_DEPTH_TEST); // فعال کردن تست عمق
    glDepthFunc(GL_LEQUAL); // مشخص کردن نوع تست عمق
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // ساخت پرسپکتیو
    glBlendFunc(GL_SRC_ALPHA,GL_ONE); // فعال کردن بلندینگ و مشخص کردن نوع ان
    glEnable(GL_BLEND);
    }
    void display (void) {

    glClearColor (0.0,0.0,0.0,1.0);
    glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// پاک کردن بافر
    glLoadIdentity(); // لود ماتریس همانی یا 1
    gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);//مشخص کردن موقعیت دوربین
    glRotatef(angle, 1.0, 0.0, 0.0);//چرخش با زاویه آنگل
    glRotatef(angle, 0.0, 1.0, 0.0);//چرخش با زاویه آنگل
    glRotatef(angle, 0.0, 0.0, 1.0);//چرخش با زاویه آنگل

    glBegin(GL_QUADS);
    /*برای نگاشت صحیح یک بافت روی مکعب , شما باید مطمئن شوید که بالا سمت راست بافت به بالا سمت راست مکعب نگاشت میشود و به همین ترتیب گوشه های دیگر اگر گوشه ها با یکدیگر مچ نشوند ممکن است تصویری نمایش داده نشود یا تصویر بر عکس شود ویا...
    اولین glTexCoord2f روی محور ایکس سمت چپ است 0.5f وسط بافت و 1.0f سمت راست بافت است .
    بنابراین حالا ما می دانیم که گوشه بالا سمت چپ با 0.0f در محور x و 1.0f برای محور y در بافت و بالا سمت چپ مکعب دارای مختصات -1.0f برای x و 1.0f برای محور y است و به همین ترتیب تا آخر*/
    glTexCoord2f(0.0f, 0.0f); //مشخص کردن مختصات بافت
    glVertex3f(-1.0f, -1.0f, 1.0f);//مشخص کردن رأس اول مکعب
    glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
    glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
    glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
    // Back Face
    glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
    glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
    glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
    glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
    // Top Face
    glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
    glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
    glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
    glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
    // Bottom Face
    glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
    glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
    glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
    glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
    // Right face
    glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
    glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
    glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
    glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
    // Left Face
    glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
    glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
    glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
    glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
    glEnd();



    glutSwapBuffers();
    angle ++;

    }

    void reshape (int w, int h) {

    glViewport (0, 0, (GLsizei)w, (GLsizei)h);

    glMatrixMode (GL_PROJECTION);

    glLoadIdentity ();

    gluPerspective (60, (GLfloat)w / (GLfloat)h, 1.0, 100.0);

    glMatrixMode (GL_MODELVIEW);

    }

    int main (int argc, char **argv) {

    glutInit (&argc, argv);

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);

    glutInitWindowSize (500, 500);

    glutInitWindowPosition (100, 100);

    glutCreateWindow ("A basic OpenGL Window");

    init ();

    glutDisplayFunc (display);

    glutIdleFunc (display);

    glutReshapeFunc (reshape);

    glutMainLoop ();

    return 0;

    }


    ممنون داداش خیلی لطف کردی.مخصوصا توضیحات فارسی که عالی بود
    این عکسی رو که لود می کنیم میشه رو قوری هم انداخت.آخه چطور باید گوشه ها رو قوری تنظیم کنیم.میشه اینکارو کرد؟

  8. #288
    کاربر دائمی
    تاریخ عضویت
    اردیبهشت 1391
    محل زندگی
    خوی
    پست
    454

    نقل قول: آموزش OpenGL

    حل شد
    #include "stdafx.h"
    #include <gl/freeglut.h>
    #include <iostream>
    #include <gl/glut.h>

    static bool p=true;
    GLfloat rot = 0.0;

    GLuint textureID;
    GLuint loadBMP_custom(const char * imagepath)
    {
    unsigned char header[54];
    unsigned int dataPos;
    unsigned int width, height;
    unsigned int imageSize;
    unsigned char * data;
    FILE * file = fopen(imagepath,"rb");
    if (!file)
    {
    printf("Image could not be opened\n"); return 0;
    }

    if ( fread(header, 1, 54, file)!=54 )
    {
    printf("Not a correct BMP file\n");
    return 0;
    }

    if ( header[0]!='B' || header[1]!='M' )
    {
    printf("Not a correct BMP file\n");
    return 0;
    }


    dataPos = *(int*)&(header[0x0A]);
    imageSize = *(int*)&(header[0x22]);
    width = *(int*)&(header[0x12]);
    height = *(int*)&(header[0x16]);


    if (imageSize==0) imageSize=width*height*3;
    if (dataPos==0) dataPos=54;


    data = new unsigned char [imageSize];


    fread(data,1,imageSize,file);


    fclose(file);

    for (int i = 0; i < imageSize; i+=3)
    {
    char c = data[i];
    data[i] = data[i+2];
    data[i+2] = c;
    }


    glGenTextures(1, &textureID);

    glBindTexture(GL_TEXTURE_2D, textureID);

    // دادن تصویر به اپن جی ال
    glTexImage2D(GL_TEXTURE_2D, 0,GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTE R,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTE R,GL_LINEAR);
    }
    void init (void) {
    glEnable(GL_TEXTURE_2D);
    glShadeModel(GL_SMOOTH);
    glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
    glClearDepth(1.0f);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LEQUAL);
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
    glBlendFunc(GL_SRC_ALPHA,GL_ONE);
    glEnable(GL_BLEND);
    }
    void display (void) {

    glClearColor (0.0,0.0,0.0,1.0);
    glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
    if (p==true)
    {
    glPushMatrix();
    loadBMP_custom("nehe.bmp");
    glRotatef(rot, 0.0, 1.0, 0.0);
    glBegin(GL_QUADS);
    glTexCoord2f(0.0f, 0.0f); glVertex3f(1.0f,-1.0f, 1.0f);
    glTexCoord2f(1.0f, 0.0f); glVertex3f( 3.0f, -1.0f, 1.0f);
    glTexCoord2f(1.0f, 1.0f); glVertex3f(2.0f, 0.0f, 1.0f);
    glTexCoord2f(0.0f, 1.0f); glVertex3f( 3.0f, -1.0f, 1.0f);
    glEnd();
    glPopMatrix();
    glPushMatrix();
    loadBMP_custom("nehe1.bmp");
    glRotatef(rot,1.0,0.0,0.0);
    glTranslatef(-2,0,0);
    glutSolidTeapot(0.5);
    glPopMatrix();
    }
    else
    {
    glPushMatrix();
    loadBMP_custom("nehe1.bmp");
    glRotatef(rot, 0.0, 1.0, 0.0);
    glBegin(GL_QUADS);
    glTexCoord2f(0.0f, 0.0f); glVertex3f(1.0f, -1.0f, 1.0f);
    glTexCoord2f(1.0f, 0.0f); glVertex3f( 3.0f, -1.0f, 1.0f);
    glTexCoord2f(1.0f, 1.0f); glVertex3f(2.0f, 0.0f, 1.0f);
    glTexCoord2f(0.0f, 1.0f); glVertex3f( 3.0f, -1.0f, 1.0f);
    glEnd();
    glPopMatrix();
    glPushMatrix();
    loadBMP_custom("nehe.bmp");
    glRotatef(rot,1.0,0.0,0.0);
    glTranslatef(-2,0,0);
    glutSolidTeapot(0.5);
    glPopMatrix();
    }
    glutSwapBuffers();

    }
    void idle()
    {
    rot++;
    display();
    }


    void keyboard (unsigned char key, int x, int y)
    {
    if (key=='a')
    {
    if (p==true)
    p=false;
    else
    p=true;
    }
    }

    void reshape (int w, int h) {

    glViewport (0, 0, (GLsizei)w, (GLsizei)h);

    glMatrixMode (GL_PROJECTION);

    glLoadIdentity ();

    gluPerspective (60, (GLfloat)w / (GLfloat)h, 1.0, 100.0);

    glMatrixMode (GL_MODELVIEW);

    }

    int main (int argc, char **argv) {

    glutInit (&argc, argv);

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);

    glutInitWindowSize (1000, 600);

    glutInitWindowPosition (100, 100);

    glutCreateWindow ("Textured");

    init ();

    glutDisplayFunc (display);

    glutIdleFunc (idle);

    glutReshapeFunc (reshape);

    glutKeyboardFunc(keyboard);

    glutMainLoop ();

    return 0;

    }


    بازم ممنون از جناب amin1softco

  9. #289

    نقل قول: آموزش OpenGL

    نقل قول نوشته شده توسط amin1softco مشاهده تاپیک
    ببنید من خودم برای کار خودم یک فایلی درست کردم با فرمت chm که تمام توابع رو توضیح داده اینجا گذاشتم ازش استفاده کنید فقط نکته ایی که وجو داره وقتی می خواهین سرچ کنید یک * قبل و بعد عبارتتون اضافه کنید از اینجا دریافتش کنید. در ضمن به نظر من رد بوک که آقا پویا گفتندم خیلی چیزه خوبیه یا بلو بوک
    سلام
    چه تاپیک خوب و پرباری.واقعا برای کسی که بخواد کار با این کتابخونه رو شروع کنه عالیه
    فقط میشه این لینک رو دوباره آپ کنید.لینکش دیگه غیرفعال شده


    در مورد pick up کردن و حرکت دوربین هم دوستان قبلا سوال پرسیدن ولی جواب داده نشده ، کسی هست که توابع مربوط به اینارو توضیح بده.مثلا ما تو یه فضای 3 بعدی 8 تا نقطه داریم(رئوس یک مکعب مستطیل) و حالا میخوایم یکی از رئوس رو انتخاب کنیم و اونو حرکت بدیم + اینکه دوربین رو هم بتونیم حرکت بدیم
    آخرین ویرایش به وسیله 3pid71 : چهارشنبه 22 آبان 1392 در 18:48 عصر

  10. #290

    نقل قول: آموزش OpenGL

    سلام برای انتخاب راه های زیادی وجود داره و بیشتر بسته به اینه که از کدوم ویرایش استفاده می کنید. اگر از ویرایش OpenGL 1.2 استفاده می کنید خود API یک دستورالعمل داره که توضیحاتش در لینک زیر موجوده:

    http://www.glprogramming.com/red/chapter13.html

    برای ویرایش های بالاتر بهتره یا از شیدرها استفاده بشه و یا اینکه از روش Ray Pickup که توضیحاتش در کتاب DirextX 9 Game Programming هست استفاده بشه.


    لطفا سوالها رو در تاپیکهای جدا بپرسید

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

    نقل قول: آموزش OpenGL

    این فایل رفرنس های OpenGL2 است که می تونید با یک سرچ ساده بهش دست پیدا کنید فایل ضمیمه است .

    برای پیک کردن به بخش مثال های OpenGL یکسری بزنید فک کنم کارتون راه بندازد.
    http://nehe.gamedev.net/tutorial/pic...sorting/16005/
    فایل های ضمیمه فایل های ضمیمه

  12. #292

    نقل قول: آموزش OpenGL

    سلام
    متاسفانه نمی شد تاپیک جدید ایجاد کنم بنابراین سوالمو همین جا مطرح می کنم:
    من بررسی کردم و نحوه ی استفاده از تابع gluCylinder رو برای کاربرد دلخواهم متوجه شدم . حالا می خوام بدونم چطور می تونم محورهای مختصات رو با استفاده از این تابع رسم کنم. در واقع می خوام که هر کدوم از محور ها یک میله باشه و نه خط. البته طول مشخصی هم داشته باشه که خودم تعیین می کنم. همینطوری با توجه به فرمی که داره متاسفانه نه تنها چیزی برام رسم نمی کنه که حتی اشیاء دیگه ای رو هم که رسم کردم محو می کنه. من روی یک گرید می خوام اینو رسم کنم.

    ممنون می شم اگر جواب بدید.

  13. #293

    نقل قول: آموزش OpenGL

    نقل قول نوشته شده توسط mehran788 مشاهده تاپیک
    سلام دوستان
    کسی می تونه کمکم کنه که تو صفحه یک مخروط و حلقه و قوری داشته باشم؟
    ممنون میشم اگه کسی کمکم کنه
    چند وقته دنبالشم ولی چیزی پیدا نکردم کارم بدجور گیره
    توابع هر سه ی اینها به اسم Teapot Torus & Clone وجود داره که البته clone با استفاده از glucylinder که شعاع دایره ی بالایی رو صفر می دیم رسم می شه. سرچ شما رو به جواب می رسونه.

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

    نقل قول: آموزش OpenGL

    نقل قول نوشته شده توسط Saraji مشاهده تاپیک
    سلام
    متاسفانه نمی شد تاپیک جدید ایجاد کنم بنابراین سوالمو همین جا مطرح می کنم:
    من بررسی کردم و نحوه ی استفاده از تابع gluCylinder رو برای کاربرد دلخواهم متوجه شدم . حالا می خوام بدونم چطور می تونم محورهای مختصات رو با استفاده از این تابع رسم کنم. در واقع می خوام که هر کدوم از محور ها یک میله باشه و نه خط. البته طول مشخصی هم داشته باشه که خودم تعیین می کنم. همینطوری با توجه به فرمی که داره متاسفانه نه تنها چیزی برام رسم نمی کنه که حتی اشیاء دیگه ای رو هم که رسم کردم محو می کنه. من روی یک گرید می خوام اینو رسم کنم.

    ممنون می شم اگر جواب بدید.
    خوب یک استوانه یا میله با تابع درست کن مثلاً :

    GLUquadricObj *quadratic;
    quadratic = gluNewQuadric();
    glRotatef(90.0f, 0.0f, 1.0f, 0.0f);
    gluCylinder(quadratic,0.1f,0.1f,3.0f,32,32);


    و سپس با توابع glPushMatrix glRotatef آن را در محور مورد نظر بچرخان شکل می شه محور مختصات.

  15. #295

    نقل قول: آموزش OpenGL

    نقل قول نوشته شده توسط amin1softco مشاهده تاپیک

    برای پیک کردن به بخش مثال های OpenGL یکسری بزنید فک کنم کارتون راه بندازد.
    http://nehe.gamedev.net/tutorial/pic...sorting/16005/
    این لینکی که دادید باز نمیشه :/

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

    نقل قول: آموزش OpenGL

    ایران تحریم است . 1- فیلتر شکن 2- استفاده از کش گوگل 3- دانلود نسخه کامل آموزش های nehe
    و...

  17. #297

    نقل قول: آموزش OpenGL

    الان این برنامه ای که نوشتم یه نقطه تو صفحه است که با حرکت موس حرکت می کنه.حالا میخوام این یه نقطه رو مثلا بکنم 2 نقطه یا بیشتر که حالا بیام یکیشو انتخاب کنم و فقط همونو جابه جا کنم
    این لینکایی که فرستادید رو نگا کردم ولی نفهمیدم چطوری باید از این تابع gluPickMatrix استفاده کنم :/ کسی هس که راهنماییم کنه؟

    #include<gl/glut.h>
    float lastX = -1.0f;
    float lastY = -1.0f;
    float xdiff = 0.0f;
    float ydiff = 0.0f;
    bool mouseDown = FALSE;
    void init()
    {
    glClearColor(0,0,0,0);
    glMatrixMode(GL_PROJECTION);
    gluOrtho2D(0,2000,0,1000);
    }
    void display()
    {
    glClear(GL_COLOR_BUFFER_BIT);
    glEnable(GL_POINT_SMOOTH);
    glPointSize(10); glBegin(GL_POINTS);
    glColor3f(1.0,0.0,0.4);
    glVertex2i(1000,500);
    glEnd();
    glFlush();
    }
    void moveDisplay(void)
    {
    glTranslatef(xdiff,ydiff,0);
    glutPostRedisplay();
    }
    void mouse(int button, int state, int x, int y)
    {
    if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
    mouseDown = TRUE;
    else
    mouseDown = FALSE;
    }
    void mouseMotion(int x, int y)
    { if (mouseDown)
    { if(lastX==-1)
    lastX=x;
    if(lastY==-1)
    lastY=y;
    xdiff=x-lastX;
    ydiff=-y+lastY;
    lastX=x;
    lastY=y;
    moveDisplay();
    }
    else
    {
    lastX=x;
    lastY=y;
    }
    }
    int main(int argc,char **argv)
    { glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
    glutInitWindowSize(500,500);
    glutInitWindowPosition(200,200);
    glutCreateWindow("moving");
    init();
    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMotionFunc(mouseMotion);
    glutMainLoop();
    return 0;
    }


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

    نقل قول: آموزش OpenGL

    من قبلاً یک برنامه نوشتم بهتره یک نگاهی بهش بندازید ...
    الان با ویژوال 2012 دوباره کامپایلش کردم.
    فایل های ضمیمه فایل های ضمیمه
    • نوع فایل: rar gl3.rar‏ (164.1 کیلوبایت, 86 دیدار)
    آخرین ویرایش به وسیله amin1softco : پنج شنبه 23 آبان 1392 در 22:12 عصر

  19. #299

    نقل قول: آموزش OpenGL

    نقل قول نوشته شده توسط amin1softco مشاهده تاپیک
    من قبلاً یک برنامه نوشتم بهتره یک نگاهی بهش بندازید ...
    الان با ویژوال 2012 دوباره کامپایلش کردم.
    من برنامتونو run کردم ولی راستش نفهمیدم الان ربط این برنامه به سوال من چی بود.الان این توش picking داشت؟ شاید به خاطر اینکه کامپایلر من به#include <stdafx.h>
    error گرفت درست run نشد ولی توی برنامتونم نتونستم تابع مربوطه رو پیدا کنم

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

    نقل قول: آموزش OpenGL

    روش کار برنامه از منوی کناری شکل دایره را انتخاب کنید و چند تا دایره روی صفحه قرار بدید و سپس ماوس را از منوی کناری انتخاب کنید و با کلیک بر روی هر دایره می توانید انتخاب و موقعیت آن را بوسیله ماوس تغییر دهید ....


    به روش پیکینگ OpenGL هم لینکی که پویا گذاشته نمونه برنامه داره .

  21. #301

    نقل قول: آموزش OpenGL

    نقل قول نوشته شده توسط amin1softco مشاهده تاپیک
    روش کار برنامه از منوی کناری شکل دایره را انتخاب کنید و چند تا دایره روی صفحه قرار بدید و سپس ماوس را از منوی کناری انتخاب کنید و با کلیک بر روی هر دایره می توانید انتخاب و موقعیت آن را بوسیله ماوس تغییر دهید ....


    به روش پیکینگ OpenGL هم لینکی که پویا گذاشته نمونه برنامه داره .
    اهان پس برای من درست اجرا نمی کرد.اون 5 تا گزینه ی کنار صفحه میومد ولی چیزی انتخاب نمیشه و صفحه همش پرپر میزنه.
    آره منم همون روش پیکینگ مد نظرمه که میگم باهاش مشکل دارم :/
    به هرحال ممنون

  22. #302

    Post کمک در زمینه حرکت یک شی

    سلام به دوستان گلم من یک برنامه ای نوشتم ساده که بازی پینگ پنگ سگاست
    که به شهر زیر است:
    دو تا مستعطیل داره و یک خط وسط
    یک توپ به شکل مربع
    حال من یک جاش موندم میخوام این توپ طوری راه بره به صورت اتو ماتیک که هر موقع به هر یک از مسطعتیل ها اسابت کرد برگرده و کار دیگرم اینه که بتونم با فلشها کلید این راکت ها رو جاب جا کنم
    از دوستانو عزیز میخوام منو در جواب این مسئله کمک کنن در زیر نمونه کد برنامه و حالتی از عکس بازی رو گذاشتم ممنون از دوستان گلم:
    دوستان اگر میشه کد برنامه شو برام بزارین چرا که تا اینجاشم سخت در گیر بودم با تشکر



    #include <GL/glut.h>
    float i=0;
    void special( int key, int x, int y)
    {
    switch(key){
    case GLUT_KEY_UP:
    i+=10;
    break;
    case GLUT_KEY_DOWN:
    i-=10;
    break;
    case GLUT_KEY_HOME:
    exit(i);
    break;
    }
    }
    void Display()
    {
    glClear(GL_COLOR_BUFFER_BIT) ;
    glColor3f(1.0, 1.0, 0.0);
    glBegin(GL_LINES );
    // mostatiel Raghit
    glVertex2f(0.85, 0.50);
    glVertex2f(0.95, 0.50);
    glVertex2f(0.85, -0.50);
    glVertex2f(0.95,- 0.50);
    glVertex2f(0.85, 0.50);
    glVertex2f(0.85,- 0.50);
    glVertex2f(0.95, -0.50);
    glVertex2f(0.95, 0.50);
    //Mostatil left
    glVertex2f(-0.85, 0.50);
    glVertex2f(-0.95, 0.50);
    glVertex2f(-0.85, -0.50);
    glVertex2f(-0.95,- 0.50);
    glVertex2f(-0.85, 0.50);
    glVertex2f(-0.85,- 0.50);
    glVertex2f(-0.95, 0.50);
    glVertex2f(-0.95,- 0.50);
    //Linse Vasat
    glVertex2f(0.00, 1);
    glVertex2f(0.00, -1.0);
    // morabae vasat
    glEnd();
    glPushMatrix();
    glEnable (GL_POLYGON);
    glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glRotatef(i,0,0,0.0);
    //glPointSize(20.0);
    glColor3f(1.0, 0.0,.0);
    glBegin(GL_POLYGON);
    glColor3f(0,1,0.50);
    glVertex2f(-0.80, 0.30);
    glVertex2f(-0.85, 0.30);
    glVertex2f(-0.85, 0.20);
    glVertex2f(-0.80, 0.20);

    glEnd();
    glPopMatrix();
    glutSwapBuffers();
    }
    #define WIDTH 1500
    #define HEIGHT 1500
    int main(int argc, char **argv)
    {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
    glutInitWindowPosition(50,00);
    glutInitWindowSize(WIDTH, HEIGHT) ;
    glutCreateWindow("Circle key");
    glClearColor(0.0,0.0,0.0,0.0);
    glutDisplayFunc(Display);
    glutIdleFunc(Display);
    glutSpecialFunc(special);
    glutMainLoop();
    return 0;
    }



    عکس از محیط بازی

  23. #303

    نقل قول: آموزش OpenGL

    با سلام.
    من میخواستم کدی بنویسم که توش بشه یک میز کاری رو طراحی کرد که کشاب داشته باشه و بشه تو محیط با کلید ها حرکت کرد.
    کسی چنین مثالی داره؟
    مثالی که بشه مدلشو با میز عوض کرد و بجاش یک مدل تو مثلا 3ds max یا maya ساخت بعد با اون مدل عوضش کرد؟(اصلا میشه مدل ساخته شده به برنامه منتقل کرد؟)
    بنده وارد نیستم زیاد.
    خواهشا راهنمایی کنید که چطور میتونم این کار رو بکنم؟؟
    خواهشا اگر کسی اسکریپتی با این base داره بهم بده من فقط مدلشو عوض کنم؟
    ممنون میشم اگر توضیح بدید

  24. #304

    نقل قول: آموزش OpenGL

    چرا من نمیتونم از opngl تو سی شارپ استفاده کنم؟ میشه یکی با شکل مراحل استفاده رو بگه؟
    یا یک برنامه خیلی ساده بزارید با سی شارپ که من اینجا بازش کنم ببیم اسکلتش چطوره؟

  25. #305

    نقل قول: آموزش OpenGL

    لفطا سوالها رو توی تاپیک های جدا مطرح کنید

  26. #306

    نقل قول: آموزش OpenGL

    دوستان من وقتی از Tao استفاده میکنم برای سی شارپ Tao گزینه Tao.Platform رو نداره باید چیکار کنم؟
    چون بدون این ارور میده برنامه.
    وقتی از tk استفاده میکنم اونوقت از کنترل simpleOpenGlControl1 نمیشه استفاده کرد.
    دلیلش چیه؟؟

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

    نقل قول: آموزش OpenGL

    در کل بهترین زبان برای استعمال OpenGL به نظر من سی ++ است و سی شارپ زیاد بدرد بازی سازی نمی خوره با این حال TAO تا یاد دارم در ویندوز اکس پی بدون مشکل کار می کرد ولی در ویندوز های سون و 8 درست کار نمیداد و
    ببین openTK داخل خودش مثال و سمپل داره می تونی بری یکسری به پوشش بزنی و نیازی هم به simpleOpenGLControl نداره روش استفاده از کنترلش به صورت زیر است :
    // Creates a 1.0-compatible GraphicsContext with GraphicsMode.Default
    GameWindow window = new GameWindow();

    // Creates a 3.0-compatible GraphicsContext with 32bpp color, 24bpp depth
    // 8bpp stencil and 4x anti-aliasing.
    GLControl control = new GLControl(new GraphicsMode(32, 24, 8, 4), 3, 0);

    http://www.opentk.com/doc/graphics/graphicscontext

  28. #308

    نقل قول: آموزش OpenGL

    نقل قول نوشته شده توسط amin1softco مشاهده تاپیک
    در کل بهترین زبان برای استعمال OpenGL به نظر من سی ++ است و سی شارپ زیاد بدرد بازی سازی نمی خوره با این حال TAO تا یاد دارم در ویندوز اکس پی بدون مشکل کار می کرد ولی در ویندوز های سون و 8 درست کار نمیداد و
    ببین openTK داخل خودش مثال و سمپل داره می تونی بری یکسری به پوشش بزنی و نیازی هم به simpleOpenGLControl نداره روش استفاده از کنترلش به صورت زیر است :
    // Creates a 1.0-compatible GraphicsContext with GraphicsMode.Default
    GameWindow window = new GameWindow();

    // Creates a 3.0-compatible GraphicsContext with 32bpp color, 24bpp depth
    // 8bpp stencil and 4x anti-aliasing.
    GLControl control = new GLControl(new GraphicsMode(32, 24, 8, 4), 3, 0);

    http://www.opentk.com/doc/graphics/graphicscontext
    من میخوام روی فرم یک شکل ساده کشیده بشه و یک دکمه بزارم وقتی رو دکمه کلید شد شکل دو برابر بشه
    بنابراین میخوام شکل رو فرم کشیده بشه میشه کمک کنین؟
    شکلی که میخوام بکشم شکل کد opngl اش بصورت زیره :



    glClear(GL_COLOR_BUFFER_BIT );
    glLoadIdentity();
    glColor3f(1.0f,1.0f,0.0f);
    POINT p1,p2,p3,p4,p5;
    p1.x=300;p1.y=200;
    p2.x=260;p2.y=300;
    p3.x=350;p3.y=240;
    p4.x=250;p4.y=240;
    p5.x=340;p5.y=300;
    glBegin(GL_LINE_LOOP);
    glVertex2i(p1.x,p1.y);
    glVertex2i(p2.x,p2.y);
    glVertex2i(p3.x,p3.y);
    glVertex2i(p4.x,p4.y);
    glVertex2i(p5.x,p5.y);
    glEnd();
    glutSwapBuffers();

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

    نقل قول: آموزش OpenGL


  30. #310

    نقل قول: آموزش OpenGL

    با عرض سلام و خسته نباشید خدمت دوستان عزیز
    بچه ها موضوع شیوه ارائه من در دانشگاه Open GL هستش و ویژوال استودیو 2010 رو روی لپ تاپم نصب کردم ولی کدهای اوپن جی الم رو ران نمی کنه. میشه یکی به صورت کامل توضیح بده ک چجوری باید کتابخانه ها و ملزومات اوپن جی ال رو روی ویژوال استودیو 2010 و ویندوز 7 شصت و چهار بیتی نصب و برنامه هامو ران کنم.
    با تشکر

  31. #311

    نقل قول: آموزش OpenGL

    دوستان ب جز visual studio برنامه دیگری هست که بشه با زبان C++‎ کتابخانه OpenGL رو اجرا کرد؟
    خواهش می کنم راهنمایی کنید
    مرسی

  32. #312
    کاربر تازه وارد
    تاریخ عضویت
    فروردین 1393
    پست
    41

    نقل قول: آموزش OpenGL

    سلام
    من میخوام توی opengl از فونتهای فارسی استفاده کنم از کتابخونه ftgl
    حالا نمیدونم ftgl رو چطوری به سیستم بشناسونمش
    میشه کمک کنیدلطفا خیلی سریع
    به ایمیلم بفرستین

  33. #313

    نقل قول: آموزش OpenGL

    سلام
    خسته نباشین
    ببخشید من هفته دیگه یک ارائه دارم از چند خط کد نویسی opengl
    رسم یک خط بصورت نقطه چین
    کدهاشم دارم
    فقط درخواستم اینه که بگید هر خط کد چه کاری انجام میده؟
    و اینکه اگه بخوام 2تا خط بشه باید چیکار کنم
    و اینکه اگه بخوام نقطه چینهاش درشت و کوچیک بشه
    و اینکه زاویه خط عوض بشه
    و حالا بجای نقطه چین وفقط یک خط بشه فقط
    اینا سولاتیه که استاد از من میپرسه موقع ارائه
    ممنون میشم راهنماییم کنین

    #include<GL/glut.h>
    void init()
    {
    glClearColor(0.1,0.2,0.1,0);
    glutInitWindowPosition(200,60);
    glutInitWindowSize(800,400);
    glMatrixMode(GL_PROJECTION);
    gluOrtho2D(0,100,0,200);
    }
    void display()
    {
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0,0.0,0.0);
    for(int i=1; i<2000 ;i++)
    {
    glBegin(GL_POINTS);
    glVertex2i(i,i*2);
    glEnd();
    }
    glFlush();
    }
    int main(int argc,char**argv)
    {
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
    glutCreateWindow("Test");
    init();
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
    }

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

    نقل قول: آموزش OpenGL

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

    for(int i=1; i<2000 ;i++)
    {
    glBegin(GL_POINTS);
    glVertex2i(i,i*2);

    glEnd();
    }




    که اصلاً کار جالبی نیست برای رسم خط به صورت نقطه چین یا خط چین پیشنهاد می شه از
    glLineStipple(1, 0x3F07); glEnable(GL_LINE_STIPPLE);

    استفاده کنید


    void lineTo(Point2 p1, Point2 p2) {
    glBegin(GL_LINES);
    glVertex2f((GLfloat) p1.getX(), (GLfloat) p1.getY());
    glVertex2f((GLfloat) p2.getX(), (GLfloat) p2.getY()); //draw the line
    glEnd();
    }

    برای تغییر زاویه خط یا امثالهم باید نقطه شروع و پایان را تغییر بدید در برنامه شما تابع خط y=2x رسم می شود چون همیشه در حلقه i و 2*i مقدار نقطه بعدی را مشخص می کنند شما با تغییر به 3i می تونید زاویه را هم تغییر بدید...

  35. #315

    نقل قول: آموزش OpenGL

    سلام خواهش میکنم یکی راهنمایی کنه من نیاز به پروژه پرچم ایران به زبان سی شارپ یا سی پلاس با استفاده از OpenGL دارم ممنون میشم....
    فقط پرچم ایران رو نمایش بده همین.

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

    نقل قول: آموزش OpenGL

    قبلاً یک لینک دادم بازم یک لینک میدم تا عاقبت به خیر شی http://pages.cs.wisc.edu/~byrne/p3/Flag.cpp

  37. #317

    نقل قول: آموزش OpenGL

    سلام ببخشید پروژه رو جمع جور کردم از سایتی که معرفی کردید اما یکی از فایل های include وجود نداره؟!
    #include "Flag.h"#include "Project3.h"#include "GlObject.h"#include "Camera.h"#include "Texture.h"#include #include #include #include #include #include #include 

  38. #318

    نقل قول: آموزش OpenGL

    سلام بچه ها


    من با استفاده از آرایه رئوس یه شکلی رو ترسیم کردم.حالا می خوام وقتی با موس روی شکل کلیک می کنم بتونم نزدیک ترین راس به کرسر رو انتخاب و اون رو با حرکت موس جا به جا کنم.این قسمتی از برناممه که این کارو باید انجام بده





    void Mouse(int button, int state ,int X,int Y){

    if (button == GLUT_LEFT_BUTTON && state==GLUT_DOWN){

    click=true;
    oldX=X;
    oldY=Y;



    }


    else if (button == GLUT_RIGHT_BUTTON && state==GLUT_UP)
    click=false;


    else if (button == GLUT_RIGHT_BUTTON && state==GLUT_DOWN){
    z_camera -= 20;


    }

    glutPostRedisplay();




    }





    void Motion(int X,int Y){
    if(click){
    printf("click\n");
    for(int i=0;i<n1;i=i+3){
    if((abs(vertices[i]-X)<3)&&(abs(vertices[i+1]-Y)<3)){
    printf("i=%d \n",i);
    printf("x=%d y=%d \n",X,Y);
    printf("1=%f 2=%f \n",vertices[i], vertices[i+1]);
    if(oldX==-1.0)
    oldX=X;
    if(oldY==-1.0)
    oldY=Y;
    diff_x=X-oldX;
    diff_y=-Y+oldY;
    vertices[i]=vertices[i]+diff_x;
    vertices[i+1]=vertices[i+1]+diff_y;
    glutPostRedisplay();
    }}}
    //oldX=X;
    //oldY=Y;


    }







    vertices =همون آرایه ای هست که مختصات رئوس رو توش ریختم


    به نظر شماها اشکال کارم کجاست؟برنامم ران میشه ولی با کلیک کردن هیچگونه تغییری توی شکلم ایجاد نمیشه
    آخرین ویرایش به وسیله 3pid71 : شنبه 27 اردیبهشت 1393 در 20:52 عصر

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

    نقل قول: آموزش OpenGL

    @3pid71 : کلاً وقتی کلیک می کنید چی در کنسول چاپ می شه اصلاً تشخیص میده به نظر من شما باید همین را در تابع display بنویسید

    @alirezafaa : همین عکس را تکسچر کن بنداز روی یک مستطیل ;)

  40. #320
    کاربر تازه وارد
    تاریخ عضویت
    فروردین 1393
    پست
    41

    نقل قول: آموزش OpenGL

    سلام
    من میخوام توی opengl فارسی بنویسم
    با بیت مپم نمیخوام باشه
    کسی میتونه کمکم کنه؟

صفحه 8 از 10 اولاول ... 678910 آخرآخر

برچسب های این تاپیک

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

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