صفحه 4 از 10 اولاول ... 23456 ... آخرآخر
نمایش نتایج 121 تا 160 از 376

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

  1. #121
    کاربر تازه وارد آواتار zuck_619
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    خونمون
    سن
    36
    پست
    31

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

    چطوری میشه چند شکل خاص رو تو صفحه دوران داد ؟
    در حالت عادی نقطه 0 و 0 مرکز تصویر . اما وقتی از
    gluOrtho2D
    استفاده میشه جاش عوض میشه ! اینو توضیح بدین لطفا

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

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

    چطوری میشه چند شکل خاص رو تو صفحه دوران داد ؟
    روش معمولش استفاده از glPushMatrix و glPopMatrix است. ولی می شه ماتریس های اصلی رو خودمون دستکاری کنیم و باز نویسی کنیم.
    در حالت عادی نقطه 0 و 0 مرکز تصویر . اما وقتی از
    gluOrtho2D
    استفاده میشه جاش عوض میشه ! اینو توضیح بدین لطفا
    خوب شما وقتی می خواهید این تابع را تنظیم کنی جوری تنظیمش کن که مرکز صفحه باشه. یا با glTranslate مختصات رو جابه جا کن.

    درثانی منم مثل خودتونم تازه کارم بهتره تو خود انجمن سوالاتون رو مطرح کنید تا دوستان ماهر تر جواب بدند.

  3. #123
    کاربر تازه وارد آواتار zuck_619
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    خونمون
    سن
    36
    پست
    31

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

    آقا ما اینو نوشتیم . ولی اجرا نشد . کلی مشکل داشت . دوستان کمک کنن لطفا :
    #include <time.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include<math.h>
    #include<gl\glut.h>
    #define PI 3.1415926535898
    GLint circle_points = 360;
    class time
    {
    public:
    int hour; // ساعت
    int min; //دقیقه
    int sec;//ثانیه
    };
    void gettime()
    {
    struct tm *time_now;
    time_t secs_now;
    char str[2];
    tzset(); //تبديل ساعت گرينويچ به ساعت محلي
    time(&secs_now);
    time_now = localtime(&secs_now);
    strftime(str, 3,"%H",time_now);
    time.hour = atoi(str);
    strftime(str, 3,"%M",time_now);
    time.min = atoi(str);
    strftime(str, 3,"%S",time_now);
    time.sec = atoi(str);
    printf("%d:%d:%d",h,m,s);
    }
    void MyCircle2f(GLfloat centerx, GLfloat centery, GLfloat radius)
    {
    GLint i;
    GLdouble theta;
    glLineWidth(5.0) ;
    glColor3f(1.8,1.0,0.1);
    glBegin(GL_LINE_LOOP);
    for (i = 0; i < circle_points; i++)
    {
    theta = 2*PI*i/circle_points;
    glVertex2f(centerx+radius*cos(theta), centery+radius*sin(theta));
    }
    glEnd();
    }
    void drawhour ()
    {
    glPushMatrix();
    glBegin(GL_POLYGON);
    glLineWidth(5.0) ;
    glColor3f(1.8,0.0,0.1);
    glVertex2f( centerx,centery) ;
    glVertex2f( centerx,.9*radius) ;
    glEnd () ;
    glRotatef(time.hour*6,0,0,0.1);
    glPopMatrix();
    sleep (36000) ;
    }
    void drawmin ()
    {
    glPushMatrix();
    glBegin(GL_POLYGON);
    glLineWidth(5.0) ;
    glColor3f(1.8,0.0,0.1);
    glVertex2f( centerx,centery) ;
    glVertex2f( centerx,.5*radius) ;
    glEnd () ;
    glRotatef(time.min*6,0,0,0.1);
    glPopMatrix();
    sleep (60000) ;
    }
    void drawsec ()
    {
    glPushMatrix();
    glBegin(GL_POLYGON);
    glLineWidth(1.0) ;
    glColor3f(1.8,0.0,0.1);
    glVertex2f( centerx,centery) ;
    glVertex2f( centerx,.9*radius) ;
    glEnd () ;
    glRotatef(time.sec*6,0,0,0.1);
    glPopMatrix();
    sleep (1000) ;
    }
    void drawpoint ()
    {

    for (int i =0 ; i<=330 ; i+=30)
    {
    glPushMatrix();
    glBegin(GL_POLYGON);
    glLineWidth(1.0) ;
    glColor3f(0.0,0.0,0.0);
    glVertex2f( centerx,centery) ;
    glVertex2f(0.25, 0.75);
    glEnd();
    glRotatef(-i,0,0,0.1);
    glPopMatrix();
    }
    }
    void Display(void)
    {
    glClear(GL_COLOR_BUFFER_BIT);
    gettime();
    MyCircle2f(0.0,0.0, .75);
    drawhour ();
    drawmin ();
    drawsec () ;
    glFlush();
    glutSwapBuffers();
    }
    void init(void){
    glClearColor(1.0,1.,1.0,1.0);
    }
    int main(int argc, char* argv[])
    {
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize (500, 500);
    glutCreateWindow("clock");
    init();
    glMatrixMode(GL_PROJECTION);
    glutDisplayFunc(Display);
    glutIdleFunc(Display);
    glutMainLoop();
    return 0;
    }

  4. #124

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

    چطوری میشه چند شکل خاص رو تو صفحه دوران داد ؟
    میتونی از push/pop تو در توی ماتریسها استفاده کنی.

    روش بهتر ساختن دستی ماتریسها و لود کردن اونها داخل حافظه به کمک glLoadMatrix هستش. میتونی برای ساخت این ماتریسها بدون هیچ دردسری از کلاس matrix موتور kge استفاده کنی. من خودمم از کدهای kge برای اینکار استفاده می کنم که کوچول اونها رو نوشته.


    در حالت عادی نقطه 0 و 0 مرکز تصویر . اما وقتی از
    gluOrtho2D
    استفاده میشه جاش عوض میشه ! اینو توضیح بدین لطفا
    دستور gluOrtho یه ماتریس دو بعدی (orthographic ) رو میسازه که با لود شدن اون (به کمک خود دستور) اثر پروجکشن از بین میره و انگار دارین دو بعدی کار میکنین (مثل شروع کار) که توی این حالت z تاثیر نداره مگر اینکه بیشتر از 1 و یا کمتر از -1 بدین که باعث شه شکل محو بشه. پارامترهای این دستور به ترتیب عبارتند از:


    • left: مختصات از سمت چپ صفحه
    • right: مختصات از سمت راست صفحه
    • bottom: مختصات از پایین صفحه
    • top: مختصات از بالای صفحه

    به عنوان مثال دستور زیر باعث میشه که مختصات 0 و 0 به گوشه سمت چپ پایین صفحه انتقال پیدا بکنه:
    gluOrtho2d(0, عرض, 0, ارتفاع);


    یعنی اگر میخوای وسط صفحه باشه کافیه ارتفاع و عرض پنجره رو تقسیم به دو کنی و اونها رو داخل دستور وارد کنی. مثلا اگر طول و ارتفاع پنجره 400 باشه باید به شکل زیر عمل کرد:
    glOrtho(200,200,200,200,1,-1); 


    زمانی که داری دو بعدی کار میکنی بهتره با پیکسل ها کار کنی(از دستور glVertex{2,3,4}i استفاده کن).(اگر اندازها دقیقا برات مهم نیست، مثلا اگر نرم افزار CAD تولید نمی کنی) به عنوان مثال تکه کد زیر یه مستطیل که از گوشه چپ پایین 10 پیکسل فاصله داره رو رسم میکنه.:
        glBegin(GL_QUADS);
    glVertex2i(10,10);
    glVertex2i(300,10);
    glVertex2i(300,300);
    glVertex2i(10,300);
    glEnd();


    توی کد بالا از دستور glOrtho به شکل زیر استفاده شده:
    glOrtho(0,400,0,400,1,-1);
    آخرین ویرایش به وسیله pswin.pooya : پنج شنبه 19 فروردین 1389 در 01:34 صبح

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

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

    والا به نظر من خیلی کار رو سخت کردی ... اصلاح شده کدت این می شه :


    #include <time.h>
    #include <windows.h>
    #include <stdlib.h>
    #include <math.h>
    #include <gl\glut.h>
    #define PI 3.1415926535898
    GLint h,m,s,circle_points = 360;
    GLboolean min=0;

    void gettime()
    {
    struct tm *time_now;
    time_t secs_now;

    char str[2];
    tzset(); //ÊÈÏíá ÓÇÚÊ Ñíäæí Èå ÓÇÚÊ ãÍáí
    time(&secs_now);
    time_now = localtime(&secs_now);
    strftime(str, 3,"%H",time_now);
    h = atoi(str);
    strftime(str, 3,"%M",time_now);
    m = atoi(str);
    strftime(str, 3,"%S",time_now);
    s = atoi(str);
    }

    void output(int x, int y, char *string)
    {
    int len, i;
    glRasterPos2f(x, y);
    len = (int) strlen(string);
    for (i = 0; i < len; i++)
    {
    glutBitmapCharacter(GLUT_BITMAP_8_BY_13, string[i]);
    }
    }

    void MyCircle2f(GLfloat centerx, GLfloat centery, GLfloat radius)
    {
    GLint i;
    GLdouble theta;
    glLineWidth(5.0) ;
    glColor3f(1.8,1.0,0.1);
    glBegin(GL_LINE_LOOP);
    for (i = 0; i < circle_points; i++)
    {
    theta = 2*PI*i/circle_points;
    glVertex2f(centerx+radius*cos(theta), centery+radius*sin(theta));
    }
    glEnd();
    }

    void drawhms (GLfloat centerx, GLfloat centery,GLint hms,GLfloat r)
    {

    glPushMatrix();
    glTranslatef( centerx, centery, 0.0f );
    glRotatef(-(hms*r)+45,0,0,1.0);
    glLineWidth(2.0) ;
    if(min) r=10;
    else if(r==6) r=8;
    glBegin(GL_LINES);glVertex2i(0.0,0.0); glVertex2i(150.0/(r),150.0/(r)); glEnd();
    glPopMatrix();
    min=0;
    }

    GLint i=0;
    GLfloat cx=100.0,cy=75.0;
    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

    gettime();
    MyCircle2f(cx,cy,30);
    glColor3f(0.0, 0.0, 1.0); //line colour set to blue
    drawhms(cx,cy,h,30);
    min=1;
    drawhms(cx,cy,m,6);
    drawhms(cx,cy,s,6);

    glPushMatrix();
    glTranslatef( cx-2, cy, 0.0f );
    glRotatef(90,0,0,1);
    for( i=360;i>0;i-=30){
    char a[5]="0";
    itoa(i/30,a,10);
    output(30*cos(-(PI/180*i)), 30*sin(-(PI/180*i)),a);
    }
    glPopMatrix();

    glFlush(); //process all OGL functions immediately
    glutSwapBuffers();
    }
    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("Clock"); //now create display win
    init(); //run initilization procs
    glutDisplayFunc(lineSegments); //call drawing func
    glutIdleFunc(lineSegments);
    glutMainLoop(); //display all and wait
    return 0;
    }
    فایل های ضمیمه فایل های ضمیمه

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

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

    اینم برای دوستان علاقمند به OpenGL :
    یک سری مثال از کار با این بسته گرافیکی از سایت رسمی OpenGL
    http://www.opengl.org/resources/code.../examples.html

    ____________
    دوستانی که دنبال یک رفرنس برای کار با توابع Opengl هستند از کتاب blueBook استفاده کنند.

  7. #127
    کاربر تازه وارد آواتار zuck_619
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    خونمون
    سن
    36
    پست
    31

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

    سلام دوستان . بعد کلی غیبت اومدم باز . من توضیحاتی در مورد بافر ها و ماتریسها تو openGL میخوام . برای کار با دستورات دچار مشکل شدم . ...

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

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

    والا قضیه این ماتریس ها هم واسه خودش کلاسی داره ولی در کل یک سرچی بزنی خیلی کتاب خفن پیدا می کنی به نظر من همیشه استفاده از کد های آماه بهتره ....

  9. #129

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

    نقل قول نوشته شده توسط amin1softco مشاهده تاپیک
    فصل سوم
    این فصل بیشتر در مورد الگوریتم های ترسیم در سیستم راستر مثل DDA و برزنهام و نقطه میانی است ولی چیزی که بدرد بخوره این هاست .
    GL_POINTS رسم نقطه در صفحه
    GL_LINES رسم خطوط بین نقاط
    GL_LINE_STRIP رسم خطوطه بین نقاط مختلف از نقطه اول شروع می کنه به هم وصلشون می کنه تا نقطه آخر
    GL_LINE_LOOP مثل حالت قبله فقطه نقطه آخری رو به اولی رسم می کنه
    و همه اینها ثابت های OpenGL هستند و در موقعیت زیر به جای GL_LINES ظاهر می شوند:

    glBegin(GL_LINES);

    glVertex2i(180,15); glVertex2i(10,145);

    glVertex2i(145,10); glVertex2i(15,180);

    glEnd();


    لیست کامل:



    glBegin and glEnd delimit the vertices that define a primitive or a group of like primitives. glBegin accepts a single argument that specifies in which of ten ways the vertices are interpreted. Taking n as an integer count starting at one, and N as the total number of vertices specified, the interpretations are as follows:


    GL_POINTS


    Treats each vertex as a single point. Vertex n defines point n. N points are drawn.


    GL_LINES


    Treats each pair of vertices as an independent line segment. Vertices 2n−1 and 2n define line n. N/2 lines are drawn.


    GL_LINE_STRIP


    Draws a connected group of line segments from the first vertex to the last. Vertices n and n+1 define line n. N−1 lines are drawn.


    GL_LINE_LOOP


    Draws a connected group of line segments from the first vertex to the last, then back to the first. Vertices n and n+1 define line n. The last line, however, is defined by vertices N and 1. N lines are drawn.


    GL_TRIANGLES


    Treats each triplet of vertices as an independent triangle. Vertices 3n−2, 3n−1, and 3n define triangle n. N/3 triangles are drawn.


    GL_TRIANGLE_STRIP


    Draws a connected group of triangles. One triangle is defined for each vertex presented after the first two vertices. For odd n, vertices n, n+1, and n+2 define triangle n. For even n, vertices n+1, n, and n+2 define triangle n. N−2 triangles are drawn.


    GL_TRIANGLE_FAN


    Draws a connected group of triangles. One triangle is defined for each vertex presented after the first two vertices. Vertices 1, n+1, and n+2 define triangle n. N−2 triangles are drawn.


    GL_QUADS


    Treats each group of four vertices as an independent quadrilateral. Vertices 4n−3, 4n−2, 4n−1, and 4n define quadrilateral n. N/4 quadrilaterals are drawn.


    GL_QUAD_STRIP


    Draws a connected group of quadrilaterals. One quadrilateral is defined for each pair of vertices presented after the first pair. Vertices 2n−1, 2n, 2n+2, and 2n+1 define quadrilateral n. N/2−1 quadrilaterals are drawn. Note that the order in which vertices are used to construct a quadrilateral from strip data is different from that used with independent data.


    GL_POLYGON


    Draws a single, convex polygon. Vertices 1 through N define this polygon.


    Only a subset of GL commands can be used between glBegin and glEnd. The commands are glVertex, glColor, glIndex, glNormal, glTexCoord, glEvalCoord, glEvalPoint, glArrayElement, glMaterial, and glEdgeFlag. Also, it is acceptable to use glCallList or glCallLists to execute display lists that include only the preceding commands. If any other GL command is executed between glBegin and glEnd, the error flag is set and the command is ignored.


    Regardless of the value chosen for mode, there is no limit to the number of vertices that can be defined between glBegin and glEnd. Lines, triangles, quadrilaterals, and polygons that are incompletely specified are not drawn. Incomplete specification results when either too few vertices are provided to specify even a single primitive or when an incorrect multiple of vertices is specified. The incomplete primitive is ignored; the rest are drawn.


    The minimum specification of vertices for each primitive is as follows: 1 for a point, 2 for a line, 3 for a triangle, 4 for a quadrilateral, and 3 for a polygon. Modes that require a certain multiple of vertices are GL_LINES (2), GL_TRIANGLES (3), GL_QUADS (4), and GL_QUAD_STRIP (2).



    ممنونم از راهنماييتون. امكانش هست تابعهاي بيشتري در اختيارمون قرار بدين

  10. #130

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

    امكانش هست تابعهاي بيشتري ازopengl كه بصورت gl_ هستند دراختيارمون قرار بدين

  11. #131

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

    میتونید به کتاب قرمز و یا super bible مراجعه کنید:

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

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

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

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

  13. #133
    کاربر تازه وارد
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    تبریز
    سن
    37
    پست
    74

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

    با سلام
    من می خوام گیم snake رو با opengl بنویسم میشه کمکم کنید

  14. #134

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

    چرا تاپیک خوابیده بی صبرانه منتظر ادامه هستیم

  15. #135

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

    لطفا ادامه بدین
    خیلی مفید بود

  16. #136

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

    از دوستان کسی نیست که جوابم رو بده ؟
    این رسما درخواست پروژه آخر ترم هستش! که مخالف قوانین سایت هست.

  17. #137

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

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

    این رسما درخواست پروژه آخر ترم هستش! که مخالف قوانین سایت هست.


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

  18. #138

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

    فکر نکنم کسی کمکت کنه چون open gl یکی از مباحثی هست که کسانی که چیزی بلدند با سختی خیلی زیاد تونستن اونو یاد بگیرن وبه خود اونا هم کسی کمک نکرده البته اگه اشتباه نکنم این مطلب تو مقدمه یک مقاله که از سایت gamedev دان کرده بودم بیان شده بود.البته قصد توهین به کسی نداشتم ولی منظورم اینه که خودت باید سرهم کنی. برای یادگیری هم اگه تو ویندوز میخوای از اون استفاده کنی بهتره قبل از یادگیری opengl کمی API های ویندوز رو یاد بگیری. برای لینوکس هم به نظرم باید دوستان با سوادتر از من بگن.

  19. #139

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

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

  20. #140

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

    آقایون
    حاضرم برای حلش پول هم بدم
    جواب این سوال برام خیلی مهم شده
    بلد نیستم اما واسه رو کم کنیه که مهم شده برام
    لطفأ کمکم کنید
    مشکلت کجای برنامه هستش؟ توی رسم دایره و یا چرخوندن اون؟

  21. #141

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

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

  22. #142

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

    جابجا کردن اشکال رو توی فضا با تبدلات اتجام میدن. تبدیلات از سi عمل انتقال، چرخش و مقیاس تشکیل شده:

    انتقال: یک جسم رو از یک نقطه به نقطه دیگه میبره. توی OpenGL بر انتقال دادن اشیاء از glTranslatef استفاه میکنن مثلا کد زیر 10 واحد شکل رو روی محورهای y جا به جا میکنه.
    glTranslatef(0,10,0);
    چرخش: چند نمونه چرخش وجود داره اما اونی که توی fixed-function، اپن جی ال هستش چرخش به دور یک محور هستش و کارش اینه که شکل سه بعدی شما رو دور محوری که مشخص کردن می چرخونه. اینکار داخل OpenGL به صورت glRotatef انجام میگیره و داخل دایرکت ایکس با دستور D3DXMatrixRotationAxis. (الته همه اونها از این نوع یعنی چرخش به دور محور دلخواه مشتق میشن) مثلا داخل OpenGL برای اینکه به اندازه 90 درجه شکل رو به دور محورهای x بچرخونی باید از دستور زیر استفاده کنی:

    glRotatef(PI/2,1.0f,0,0);
    مقیاس: برای بزرک و کوچیک کردن اشکال به کار میره و از دستور glScalef برای اینکار استفاده میشه.ا ین دستور سه پارامتر میگیره که برای مقیاس توی هر کدوم از محورها هستش. مثلا اگر به پارامتر اول 2 بدی شکل رو روی محورهای x دو برابر میکنه (مولفه x ورتکسها رو دو برابر میکنه) و یا اگر بهش 0.5 اونها رو نصف میکنه. مثلا کد زیر شکل رو دو برابر میکنه.
    glScalef(2.0,2.0,2.0);
    تمامی سه دستور بالا روی یک ماتریس اثر میذارن که ModelView نامیده میشه. بحث ماتریسها خیلی پیچیده هستش و صحبت کردن در مورد اونها داخل یک فروم خارج از حوصله هم فروم و هم اعضای اون مثل من هست. فصل چهارم کتاب Beginning OpenGL Game Programming درباره ماتریسها صحبت میکنه. همینطور اگر داخل این فروم یه سرچ بزنی می تونی مواردی رو پیدا کنی.

    خب حالا برای حرکت توپ باید یه بردار سرعت درست کنی و هر لحظه مکان توپ رو با اون جمع کنی و اگر مکان توپ از گوشه های صفحه (-1و1) بیرون رفتش معکوس اون بردار رو بدست بیاری. درست کردن بردار سرعت یا جابجایی و محاسبه بیرون رفتن اون و ... مربوط به برنامه نویسی OpenGL نیستش. اما رسم توپ توی نقطه مربوط به برنامه نویسی GL میشه اجازه بده فرض کنیم که px,py و pz موقعیت توپ (دایره) من رو داخل صفحه مشخص میکنه. پس کد من داخل OpenGL باید یه صورت زیر باشه:

    void Display()
    {
    glLoadIdentity();
    glTranslatef(px,py,pz);
    // rasme daire
    و ...

    }
    این کد زمانی به درد میخوره که فقط بخوای دایره رو رسم کنی و اگر مورارد دیگه داخل صفحه باشن همه با هم حرکت می کنن. توی این حالت اگر بخوای فقط دایره حرکت کنه باید بنویسی:

    void main()
    {
    glPushMatrix();
    glLoadIdentity();
    glTranslatef(px,py,pz);
    // rasme daire
    glPopMatrix();

    و بقیه کد

    }

  23. #143

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

    آقای pswin.pooya با تشکر از مطالب خوبی که ارسال کردی
    واقعأ ممنونم
    چیزای خوبی بود که به دردم می خوره
    اما یه سوال دیگه دارم
    توی مثالی که زده بودم قراره دایره ای که رسم کردم طبق یه زاویه ای که با یکی از محورها داده میشه ، حرکت کنه و وقتی به اتنهای صفحه رسید دوباره بر اساس همون زاویه اما مخالف محور قبلی به حرکتش ادامه بده . طوری که دایره به 4طرف مانیتور برخورد کنه و بطور متوالی
    یه راهنمایی در این مورد انجام بدین ممنون میشم

  24. #144

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

    توی مثالی که زده بودم قراره دایره ای که رسم کردم طبق یه زاویه ای که با یکی از محورها داده میشه ، حرکت کنه و وقتی به اتنهای صفحه رسید دوباره بر اساس همون زاویه اما مخالف محور قبلی به حرکتش ادامه بده . طوری که دایره به 4طرف مانیتور برخورد کنه و بطور متوالی
    یه راهنمایی در این مورد انجام بدین ممنون میشم
    گفتم که برای اینکار باید یه بردار سرعت و یا بردار جهت حرکت (اگر نرمال باشه) درست کنی. مثلا بردار (2,.3.) داخل کد زیر میگه که توی هر فراخوانی به x، .2 واحد و y سه دهم واحد اضافه کنه:

    void display()
    {
    px += .2;
    py =.3;

    ....


    حالا اگر یکی از px و یا pyها بزرگتر از یک و یا کوچیکتر از -1 شد. اون مولفه بردار سرعت رو توی -1 ضرب مبکنی. مثلا:

    struct vector
    {
    vector(float _x,float _y){ x= _x;y = _y;};
    float x;
    float y;
    };

    vector s(.2,.3);
    vector pos (0,0);
    void main ()
    {
    pos.x += s.x;
    pos.y += s.y;

    if (pos.x > 1 || pos.x < -1)
    s.x = -s.x
    if (pos.y > 1 || pos.y <-1)
    s.y = -s/y;

    ...

    glTranslatef(pos.x,pos.y,0);

    ....
    }

  25. #145

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

    salam!
    kho0bi amin?!
    bebin man o0n postet darbare "PolyTrance " ro kho0ndam!
    man khodam hafte Dge projhe daram shatranj!
    bad hameye mohrehasho doros kardam ba 3DMax!
    bad o0n PolyTrance ro download kardam,bad ba o0n export kardam be openGl...vali vaghT run kardam sheklesh daghighan o0n nashod..yaani engar yechizayish kame..tike tike boridan az yejahayish..mikhastam bebinam to ham hamin moshkelo dari?! rahe hali nis barash?
    merC!
    khaheshan age mishe zood bejavab chon cchan rooz bishtar vaght nadaram!
    آخرین ویرایش به وسیله amirali! : چهارشنبه 02 تیر 1389 در 00:32 صبح

  26. #146

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

    salam man 1 barnamey paint neveshtam, kheili kam dar rabeteh ba ijad menue v nahvehy karbordesh midonam age mishe komakam konid
    فایل های ضمیمه فایل های ضمیمه

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

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

    به نظر من بهتر قید توابع glut را بزنید برای منو اما اگر هنوز اسرار دارید می تونید یک تصویر از کلید ها درست کنید و بعد وقتی مختصات ماوس روی اونجا ها قرار گرفت یک تابع را اجرا کنید یعنی منو و اینها رو خودتون بسازید glx وجود داره
    http://sourceforge.net/projects/glui/
    http://www.lighthouse3d.com/opengl/glut/index.php?9

  28. #148

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

    سلام
    آقای amin1softco
    میشه ID تونو داشته باشم؟
    برای یه کاری
    ممنون

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

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

    منبع : همین جا بگم اگه انگلیسیتون خوبه منبع رو بخونید چون من ترجمم یکمی مورد داره

    آموزش لود کردن و نمایش یک فایل تصویری بوسیله کتابخانه دویل و اپن جی ال(devil-OpenGL)
    دویل (همچنین به عنوان OpenIL شناخته می شه) یک کتابخانه برای کار با عکس ها است که اجازه لود و دستکاری کردن(فیلتر گذاری و تغییر اندازه) تصاویر را به شما می دهد.
    توسعه دهنده دویل Denton Woods دنتون وود کار روی پروزه خودش را حدود 2 سال به تعویق انداخت اما او کد نویسی آن را دوباره شروع کرده است. اما قدر این کتابخانه را بدانید.

    دویل دنبال می کنه فلسفه نحوی توابع OpenGL را و راهی که ما آنها را به کار می بریم. بنابر این اگر شما با OpenGL آشنایی داشته باشید می تونید در عرض چند دقیقه کار با این کتابخانه را فرا بگیرید.
    دویل یک کتابخانه متن باز است و برای کاربرد های تجاری و غیر تجاری رایگان است. شما می توانید اطلاعات بیشتر در این زمینه را در لینک زیر بیابید:
    http://openil.sourceforge.net/about.php
    هدف از این خودآموز نشان دادن راهی برای لود یک تصویر jpg و بکار بردن آن به عنوان RGB byte داده های منبع برای بافت(الگوtexture ) یک مستطیل (محیط بسته دوبعدی)است.
    مهمترین قسمت این خود آموز تابع DevILTextureLoader() است.
    بطور کلی , این تابع مراحل زیر را انجام می دهد:
    1- ساخت و پیوست نام تصویر:
    ILuint ImgId = 0;
    ilGenImages(1, &ImgId);
    ilBindImage(ImgId);


    شبیه توابع اپن جی ال زیر
    glGenTextures() / glBindTexture()
    2- لود کردن تصویر از نام تصویر:
    ilLoadImage(filename);


    3- بدست آوردن حجم تصویر و اختصاص حافظه برای کپی کردن الگو RGB byte
    width = ilGetInteger(IL_IMAGE_WIDTH);
    height = ilGetInteger(IL_IMAGE_HEIGHT);
    pixmap = new BYTE[width * height * 3];
    ilCopyPixels(0, 0, 0, width, height, 1, IL_RGB,
    IL_UNSIGNED_BYTE, pixmap);

    4- آزاد کردن تصویر و حافظه مربوط به دویل:
    ilBindImage(0);
    ilDeleteImage(ImgId);


    بر اساس برنامه شما مرحله 3 ضروری نیست. دویل نگهداری می کنه یک حافظه بافر با داده های تصویری پیوست شده به نام تصویر در این مثال ImgId شما می توانید به طور مستقیم به بافر دویل دسترسی داشته باشید:

    ilBindImage(ImgId);
    BYTE* data = ilGetData();


    ilGetData() :
    به شما اجازه می دهد یک اشاره گر مستقیم به محدوده تصویر فعلی داشته باشید. و به اندازه نام عکس معتبر است. شما می توانید از اشاره گر داده ها بوسیله تابع ilGetData() استفاده کنید.

    در فایل ضمیمه تما فایل های مورد نیاز این خود آموز قرار داده شده است (*.h + *.dll + *.lib)

    فایل ضمیمه حجمش بالا بود.

  30. #150

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

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

                ilInit ();
    ilEnable (IL_CONV_PAL);


    همچنین شما می تونید از devil برای تهیه شات از برنامتون استفاده کنید.این تکه کد از انجین من برای تهیه شات از فریم بافر (بافر رنگ) هست (کد مربوط به ویرایش 0.0.0 بود) :

            void Renderer::writeContentsToFile(std::string filename)
    {
    ILuint img;
    ilGenImages(1, &img);
    ilBindImage(img);
    char *buf = new char[ m_uWidth * m_uHeight * 4 *4];
    glReadPixels(0, 0, m_uWidth, m_uHeight, GL_RGBA,
    GL_UNSIGNED_BYTE, buf);

    ilTexImage(m_uWidth, m_uHeight, 1, 4, IL_RGBA,
    IL_UNSIGNED_BYTE,buf );

    // save image to file
    #ifdef DGE_UNICODE_SUPPORTED
    core::String f(filename.c_str());
    ilSaveImage(f.getUTF16());
    #else
    ilSaveImage(IL_PNG,filename.c_str());
    #endif

    DGE_DELETE_ARRAY(buf);
    ilDeleteImage(img);
    }

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

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

    آموزش به کار گیری openGL در زبان ها برنامه نویسی دیگر
    متناسب با هر زبان یک فرم ورک تدارک دیده شده پس بهتره بعد از انتخاب زبانی که می خواهید باهاش برنامه بنویسید یک سری به اینجا بزنید :
    http://www.opengl.org/resources/bindings/
    خوب من فکر می کردم به راحتی می تونم از اپن جی ال در سی شارپ استفاده کنم ولی بعد از یکمی سرچ و اینها به این نتیجه رسیدم که برای بکار بردن اپن جی ال در سی شارپ چند راه وجود داره :
    1-فرم ورک csgl هست که قدیمی شده و tao که توسعه یافته همونه
    2- فرم ورک OpenTK بهترین راه به نظر من و آپدیت آپدیت.
    3- SharpGL
    دوستان اگه راه بهتری سراغ دارند دریغ نکنند.
    در آخر یک نتیجه دیگه هم بدست آوردم و اون این بود که آدم بره سراغ دایرکس که تو سی شارپ خیلی راحت (البته نه در اون حد) برنامه بنویسه البته سه بعدی.

  32. #152

    اشکال در glut.h

    سلام
    برای نصب 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 رو میذارم اینجا یه نگاه کنین ببینین این چی میگه
    دیگه دارم قاطی میکنم
    لطفا کمک کنین

    با تشکر
    فایل های ضمیمه فایل های ضمیمه

  33. #153

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

    مشکل از opengl.h هستش. نه glut.h اول از همه opengl.h رو حذف کنید و سعی کنید برنامه رو کامپایل کنید. اگر نشدش کتابخونه glew.h رو بگیرید و از هدر اون به جای opengl.h استفاده کنید. من خودم هم بارها به این مشکل داخل ویژوال استادیو برخوردم و راه حل بهتری پیدا نکردم.

  34. #154

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

    از کمکتون خیلی ممنون
    1- سرچ کردم opengl.h اصلا ندارم
    2- glew-1.5.6-win32 رو گرفتم و نصب کردم خدا رو شکر فعلا داره کار میکنه

    واقعا ازتون سپاسگذارم
    بودم شدم
    باز هم ممنون

  35. #155
    کاربر جدید آواتار smh1988
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    تهران و مشهد و نجف آباد
    سن
    36
    پست
    14

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


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

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

    دوستاني كه گرافيك دارند و دنبال سورس كد هاي تايپ شده كتاب مي گردند به اين لينك ها مراجعه كنند:
    این صفحه را مرور کنید
    http://www.cs.ukzn.ac.za/~satya/COMP712/

    اینم لینک اصلی کد های کتاب
    http://www.cs.ukzn.ac.za/~satya/COMP712/PROGS/Code.zip


    اینم لینک اون جزوه انگلیسیه که می تونید باهاش غلطای کتابو پیدا و تصحیح
    کنید
    http://www.cs.ukzn.ac.za/~satya/COMP712/GRAPHICS_notes.pdf



    اسلاید هاي كتاب رو اینجا دیدم جالب بود
    http://www.cs.virginia.edu/~gfx/Courses/2004/Intro.Spring.04/
    ...........................

    آموزش خارج از كتاب
    http://nehe.gamedev.net/

  37. #157

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

    سلام
    برای کار با opengl در visual C++‎6 و visual C++‎2008 آیا کدهاشون با هم فرق داره؟؟؟؟؟؟
    آیا می تونم از کدهای visual C++‎6 در visual C++‎2008 استفاده کنم؟؟؟؟؟؟؟؟؟؟؟

  38. #158

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

    می تونم توی این تاپیک در مورد گرافیک در visual C++‎6 سوال بپرسم.
    منتظر جواب هستم.
    ممنون

  39. #159

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

    برای کار با opengl در visual C++‎6 و visual C++‎2008 آیا کدهاشون با هم فرق داره؟؟؟؟؟؟
    نه
    آیا می تونم از کدهای visual C++‎6 در visual C++‎2008 استفاده کنم؟؟؟؟؟؟؟؟؟؟؟
    بستگی داره اما توی 90 درصد موارد میشه

     							می تونم توی این تاپیک در مورد گرافیک در visual C++‎6 سوال بپرسم.

    تاپیک جدا باز کنی بهتره

  40. #160

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

    سلام میشه لطف کنید برنامه کامل ساعت درopen gl برام بذارین.

صفحه 4 از 10 اولاول ... 23456 ... آخرآخر

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

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

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