بتـــــاريخ : 3/1/2011 4:10:24 AM
الفــــــــئة
  • الحـــــــــــاسب
  • التعليقات المشاهدات التقييمات
    0 1231 0


    وأخيرا تحركت الكميرا ,,,, مابقى الا نسوي لعبة 3d

    الناقل : elmasry | العمر :42 | الكاتب الأصلى : الشمري | المصدر : www.arabteam2000-forum.com

    كلمات مفتاحية  :
    الكميرا لعبة 3d

    السلام عليكم :

    ملاحظة :
    هذه الطريقة ناقصة وتحتاج لتعديلات معيّنة .

    بعد ان خصصت اسبوعا كامل لابحاث الكميرا ... طلعت هالتخصيصات فالصو ..

    المسألة سهلة ..

    قايلكم .. والله قايلكم .. هالاجانب دايما ما يعقدون الكود .. و يحولون الصعب سهل .
    بلا Vector بلا وجع راس ..:P

    فقط باللعب بالدالة :

    gluLookAt( eyex, eyey, eyez, centx, centy, centz, upx, upy, upz );

    ستحرك الكميرا . .

    سبق أن سألت الاخوان عن حساب المتجه في البارمتر الاخير .. ووضحوا لي ذلك .
    جئت البارحة .. اريد التطبيق لكن قلت خلونا .. نجرب بدون UP V ..
    وطلعت النتيجة التي اريد ,,,

    البارمتر الاول .. والثاني والثالث احداثيات الكاميرا نفسها .

    البارمتر الرابع والخامس والسادس احداثيات الجسم الذي ننظر اليه .
    الثلاث بارمترات الأخيرة تمثل متجه يسمّى Up Vector في الغالب قيمته هي : 0,1,0


    وهذا تطبيق صغير :

    #include<glut.h>
     
    /* exclusive :)  alshammari  - aboshammar@gmail.com */
      int i=0,j=0;
     
    float eyex=0, eyey=1,eyez=0;
    float centx=0 ,centy=0,centz=-100;
    float upx=0 ,upy=1,upz=0;

    void pressKey(int key, int x, int y) {
    glutPostRedisplay();
            switch (key) {

      case GLUT_KEY_LEFT :
            eyex-=0.3;
      ;break;
      case GLUT_KEY_RIGHT :
            eyex+=0.3;
      ;break;
      case GLUT_KEY_UP :
        eyey+=0.3;
            break;
      case GLUT_KEY_DOWN :
        eyey-=0.3;
            break;
      case GLUT_KEY_HOME :
            eyez-=0.3;
        break;
      case GLUT_KEY_END :
            eyez+=0.3;
     
            break;


      case GLUT_KEY_F2 :
        centx+=0.3;
            break;
      case GLUT_KEY_F3 :
        centx-=0.3;
            break;
      case GLUT_KEY_F4 :
        centy+=0.3;
            break;
      case GLUT_KEY_F5 :
        centy-=0.3;
            break;
      case GLUT_KEY_F6 :
        centz+=0.3;
            break;
      case GLUT_KEY_F7 :
        centz-=0.3;
            break;

            }
    }


    void reshape(int w, int h)
    {
            glViewport(0, 0, w, h);
            glMatrixMode(GL_PROJECTION);
            glLoadIdentity();
      gluPerspective(45.0, (float)w/(float)h, 1.0, 800.0);
            glMatrixMode(GL_MODELVIEW);
            glLoadIdentity();
    }


     

    void Init()
    {
            glClearColor(0.0, 0.0, 0.0, 0.0);  
            glEnable(GL_DEPTH_TEST);
            glEnable(GL_LIGHT0);
            glEnable(GL_LIGHTING);
    }    
       
    void render(void)
    {
     
            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
            glLoadIdentity();
     gluLookAt( eyex, eyey, eyez, centx, centy, centz, upx, upy, upz );

           
            glPushMatrix();
          glColor3f(1.0, 0.0, 0.0);
      glTranslatef(1.5,3.0,-22.0);
            glutSolidTeapot(2);
         glPopMatrix();

            /*----------------FLOOR--------------*/
       glEnable(GL_BLEND);
            glDisable(GL_DEPTH_TEST);
       glBlendFunc(GL_SRC_ALPHA,GL_SRC_ALPHA);
        glColor4f( 0.0 , 0.8 , 0.6 , 0.2);
            glPushMatrix();
      glTranslatef(0,0,-11.0);
        glRotatef(90,1,0,0);
      glScalef(4,4,4);
       glBegin(GL_QUADS);
        glVertex2f(-4 ,4 );
        glVertex2f(4 ,4 );
         glVertex2f( 4 ,-4 );
        glVertex2f(-4,-4 );
         glEnd();
        glPopMatrix();

        glDisable(GL_BLEND);
            glEnable(GL_DEPTH_TEST);

    /*----------------FLOOR--------------*/

        glutSwapBuffers();
           
    }

    void main(int argc, char **argv) {
            glutInit(&argc, argv);
            glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
            glutInitWindowPosition(100,100);
            glutInitWindowSize(320,320);
            glutCreateWindow("arab team - glut  ");
           
            Init();
            glutDisplayFunc(render);
    /***********************/
            glutIdleFunc(render);
    //      glutIgnoreKeyRepeat(1);
            glutSpecialFunc(pressKey);
            /***********************/
            glutReshapeFunc(reshape);

      glutMainLoop();
    }


    التحكم :
    الاسهم .
    F2 -----F7
    END - HOME


    طيب كيف نجعل الكميرا تدور B) ,,, . اذكر رأيت كود مشابه اذا لقيته .. وضعته هنا :.
     
    ملف مرفق(ملفات)
     
    ملف مرفق  camera.zip (36.87كيلو )

    كلمات مفتاحية  :
    الكميرا لعبة 3d

    تعليقات الزوار ()