صفحه 5 از 10 اولاول ... 34567 ... آخرآخر
نمایش نتایج 161 تا 200 از 376

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

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

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

    مگه برنامش کامل نیست؟؟؟؟؟؟؟؟ تازه این پست خلاف قوانین سایته .......

  2. #162

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

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

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

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

    خیلی ممنون از سایتشون مارو قاطی 4 تایی ها نکنید....
    ببنید این opengl و برنامه نویسی کلاً هنوز اونقدر هوشمند نیست یعنی برای انجام هر کاری باید قبلش اونو تشریح کنید مثلاً وقتی می خواهید یک توپ پرتاب بشه باید حرکت پرتابی رو پیاده سازی کنید یعنی بوسیله فرمول های فیزیک مسیرش رو معین کنید و اونو در مسیرش حرکت بدین و یک کتابخانه است به اسم physics که بیشتر این چیزا رو شبیه سازی می کنه مثلاً برای جاذبه زمین

    بقیشو بزرگان باید جواب بدند

  4. #164

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

    سلام
    من به نحوه چرخش اشیا در OpenGL نیاز دارم
    در برنامه من یک شی وجود داره که باید حرکن کنه
    یعنی وقتی کلید جلو رو زدم بره جلو
    وقتی کلید عقب رو زدم عقب بره
    و وقتی کلید راست رو زدم باید به چپ بچرخه ( نه اینکه بره چپ بلکه مثل وقتی که موس رو به چپ می برم و صفحه می چرخه وقتی هم که دکمه چپ رو میزنم باید به جپ بچرخه)
    و برای دکمه راست هم همینطور
    ممنون میشم راهنمایی بفرمایید

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

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

    این همه ما این دایره ها رو دور هم چرخونیدم والا ... دو راه داره یا خودت بری ماتریس ها رو تغییر بدی بصورت دستی یا باید از توابع :

    void glRotated ( GLdouble angle , GLdouble x , GLdouble y , GLdouble z ); void glRotatef ( GLfloat angle , GLfloat x , GLfloat y , GLfloat z );

    استفاده کنید مثال از رد بوک :


    #include <GL/glut.h>
    #include <stdlib.h>

    static int year = 0, day = 0;

    void init(void)
    {
    glClearColor (0.0, 0.0, 0.0, 0.0);
    glShadeModel (GL_FLAT);
    }

    void display(void)
    {
    glClear (GL_COLOR_BUFFER_BIT);
    glColor3f (1.0, 1.0, 1.0);

    glPushMatrix();
    glutWireSphere(1.0, 20, 16); /* draw sun */
    glRotatef ((GLfloat) year, 0.0, 1.0, 0.0);
    glTranslatef (2.0, 0.0, 0.0);
    glRotatef ((GLfloat) day, 0.0, 1.0, 0.0);
    glutWireSphere(0.2, 10, 8); /* draw smaller planet */
    glPopMatrix();
    glutSwapBuffers();
    }

    void reshape (int w, int h)
    {
    glViewport (0, 0, (GLsizei) w, (GLsizei) h);
    glMatrixMode (GL_PROJECTION);
    glLoadIdentity ();
    gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
    }

    void keyboard (unsigned char key, int x, int y)
    {
    switch (key) {
    case 'd':
    day = (day + 10) % 360;
    glutPostRedisplay();
    break;
    case 'D':
    day = (day - 10) % 360;
    glutPostRedisplay();
    break;
    case 'y':
    year = (year + 5) % 360;
    glutPostRedisplay();
    break;
    case 'Y':
    year = (year - 5) % 360;
    glutPostRedisplay();
    break;
    case 27:
    exit(0);
    break;
    default:
    break;
    }
    }

    int main(int argc, char** argv)
    {
    glutInit(&argc, argv);
    glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
    glutInitWindowSize (500, 500);
    glutInitWindowPosition (100, 100);
    glutCreateWindow (argv[0]);
    init ();
    glutDisplayFunc(display);
    glutReshapeFunc(reshape);
    glutKeyboardFunc(keyboard);
    glutMainLoop();
    return 0;
    }

  6. #166
    کاربر جدید
    تاریخ عضویت
    دی 1390
    محل زندگی
    شمال
    پست
    16

    نقل قول: اشکال در glut.h

    نقل قول نوشته شده توسط ehp_kz6597 مشاهده تاپیک
    سلام
    برای نصب GLUT کلی مشکل پیدا کردم
    توی turbo c , BORLANDC.31 , Visual C++‎‎‎‎‎ 6.0 هرکاری کردم نشد
    دیروز توی Visual Studio 2005 امتحان کردم جواب داد ، اجراشد بدون اشکال و خروجی داد
    اما امروز که اومدم شروع کنم :
    - انگار برای هر برنامه باید opengl32.lib glu32.lib glut32.lib رو اضافه کنم ( برای هر پروژه جدید یک بار ؟!)
    -مشکل اصلی اینجاست که اومدم اجرا کنم دیدم رفته به glut.h گیر داده و 133 تا error , warning داده
    درحالی که من از دیروز تا اون موقع هیچ دستکاری نکرده بودم
    فایل اصلی رو جایگزین کردم باز هم جواب نداد
    گزارش خطا ها + glut.h رو میذارم اینجا یه نگاه کنین ببینین این چی میگه
    دیگه دارم قاطی میکنم
    لطفا کمک کنین

    با تشکر
    منم همین بدبختی رو دارم
    این دفعه میزنم خودمو میکشم
    همون اول مربع قرمز برای تست برنامه ارور میده
    همه ی مراحلشم رفتم
    قبلا اون اجرا میشد،بقیه اجرا نمیشد
    حالا خدا رو شکر هیچکدوم اجرا نمیشه
    چندین بارglut.dll وglut.lib دانلود کردم
    دیگه خسته شدممممممممممممم
    آخرین ویرایش به وسیله a-t-e-f-e-h : یک شنبه 21 اسفند 1390 در 15:27 عصر

  7. #167
    کاربر جدید
    تاریخ عضویت
    دی 1390
    محل زندگی
    شمال
    پست
    16

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

    خوب خدا رو شکر مصیبت قبلی حل شد
    میشه بگید dev رو دیگه از کجا باید پیدا کنیم؟؟؟اصلا نمیدونم چی هست
    آخه pdf اموزشی که ازhttp://www.parsbook.org/?s=%D9%85%D9...%D8%B1+open+gl گرفتم اسمی از dev نیاورده و اصلا ازش استفاده نکرده
    آخرین ویرایش به وسیله a-t-e-f-e-h : یک شنبه 21 اسفند 1390 در 12:57 عصر

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

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

    ببنید dev یک محیط برای برنامه نویسیه که با دلفی نوشته شده و با استفاده از کامپایلر gcc/g++ کار کامپایل برنامه رو انجام میده و کلاً حجمش کمه و سریع راه اندازی می شه و قابل استفاده است و فکر کنم جزو نرم افزار های آزاد محسوب بشه . آموزش پست اول فقط می خواست یک راهنما باشه برای کامپایلر هایه متنوع تر و نکته جالب این dev اینه که بیشتر library هایی که ما نیاز داریم را در اختیار ما قرار میده و شما حتی بدون طی این مراحل می تونید همون پکیج را در اینترنت سرچ کنید و دانلود کنید بدون کپی هیچ فایلی البته روش پست اول را الان فقط می تونید با استفاده از v-p-n انجام بدید.

  9. #169

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

    چرا در برنامه استفاده از کلید های صفحه کلید، کلید F2 کار نمی کند؟ یعنی با فشردنش عمل مربوطه انجام نمی شه ولی F1, F3,F4 و بقیه مشکلی ندارند؟

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

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

    مطمئنید؟! ما که 3 تا بیشتر تعریف نکردیم f1 , f2 ,f3 منم تست کردم کار می کرد . فک کنم کلید هایه تابعی لپتاپتون برایه کار دیگه ایی تنظیم شده یا یک برنامه روش عمل می کنه

  11. #171

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

    نقل قول نوشته شده توسط mahsa_shk مشاهده تاپیک
    چرا در برنامه استفاده از کلید های صفحه کلید، کلید F2 کار نمی کند؟ یعنی با فشردنش عمل مربوطه انجام نمی شه ولی F1, F3,F4 و بقیه مشکلی ندارند؟
    اگر سوالتون رو درست متوجه شده باشم جواب شما اینه که باید از تابع glutSpecialFunc برای استفاده از کلید های خاص مثله arrow key,f1,2,3,... استفاده کنید

  12. #172

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

    سلام
    دوستان من میخوام یه برنامهمه بنویسم که با اسفاده از الگوریتم tweening یه حرف الفبا مثلا "ا" رو به "ر" تبدیل کنه کسی هست راهنمایی کنه.یه سری کد دارم که tweening رو انجام مید که میذارمشون اینجا ببینید.لطفا اگه کسی هست راهنمایی کنه
     // Code from Figs. 3.25 3.26 3.27 3.28 
    // and page 101 of Hill, F.S. "Computer Graphics Using
    // OpenGL", 2nd edition, Prentice Hall, NJ, 2001.
    // Modified Sept. 2002 by B.G. Nickerson into more
    // structured C++‎‎ code.
    // Code from Figs. 3.25 3.26 3.27 3.28
    // and page 101 of Hill, F.S. "Computer Graphics Using
    // OpenGL", 2nd edition, Prentice Hall, NJ, 2001.
    // Modified Sept. 2002 by B.G. Nickerson into more
    // structured C++‎‎ code.

    #include<glut.h>
    #include<math.h>
    #include<iostream>
    #include <stdlib.h>
    using namespace std;

    class Point2 //single point w/ floating point coordinates
    {
    public:
    Point2() {x = y = 0.0f;} //constructor 1
    Point2(float xx, float yy) {x=xx; y=yy;} //constructor 2
    void set(float xx, float yy) {x=xx; y=yy;}
    float getX() {return x;}
    float getY() {return y;}
    void draw(void)
    {
    glBegin(GL_POINTS); //draw this point
    glVertex2f((GLfloat)x, (GLfloat)y);
    glEnd();
    }
    private:
    float x, y;
    };


    //<<Support Classes for Canvas>>>


    class IntRect //aligned rectangle with integer coordinates, used for viewport
    {
    public:
    IntRect() {l = 0; r=100; b=0; t=100;} //constructors
    IntRect(int left, int right, int bottom, int top)
    {l = left; r=right; b=bottom; t=top;}
    void set(int left, int right, int bottom, int top)
    {
    l=left; r=right; b=bottom; t=top;
    }
    void draw(void); //draw this rectangle using OpenGL
    int getL(void)
    {
    return l;
    }
    int getR(void)
    {
    return r;
    }
    int getT(void)
    {
    return t;
    }
    int getB(void)
    {
    return b;
    }

    private:
    int l, r, b, t;
    };

    class RealRect //simlar to IntRect but w/ floating points & used for world window
    {
    public:
    RealRect() {l = 0; r=100; b=0; t=100;} //constructors
    RealRect(float left, float right, float bottom, float top)
    {l = left; r=right; b=bottom; t=top;}
    void set(float left, float right, float bottom, float top)
    {
    l=left; r=right; b=bottom; t=top;
    }
    float getL(void)
    {
    return l;
    }
    float getR(void)
    {
    return r;
    }
    float getT(void)
    {
    return t;
    }
    float getB(void)
    {
    return b;
    }
    void draw(void); //draw this rectangle using OpenGL
    private:
    float l, r, b, t;
    };


    //<<End Support Classes>>>

    class Canvas
    {
    public:
    Canvas(int width, int height, char* windowTitle); //constructor
    void setWindow(float l, float r, float b, float t);
    void setViewport(int l, int r, int b, int t);
    IntRect getViewport(void); //divulge the viewport data
    RealRect getWindow(void); // divulge the window data
    float getWindowAspectRatio(void);
    void clearScreen();
    void setBackgroundColor(float r, float g, float b);
    void setColor(float r, float g, float b);
    void lineTo(float x, float y);
    void lineTo(Point2 p);
    void moveTo(float x, float y);
    void moveTo(Point2 p);
    void moveRel(float dx, float dy);
    void turnTo(float angle);
    void turn(float angle);
    void forward(float dist, int isVisible);
    Point2 Tween(Point2 A, Point2 B, float t);
    void drawTween(Point2 A[], Point2 B[], int N, float t);

    private:
    Point2 CP; //current position in the world
    IntRect viewport; //the current window
    RealRect window; //the current viewport
    float CD; //current direction in degrees (for turtle)
    } ;



    // Constructor
    Canvas:: Canvas(int width, int height, char* windowTitle)
    {
    char* argv[1]; //dummy argument list for glutinit()
    char dummyString[8];
    argv[0] = dummyString; //hook up the pointer
    int argc = 1;

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(width, height);
    glutInitWindowPosition (20,20);
    glutCreateWindow (windowTitle);
    setWindow(0, (float)width, 0, (float)height); // default world window
    setViewport (0, width, 0, height); //default viewport
    CP.set(0.0f, 0.0f); //initialize the cp to (0,0)
    }

    void Canvas:: moveTo(Point2 p) //moves current point CP to point p object
    {
    float x1, y1;
    x1 = p.getX();
    y1 = p.getY();
    CP.set(x1, y1);
    }

    void Canvas:: forward(float dist, int isVisible) //moves turtle forward by dist
    {
    const float RadPerDeg=0.017453293; //radians per degree
    float x = CP.getX() + dist * cos(RadPerDeg * CD);
    float y = CP.getY() + dist * sin(RadPerDeg * CD);
    if(isVisible)
    lineTo(x, y);
    else
    moveTo(x, y);
    }

    void Canvas:: turnTo(float angle)
    {
    CD = angle;
    }

    void Canvas:: turn(float angle) {CD += angle;}

    float Canvas:: getWindowAspectRatio(void) //calculates aspect ratio of world window
    {
    float width, height, aspectRatio;
    width = window.getR() - window.getL();
    height = window.getT() - window.getB();
    aspectRatio = width/height;
    return aspectRatio;
    }

    void Canvas:: moveRel(float dx, float dy)
    {
    CP.set(CP.getX() + dx, CP.getY() + dy);
    }

    //<<setWindow>>
    void Canvas:: setWindow (float l, float r, float b, float t)
    {
    glMatrixMode (GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D ((GLdouble)l, (GLdouble)r, (GLdouble)b, (GLdouble)t);
    window.set (l, r, b, t);
    }

    //<<setViewport>>
    void Canvas:: setViewport (int l, int r, int b, int t)
    {
    glViewport(l, b, r-l, t-b);
    viewport.set (l, r, b, t);
    }

    RealRect Canvas:: getWindow(void)
    {
    return window;
    }

    IntRect Canvas:: getViewport(void)
    {
    return viewport;
    }

    void Canvas:: clearScreen(void)
    {
    glClear(GL_COLOR_BUFFER_BIT);
    }

    void Canvas:: setBackgroundColor(float r, float g, float b)
    {
    glClearColor(r, g, b, 0.0); //4th variable level of transparency, may need to change
    }

    void Canvas:: setColor(float r, float g, float b)
    {
    glColor3f(r, g, b);
    }

    void Canvas:: lineTo(Point2 p)
    {
    glBegin (GL_LINES);
    glVertex2f((GLfloat) CP.getX(), (GLfloat) CP.getY());
    glVertex2f((GLfloat) p.getX(), (GLfloat) p.getY());
    glEnd();
    CP.set(p.getX(), p.getY());
    glFlush();
    }

    //<<moveTo>>
    //changes current point
    void Canvas:: moveTo(float x, float y)
    {
    CP.set(x, y);
    }

    //<<lineTo>>
    //draws a line from current point to new point
    void Canvas:: lineTo(float x, float y)
    {
    glBegin(GL_LINES);
    glVertex2f((GLfloat) CP.getX(), (GLfloat) CP.getY());
    glVertex2f((GLfloat) x, (GLfloat) y); //draw the line
    glEnd();
    CP.set (x, y); //update current point to new point
    glFlush();
    }

    //<<drawTween>>
    //draw the tween at time t between polylines A and B
    Point2 Canvas:: Tween(Point2 A, Point2 B, float t)
    {
    Point2 P;
    P.set(A.getX() + (B.getX() - A.getX())*t, A.getY() + (B.getY() - A.getY())*t);
    return P;
    }

    //<<drawTween>>
    //draw the tween at time t between polylines A and B
    void Canvas:: drawTween(Point2 A[], Point2 B[], int N, float t)
    {
    for(int i = 0; i < N; i++)
    {
    Point2 P;
    P = Tween(A[i], B[i], t);
    if (i == 0) moveTo(P.getX(), P.getY());
    else lineTo(P.getX(), P.getY());
    }
    }
    // Code from Figs. 3.25 3.26 3.27 3.28
    // and page 101 of Hill, F.S. "Computer Graphics Using
    // OpenGL", 2nd edition, Prentice Hall, NJ, 2001.
    // Modified Sept. 2002 by B.G. Nickerson into more
    // structured C++‎‎ code.

    // Code for example canvas, myDisplay, drawTween to
    // interpolate between two polyline representations
    // of equal length.

    Canvas cvs(640, 640, "Example of tweening"); //global canvas object

    void myDisplay(void)
    {
    cvs.setViewport(0, 640, 0, 640);
    cvs.clearScreen();
    cvs.setWindow(0.0, 1.0, 0.0, 1.0);
    // Tween between two figures; a la Fig. 4.22, p.171
    Point2 A[10];
    Point2 B[10];
    A[0].set(0.2, 0.5);
    A[1].set(0.5, 0.35);
    A[2].set(0.8, 0.5);
    A[3].set(0.5, 0.2);
    A[4].set(0.2, 0.5);
    B[0].set(0.2, 0.2);
    B[1].set(0.2, 0.8);
    B[2].set(0.8, 0.8);
    B[3].set(0.8, 0.2);
    B[4].set(0.2, 0.2);
    float t = 0.0;
    int N = 10; // Number of tweenings
    float tinc = 1.0/N;
    int vpsize = 640/(N+1);
    for (int i = 0; i <= N; i++)
    {
    cvs.setViewport(i*vpsize,(i+1)*vpsize, (N/2)*vpsize, (N/2+1)*vpsize);
    cvs.drawTween(A, B, 5, t);
    t = t + tinc;
    }
    }
    // Code from Figs. 3.25 3.26 3.27 3.28
    // and page 101 of Hill, F.S. "Computer Graphics Using
    // OpenGL", 2nd edition, Prentice Hall, NJ, 2001.
    // Modified Sept. 2002 by B.G. Nickerson into more
    // structured C++‎‎ code.

    // example of using canvas class with tweening.

    int main(int argc, char **argv)
    {
    cvs.setWindow(-1.0, 1.0, -1.0, 1.0);
    cvs.setViewport(0, 640, 0, 640);
    cvs.setBackgroundColor(1.0, 1.0, 1.0);
    cvs.setColor(0.0, 0.0, 0.0);

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
    glutDisplayFunc(myDisplay);
    glutMainLoop();

    return 0;
    }

  13. #173

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

    کد tweening هم اینه




    void drawTween(Point2 A[ ], Point2 B[ ], int n, float t)
    { // draw the tween at time t between polylines A and B
    for (int i = 0; i < n; i++)
    { Point2 P;
    P = Tween (A[i], B[i], t);
    if (i ==0) moveTo(P.x, P.y);
    else lineTo(P.x, P.y);
    }
    }

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

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

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

    // Tween between two figures; a la Fig. 4.22, p.171
    Point2 A[10];
    Point2 B[10];
    A[0].set(0.2, 0.5);
    A[1].set(0.5, 0.35);
    A[2].set(0.8, 0.5);
    A[3].set(0.5, 0.2);
    A[4].set(0.2, 0.5);

    B[0].set(0.2, 0.2);
    B[1].set(0.2, 0.8);
    B[2].set(0.8, 0.8);
    B[3].set(0.8, 0.2);
    B[4].set(0.2, 0.2);

    دیگه بقیه کار ها رو خودش انجام میده البته اگر درست متوجه شده باشم.

  15. #175

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

    ببخشید میشه بصورت برنامه از اول با #include ها و بقیه چیزایی که واسه اجرا نیازه واسم بگذازید نمیدونم چطوری run کنم
    اگه امکانش هست کمکم کنید.
    خیلییییی مممنووووووون
    هیچ جا opengl بلد نیستن .واقعا جای افتخار داره که یه فروم فعال اینجا دارین
    بازم تشکر
    اینجا دسور tween که اجراش مشکل نداره رو واستون گذاشتم


    Point Tween(Point A, Point B, float t)
    {
    Point P;
    P.x = A.x + (B.x - A.x)*t;
    P.y= A.y + (B.y - A.y)*t;
    return P;
    }


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

    کل مطلبی که من در این رابطه دارم از کتاب گرافیک کامپیوتری هست
    متن این قسمت رو هم واستون میذارم

    Tweening and lerp
    One often wants to compute the point P(t) that is fraction t of the way along the straight line from point A to point B [the tween (for in-between) at t of points A and B].
    Each component of the resulting point is formed as the lerp() of the corresponding components of A and B.
    A procedure Tween (Point2 A, Point2 B, float t) implements tweening for points A and B, where we have used the new data type Point2 for a 2D point:
    struct Point2
    { float x; float y; };

    Tweening takes 2 polylines and interpolates between them (using lerp) to make one turn into another (or vice versa).
    We are finding here the point P(t) that is a fraction t of the way along the straight line (not drawn) from point A to point B.
    To start, it is easiest if you use 2 polylines with the same number of lines.

    We use polylines A and B, each with n points numbered 0, 1, …, n-1.
    We form the points Pi (t) = (1-t)Ai + tBi, for t = 0.0, 0.1, …, 1.0 (or any other set of t in [0, 1]), and draw the polyline for Pi.


    Code for Tween
    void drawTween(Point2 A[ ], Point2 B[ ], int n, float t)
    { // draw the tween at time t between polylines A and B
    for (int i = 0; i < n; i++)
    { Point2 P;
    P = Tween (A[i], B[i], t);
    if (i ==0) moveTo(P.x, P.y);
    else lineTo(P.x, P.y);
    }
    }



    To allow drawing tweens continuously, use the code below with double buffers.
    for (t = 0.0, delT = 0.1; ; t += delT;) {
    //clear the buffer
    drawTween (A, B, n, t);
    glutSwapBuffers();
    if ((t<=0.0) || (t>=1.0)) delT = -delT;
    }
    آخرین ویرایش به وسیله saturn2200 : سه شنبه 09 خرداد 1391 در 23:25 عصر

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

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

    من منظور شما رو در همون پست اول درست فهمیده بودم شما همون کار رو انجام بدید که گفتم نتیجه می گیرید
    برای اجرا هم می تونید از این برنامه و آموزشش استفاده کنید http://s3.picofile.com/file/7394041826/dev.zip.html
    عکس های ضمیمه عکس های ضمیمه
    فایل های ضمیمه فایل های ضمیمه

  17. #177

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

    سلام دوستان من در کار کردن با اوپن جی ال تازه کارم
    الان میخوام برای پایان ترم یک پروژه درست کنم اما به مشکل برخوردم
    کسی میتونه یک تابع بنویسه که مختصات x,y دو نقطه رو از کاربر دریافت کنه و براش یک خط رسم کنه
    نحوه ی فراخوانی توابعی که ورودی دارن در داخل تابع main چطور هست؟
    ممنون میشم اگر کمک کنید

  18. #178

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

    نقل قول نوشته شده توسط amin1softco مشاهده تاپیک
    من منظور شما رو در همون پست اول درست فهمیده بودم شما همون کار رو انجام بدید که گفتم نتیجه می گیرید
    برای اجرا هم می تونید از این برنامه و آموزشش استفاده کنید http://s3.picofile.com/file/7394041826/dev.zip.html
    سلام بازم شرمنده
    من اجرای برنامه رو بلدم.
    این tween که منم میخوام یه مقدار فرق داره باید بصورت انیمیشن این کار انجام بشه

    این نقاطی که روی عکس بالاست بصورت انیمیشن جابجا بشن روی نقاط متناظر .اینطوری حرف "ر" به حرف "ا" تبدیل میشه و یه فرم انیمیشن قشنگی هم داره.
    این الگوریتم مثلا اگه دیده باشید توی فیلمها استفاده میشه .مثلا تصویر سفید برفی از زیبایی به زشتی و یا برعکس تبدیل میشه.
    اگه بتونیم واسه یه polygon ساده اینکارو انجام بدیم واسه تصویرای پیچیده هم امکانش هست.
    واسه راهنمایی تا همینجا هم خیلییی ممنون
    خیلی کمکم کردین.

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

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

    خوب عزیزم اینکه خیلی واضحه باید یک خطش رو حذف کنی این قطعه کد رو جایگزین کن جواب می گیری

    Point2 A[10];
    Point2 B[10];
    A[0].set(0.2, 0.5);
    A[1].set(0.5, 0.35);
    A[2].set(0.8, 0.5);
    A[3].set(0.5, 0.2);
    A[4].set(0.2, 0.5);


    B[0].set(0.2, 0.2);
    B[1].set(0.2, 0.8);
    B[2].set(0.5, 0.8);
    B[3].set(0.5, 0.2);
    B[4].set(0.2, 0.2);
    float t = 0.0;
    int N = 10; // Number of tweenings
    float tinc = 1.0/N;
    int vpsize = 640/(N+1);
    for (int i = 0; i <= N; i++)
    {
    // cvs.setViewport(i*vpsize,(i+1)*vpsize, (N/2)*vpsize, (N/2+1)*vpsize); اين خط حذف شده
    cvs.clearScreen(); // اين خط رو اگر حذف کنيد روي هم ترسيم مي شه
    cvs.drawTween(A, B, 5, t);
    t = t + tinc;
    }

    N را هر چی بیشتر کنی انیمیشنش لطیف تره :دی

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

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

    نقل قول نوشته شده توسط majnoon110 مشاهده تاپیک
    سلام دوستان من در کار کردن با اوپن جی ال تازه کارم
    الان میخوام برای پایان ترم یک پروژه درست کنم اما به مشکل برخوردم
    کسی میتونه یک تابع بنویسه که مختصات x,y دو نقطه رو از کاربر دریافت کنه و براش یک خط رسم کنه
    نحوه ی فراخوانی توابعی که ورودی دارن در داخل تابع main چطور هست؟
    ممنون میشم اگر کمک کنید
    ببنید شما باید بین glbegin دو تا نقطه مشخص کنید و پارامتر هاش رو از کاربر در یافت کنید.
    https://barnamenevis.org/showthread.p...82#post1429482

  21. #181

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

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

    Point2 A[10];
    Point2 B[10];
    A[0].set(0.2, 0.5);
    A[1].set(0.5, 0.35);
    A[2].set(0.8, 0.5);
    A[3].set(0.5, 0.2);
    A[4].set(0.2, 0.5);


    B[0].set(0.2, 0.2);
    B[1].set(0.2, 0.8);
    B[2].set(0.5, 0.8);
    B[3].set(0.5, 0.2);
    B[4].set(0.2, 0.2);
    float t = 0.0;
    int N = 10; // Number of tweenings
    float tinc = 1.0/N;
    int vpsize = 640/(N+1);
    for (int i = 0; i <= N; i++)
    {
    // cvs.setViewport(i*vpsize,(i+1)*vpsize, (N/2)*vpsize, (N/2+1)*vpsize); اين خط حذف شده
    cvs.clearScreen(); // اين خط رو اگر حذف کنيد روي هم ترسيم مي شه
    cvs.drawTween(A, B, 5, t);
    t = t + tinc;
    }

    N را هر چی بیشتر کنی انیمیشنش لطیف تره :دی
    خیلییییی مرسی واقعا ایول داره
    من اینو نشون یه بچه ها امیر کبیر دادم نتونست درست کنه!!!
    دیگه روم نمیشه سوال بپرسم
    اما دلم نمیاد از اطلاعات شما استفاده نکنم.
    اگه بخوام viewport ها رو حذف کنم امکانش هست؟چطوری میتونم اینکارو انجام بدم
    و یه سوال مهمتر اگه بخوام شکل رو عوض کنم باید چیکار کنم؟
    مثلا یه نیم دایره به یه مستطیل تبدیل بشه .باید چیکار کنم
    آخرین ویرایش به وسیله saturn2200 : یک شنبه 14 خرداد 1391 در 00:01 صبح

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

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

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

    glBegin (GL_LINES);
    glVertex2f((GLfloat) CP.getX(), (GLfloat) CP.getY());
    glVertex2f((GLfloat) p.getX(), (GLfloat) p.getY());
    glEnd();

    اینم که معلومه بین نقاط خط ترسیم می کنه که در این حالت به نظر من استفاده از روش های رسم قدیمی دایره مثل نقطه میانی است که شما باید با اون الگوریتم نقطه یابی کنید و نقاط رو به ماتریس اضافه کنید

    Point2 A[10];
    Point2 B[10];

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

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

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

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

    // Tween between two figures; a la Fig. 4.22, p.171
    Point2 A[10];
    Point2 B[10];
    A[0].set(0.2, 0.2);
    A[1].set(0.2, 0.5);
    A[2].set(0.3, 0.5);
    A[3].set(0.3, 0.3);
    A[4].set(0.4, 0.3);
    A[5].set(0.4, 0.5);
    A[6].set(0.5, 0.5);
    A[7].set(0.5, 0.2);
    A[8].set(0.2, 0.2);




    B[0].set(0.2, 0.2);
    B[1].set(0.2, 0.4);
    B[2].set(0.2, 0.8);
    B[3].set(0.25, 0.8);
    B[4].set(0.5, 0.8);
    B[5].set(0.5, 0.4);
    B[6].set(0.5, 0.2);
    B[7].set(0.25, 0.2);
    B[8].set(0.2, 0.2);
    float t = 0.0;
    int N = 50; // Number of tweenings
    float tinc = 1.0/N;
    int vpsize = 640/(N+1);
    for (int i = 0; i <= N; i++)
    {
    //cvs.setViewport(i*vpsize,(i+1)*vpsize, (N/2)*vpsize, (N/2+1)*vpsize);
    cvs.clearScreen();
    cvs.drawTween(A, B, 9, t);
    t = t + tinc;
    }

    منم کاملاً تفریحی اپن جی ال کار می کنم ...

  24. #184

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

    سلام
    مطالب open gl که گذاشتی مفیده فایده واقع شد
    یه سوال:
    من تمام مراحل اجرای برنامه opengl با C++‎ , C#‎ رو به طور دقیق انجام دادم و وقتی که یه کد نمونه (تست شده در جای دیگه) رو هم اجرا می کنم هیچ خطایی نمیده ولی توی فرم هم چیزی نمیکشه به نظر شما مشکل کار من کجاست؟

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

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

    سلام ما در مورد اجرای برنامه در سی شارپ فقط چندتا فرم ورک برای پیاده سازی معرفی کردیم نه بیشتر !! ولی ممکنه مشکل شما اینجا باشه که در سیستم های 64 بیتی باید glut32.dll را در پوشه syswow64 کپی کنید.
    به هر حال این فیلم آموزشی می تونه کمکتون کنه http://s3.picofile.com/file/7400251284/glut.zip.html

  26. #186

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

    با سپاس و تشکر فراوان از amin عزیز
    من تمام پیش نیاز ها رو انجام دادم و موقع اجرا هیچ خطایی نمیگیرم ، پنجره کنسول C باز میشه و بعدش هم پنجره open gl ولی داخل open gl شکل رو ترسیم نمیکنه و این فرم کلا به صورت ترنسپارنت هست و وقتی که سایزشو تغییر میدم مشکی میشه، از صفحه نمایشم عکس گرفتم تا بیشتر در جریان قرار بگیری، خودم احتمال میدم تنظیمات گرافیکی سیستمم باشه و تمام سوراخ سمبه های win7 رو کاوش کردم ولی بی فایده، اگه راه حلی به نظرت میرسه بگی ممنون میشم.

    بازم ممنون به خاطر فیلمی که گذاشتی و اینکه همیشه در دسترس و به فکر هستی ...

    http://up98.org/upload/server1/02/j/...u439mvwc5b.png

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

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

    این مشکل دلایل متعددی داره که خیلی هاش مربوط به تنظیمات اشتباه توابع اولیه و گاهی هم مربوط تداخل گرافیک gdi ویندوز با wgl می شه که فکر نکنم ربطی به ما داشته باشه در آخر می رسیم به یک باگ glut که اگر این باگ باشه با یک بافر مشکل دارید و باید با دو بافر تست کنید ببنید کد زیر درست کار میده یا نه :

    //lines.cpp
    //---------
    //Draw lines with OpenGL + GLUT
    //Compiler DevC++‎‎‎ 4.9.9.2 + GLUT3.7 (Win32)
    #pragma comment(lib,"opengl32.lib")
    #pragma comment(lib,"glu32.lib")
    #pragma comment(lib,"glut32.lib")
    #include <windows.h>
    #include <GL/glut.h>
    void init(void)
    {
    glClearColor(1.0,1.0,1.0,0.0); //display window set to white
    glMatrixMode(GL_PROJECTION); //projection parameters
    gluOrtho2D(0.0,200.0,0.0,150.0); //sets up WC extent
    }
    void lineSegments(void)
    {
    glClear(GL_COLOR_BUFFER_BIT); //clears display window
    glColor3f(0.0, 0.0, 1.0); //line colour set to blue
    glBegin(GL_LINES);
    glVertex2i(180,15); glVertex2i(10,145); //line seg1
    glVertex2i(145,10); glVertex2i(15,180); //line seg2
    glEnd();
    glutSwapBuffers();
    glFlush(); //process all OGL functions immediately
    }
    int main(int argc, char** argv)
    {
    glutInit(&argc, argv); //initialise GLUT
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); //sets display mode
    glutInitWindowPosition(50, 100); //top left display window pos
    glutInitWindowSize(400, 300); //display win width and height in pixel coords
    glutCreateWindow("Example01 - lines"); //now create display win
    init(); //run initilization procs
    glutDisplayFunc(lineSegments); //call drawing func
    glutMainLoop(); //display all and wait
    return 0;
    }

  28. #188

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

    نه متاسفانه

  29. #189

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

    نقل قول نوشته شده توسط amin1softco مشاهده تاپیک
    نه دوست عزیز پروژه دانشجویی انجام نمی دیم ولی بازم باری اینکه متوجه بشی چی به چیه به این قطعه کد را جایگزین کن و نتیجه رو مشاهده کن

    // Tween between two figures; a la Fig. 4.22, p.171
    Point2 A[10];
    Point2 B[10];
    A[0].set(0.2, 0.2);
    A[1].set(0.2, 0.5);
    A[2].set(0.3, 0.5);
    A[3].set(0.3, 0.3);
    A[4].set(0.4, 0.3);
    A[5].set(0.4, 0.5);
    A[6].set(0.5, 0.5);
    A[7].set(0.5, 0.2);
    A[8].set(0.2, 0.2);




    B[0].set(0.2, 0.2);
    B[1].set(0.2, 0.4);
    B[2].set(0.2, 0.8);
    B[3].set(0.25, 0.8);
    B[4].set(0.5, 0.8);
    B[5].set(0.5, 0.4);
    B[6].set(0.5, 0.2);
    B[7].set(0.25, 0.2);
    B[8].set(0.2, 0.2);
    float t = 0.0;
    int N = 50; // Number of tweenings
    float tinc = 1.0/N;
    int vpsize = 640/(N+1);
    for (int i = 0; i <= N; i++)
    {
    //cvs.setViewport(i*vpsize,(i+1)*vpsize, (N/2)*vpsize, (N/2+1)*vpsize);
    cvs.clearScreen();
    cvs.drawTween(A, B, 9, t);
    t = t + tinc;
    }

    منم کاملاً تفریحی اپن جی ال کار می کنم ...

    آقا ایول واقعا نمیدونم چطوری تشکر کنم
    خوب اینطوری بهتر شد تازه یاد گرفتم چطوری شکل رو عوض کنم
    مرسیییییییییییییییییییییی ییییییییییییییییییییییییی ییییییییییییییییییییییییی ییییییییییییییییییی
    داشتم از زندگی نا امید میشدما
    هنوزم آدمای با گذشت و باحالی تو این دنیا هست
    من اولش فکر میکردم که مثلا A[0].set(0.2, 0.2) یه خط رسم میکنه بین دو تا نقطه به این مختصات حالا فهمیدم که نه آقا اینا همش نقطه بوده که در آخر به هم وصل شده حالا دیگه هر شکلی رو میتونم بکشم

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

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

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

    #include <iostream>
    using namespace std;
    .
    .
    .
    cout << "OpenGL Version : " << glGetString(GL_VERSION) << endl;
    glutMainLoop(); //display all and wait
    .
    .

    اگر ورژن openGL کارت گرافیکت بیشتر از 3 باشه فکر نکنم راهی داشته باشه باید باید یکجور دیگه کد بنویسیم :دیییییی

  31. #191

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

    سلام من پنجره open gl رو به حالت FULLScreen بردم و مشکلم حل شد، فقط تو این حالت شکل رو ترسیم میکنه
    بازم تشکر

  32. #192

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

    @poniosa:

    اگر از glut استفاده ميكني تابع idle رو ثبت نكردي يا اينكه بافر رو تعويض نمي كني.

    اگر ورژن openGL کارت گرافیکت بیشتر از 3 باشه فکر نکنم راهی داشته باشه باید باید یکجور دیگه کد بنویسیم :دیییییی
    چه ربطي داره. مال من 4.2 هست راحت دارم با ورژن 1.2 كار ميكنم.

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

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

    نقل قول نوشته شده توسط pswin.pooya مشاهده تاپیک
    @poniosa:

    اگر از glut استفاده ميكني تابع idle رو ثبت نكردي يا اينكه بافر رو تعويض نمي كني.


    چه ربطي داره. مال من 4.2 هست راحت دارم با ورژن 1.2 كار ميكنم.
    والا من بیشتر از 3 رو خودم تست نکردم فقط روی حساب پستی که خود شما یکبار زده بودی این رو گفتم!!!

    OpenGL و آینده:
    به طور کل میشه گفتش که ما در آینده شاهد حذف بسیاری از دستورهای پیشین OpenGL خواهیم بود. (یا حداقل از کار افتادن اونها) که توی OpenGL 3.x به راحتی مشاهده میشد که یکی از پرکاربردترین دستورها یعنی glBegin کار نمی کرد. (مگر با فراهم کردن شرایط خاص و غیر استاندارد) اما حالا OpenGL تمام تمرکز خودش رو گذاشته روی دستورها و الحاقی هایی که باعث ارتباط بهتر و کاملتر با قسمت های قابل برنامه ریزی gpu هستش.
    به هر حال آخرش بر می گرده به همون باگی که لینکش رو دادم. موفق باشید!!!

  34. #194

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

    خب درسته كه دستورها حذف شدن. اما هنوز از دستورهاي پيشين پشتيباني ميشن. توي ويرايشهاي جديد OpenGL شما مي تونيد ويرايشي رو كه مي خواهيد استفاده كنيد رو مشخص كنيد. اينكار با مشخص كردن عدد minor و major ويرايش در هنگام ساخته شدن محتوا انجام مي گيره و يه كار اتوماتيك نيست كه خودش اون رو انجام بده. حالا بسته به ويرايشي كه انتخاب مي كنيد قابليتهاي قبلي رو حذف و قابليتهاي جديد رو اضافه ميكنه.

    حتي تعداد از دستورهاي حذف شده هنوز هم توي ويرايشهاي جديد قابل استفاده هستند. اما استفاده از اونها پيشنهاد نميشه و پشتيباني از اونها به شدت به ويرايش درايور بستگي داره. مثلا VBO توي داريورهاي قديمي OpenGL 3 جواب ميداد اما توي ويرايشهاي جديد ديگه امكانش نيست. بهترين راه چك كردن پرفرمانس برنامه اينجور موارد استفاده از برنامه gDEBUGer هست. كه تمام اين موارد رو بهتون گزارش ميكه. خود من هم از طريق اين برنامه متوجه قضيه VBO شدم.

    مورد ديگه در مورد GLUT هست كه glut به كمك glew (يا لود كردن دستي الحاقيها) ماكزيمم تا OpenGL 2.1 ساپورت ميده و براي وياريشهاي حداقل بالاتر بايد بريد سراغ SDL و يا اينكه از API خود سيستم عامل كمك بگيريد.

    من هنوز هم حرفهاي خودم رو تاييد ميكنم. اين اتفاق مرتبا داره مي افته. در حقيقت ويرايشهاي جديد OpenGL سراغ نو آوري و ارتباط موثر هستند نه يك راه ساده براي كار. API به شدت و به سرعت داره تغيير ميكنه. در حقيقت الان هر دو تا API دايركت و OpenGL مثل هم عمل مي كنند و شما خيلي راحت امكان سوئيچ بين اونها رو داريد (برخلاف گذشته) و موارد خيلي كمي رو پيدا مي كنيد كه در اونها اختلاف داشته باشند. بيشترين دليل اين قضيه هم اينه كه OpenGL توي سالهاي اخير با معرفي سيستم ها و پلتفرمهاي جديد بشدت تجاري شده و برخلاف گذشته، حالا مثل دايركت بيشتر توجهش بجاي اينكه روي مسائل بنيادي گرافيك باشه روي نيازهاي بازار است.

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

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

    دمت گرم پسر خیلی باحالی
    ولی خوب قسمت اولش رو نمی دونستم ...

  36. #196

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

    در مورد 3 تابع زیر توضیحی مختصر می خواستم یک مقدار روی تعریفه خودم شک دارم :

    glEnable(GL_DEPTH_TEST)
    glFrontFace(GL_CCW)
    glEnable(GL_CULL_FACE)

    تعریف خودم به ترتیب : اجسام پشت شی مورد نظر دیده نشود - برای تشخیص رو و پشت بودن جسم کاربرد دارد - تو و داخل جسم را حساب نکن
    سوال دوم اینه که صدا گذاری در opengl با استفاده از fmod هست ؛ غیر از fmod هم داریم اسمش چی بود ؟
    آخرین ویرایش به وسیله soroushp : پنج شنبه 25 خرداد 1391 در 22:18 عصر

  37. #197

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

    اجسام پشت شی مورد نظر دیده نشود
    کاملا اشتباه. درسته یکی از کاربردهای بافر عمق (یعنی بیشترین کاربردش اینه) اما کلا برداشتت اشتباه هست. پیشنهاد میکنم یه کتاب OpenGL بخون

    برای تشخیص رو و پشت بودن جسم کاربرد دارد - تو و داخل جسم را حساب نکن
    باز هم کاملا اشتباه هست. هر رویه با توجه به ساعتگرد بودن و مخالف ساعتگرد بودن اون و با توجه به اینکه ضخامت صفر هم داره ، باز هم دارای یک رویه جلو و عقب هست. از اونجا که توی بیشتر موارد رویه های پشتی دیده نمیشن. میشه به OpenGL دستور داد که از پردازش بیخوده اونها جلوگیری کنه که کارها سریعتر پیش بره.

    کلا OpenGL و گرافیک کامپیوتری سختر از این هست که بخوای با استباط خودت (برخلاق زبونهای C#‎ و Visual basic و...) جلو بری. قبل از هر چیز باید و اما باید یه دید دقیق ریاضی و تئوری نسبت به این مسائل داشته باشی. وگرنه همش درجا میزنی. کتابهای زیادی برای معرفی دقیق OpenGL وگرافیک کامپیوتری وجود داره و من بشدت پیشنهاد می کنم اونها رو مطالعه کنی. یکسری از اونها رو میتونی توی لینک زیر پیدا کنی:

    http://opengl.persiangig.com/page.html

    سوال دوم اینه که صدا گذاری در opengl با استفاده از fmod هست
    این موضوع اصلا ربطی به OpenGL نداره.

    ؛ غیر از fmod هم داریم اسمش چی بود
    • API سیستم عامل
    • Bass
    • ّOpenAL
    • ...

  38. #198

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

    سلام
    دوستان من تازه کارم. اگه سوالام ابتدایی بود ببخشید

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

    امیدوارم خوب توضیح داده باشم
    با تشکر فراوان

  39. #199

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

    اول اینکه وقتی روتیت میکنم به نظرم خود شکل نمیچرخه بلکه دوربین داره میچرخه ، چون مثلا شدت نور اگر گوشه بالا سمت راست زیاده ، وقتی که میچرخه شدت نور مثلا میاد پایین سمت راست شکل ،درحالی که منبع باید همون بالا باشه و شکل بچرخه!
    توي OpenGL با glRotate منابع نور هم ميچرخن. بايد از push و pop استفاده كني و هر شكل رو به صورت مجزا بچرخوني.

    بعد هم اینکه موقع طراحی ، من هر ضلعی از مکعبو یه رنگی دادم مثلا یک ضلعش آبی یک ضلعش قرمز و... اما وقتی که منبع نور میزارم باید براش سه تا رنگ تعریف کنم در حالی که من میخوام همون رنگ خودش باشه و نور روش قرار بگیره مثل اون مثالی که توی صفحه اول یا دوم زدین که یک توپ فوتبال روش نور افتاده
    خب. اين سه تا رنگ (diffuse و ambient و specular) رو بترتيب به سفيد و خاكستري تيره و سفيد ست كن. و يا مي توني براي اينكه اجسام از رنگ خودشون به عنوان متريال استفاده كنند از دستور زير توي مقدار دهي اوليه برنامت استفاده كني:

        glEnable(GL_COLOR_MATERIAL);


    لينك زير يه مقاله خيلي خوب در مورد نورها در OpenGL هست كه ميتونه بهت كمك زيادي بكنه:

    http://www.falloutsoftware.com/tutorials/gl/gl8.htm

  40. #200

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

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

    آیا نیاز هست که کد هایی که نوشتم رو اینجا بیارم؟
    خواهش میکنم راهنمایی کنید خیلی کارم گیره... من خیلی چیزا در این تاپیک یاد گرفتم
    ازتون ممنونم
    آخرین ویرایش به وسیله majnoon110 : شنبه 03 تیر 1391 در 22:20 عصر

صفحه 5 از 10 اولاول ... 34567 ... آخرآخر

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

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

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