الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

احترت ما السبب ياريت تساعدوني .. OpenGL C++ l

بدأه daliah في 10 مايو 2014 · 0 رد · 1,144 مشاهدة · في OpenGL
مشاركة: واتساب X فيسبوك تيليجرام
#1

السلام عليكم 
مطلوب عند الضغط على رز الماوس الأيمن او اليسر ان يتغير اللون ,, وهذا يشتغل في الكود فعليا 
ولكن اللي موراضي يشتغل .. اني عملت انو المفروض الأوبحكت يتحرك إلى اليمين او اليسار او الأعلى او الأسفل عند ضغط المستخدم على احد هذه المفاتيح الموجودة على الكيبورد 
الشي الآخر هو عندما يضغط المستخدم على حرف r : يدور الأوبجكت على اليمين 
وعندما يضغط L : يدور الاوبحكت نحو اليسار 
وعند i : يعمل زووم تكبير على الأوبجكت ,, O : يعمل تصغير للاوبجكت
انا عملت هادا الشي ولكن موعارفة ايش المشكلة ليش موراضي smil%20(1).gif smil%20(6).gif

#include <stdio.h> 
#include <windows.h> 
#include <GL/gl.h>          
#include <GL/glut.h>     

#define KEY_ESCAPE 27 

typedef struct { 
    int width; 
    int height; 
    char* title; 

    float field_of_view_angle; 
    float z_near; 
    float z_far; 

} glutWindow; 
glutWindow win; 
float Rotation; 
float angle = 0.1f; 
bool colorchange = false; 

void display(bool bo) 
{ 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);         
    glLoadIdentity(); 
    gluLookAt(10, 3, 0, 0, 0, 0, 0, 1, 0);                       

    glColor3f(0.1, 0.3, 0.8); 
    if (bo == true) 
    { 
        glColor3ub(247, 179, 184); 
    } 
    //BLUE 
    glPushMatrix();                                                                                  
    glTranslatef(0, 2.2, 0); 
    glRotatef(Rotation, 2, 20, 10);                         
    glRotatef(90, 0, 1, 0);                                 
    glScalef(0.5f, 2.0f, 0.6f);                         
    // Draw the teapot 
    glutSolidTeapot(1); 
    glPopMatrix(); 

    glColor3ub(229, 171, 127); 
    if (bo == true) 
    { 
        glColor3ub(161, 85, 109); 
    } 
    //moof 6afi 
    glPushMatrix();                                          
    glTranslatef(0, 0, -2);                             
    glRotatef(Rotation, 0, 1, 0);                          
    glRotatef(90, 0, 1, 0);                              
    glutWireTeapot(1);                                   
    glPopMatrix();                                           

    glColor3f(0, 1, 0); 
    if (bo == true) 
    { 
        glColor3ub(241, 128, 43); 
    } 
    //GREEN 
    glPushMatrix();                                         
    glTranslatef(0, 0, 2);                              
    glRotatef(Rotation, 2, 20, 5); 
    glRotatef(90, 0, 1, 0); 
    glutSolidTeapot(1); 
    glPopMatrix();                                           

    glColor3f(1.0, 0.25, 0.25); 
    if (bo == true) 
    { 
        glColor3ub(187, 19, 55); 
    } 
    //PInKY 
    glPushMatrix();                                                                             
    glTranslatef(-0.9, -2, 0); 
    glRotatef(Rotation, 2, 5, 20);                         
    glRotatef(90, 0, 1, 0);     
    glScalef(0.5f, 2.0f, 0.6f);                         
    // Draw the teapot 
    glutSolidTeapot(1); 
    glPopMatrix(); 

    Rotation++; 

    glutSwapBuffers(); 

     
} 

void Keyboard_keys(unsigned char keyboard, int mouseX, int mouseY) 
{ 
    switch (keyboard){ 
    case 'r': 
        glRotatef(360.0, 0.0, 0.0, 0.0); break;//to rotate right 
    case 'l': 
        glRotatef(180.0, 0.0, 10.0, 0.0); break;//to rotate  left 
    case 'i': 
        glScalef(4.0f, 4.0f, 4.0f); break;//to increase 
    case 'o': 
        glScalef(0.4f, 0.4f, 0.4f); break;//to decrease 
    } 
    glutPostRedisplay(); 
} 



void renderScene(void) 
{ 
    display(colorchange); 
} 




void processSpecialKeys(int key, int xx, int yy) 
{ 

    float fraction = 0.08f;// step of movement 

    switch (key) { 
    case GLUT_KEY_LEFT: 
        xx -= fraction;   // move along x axes 
        break; 
    case GLUT_KEY_RIGHT: 
        angle += 0.01f; 
        xx += fraction; 
        break; 
    case GLUT_KEY_UP: 
        yy += fraction;// move along y axes 
        break; 
    case GLUT_KEY_DOWN: 
        yy -= fraction; 
        break; 
    } 
} 
void processMouse(int button, int state, int x, int y) { 

    if (state == GLUT_DOWN) 
    { 

        if (button == GLUT_LEFT_BUTTON) { 
            colorchange = true; 
        } 
     
        else if (button == GLUT_RIGHT_BUTTON) { 
            colorchange = false; 
        } 

    } 
} 

void initialize() 
{ 
    glClearColor(0.74, 0.88, 0.91, 0.0); 
    glMatrixMode(GL_PROJECTION);                                         
    glViewport(0, 0, win.width, win.height);                                 
    glMatrixMode(GL_PROJECTION);                                             
    glLoadIdentity();                                                         
    GLfloat aspect = (GLfloat)win.width / win.height; 
    gluPerspective(win.field_of_view_angle, aspect, win.z_near, win.z_far);         
    glMatrixMode(GL_MODELVIEW);                                                     
    glShadeModel(GL_SMOOTH); 
    glClearDepth(1.0f);                                                         
    glEnable(GL_DEPTH_TEST); 
    glDepthFunc(GL_LEQUAL); 
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);                         

    GLfloat amb_light[] = { 0.1, 0.1, 0.1, 1.0 }; 
    GLfloat diffuse[] = { 0.6, 0.6, 0.6, 1 }; 
    GLfloat specular[] = { 0.7, 0.7, 0.3, 1 }; 
    glLightModelfv(GL_LIGHT_MODEL_AMBIENT, amb_light); 
    glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); 
    glLightfv(GL_LIGHT0, GL_SPECULAR, specular); 
    glEnable(GL_LIGHT0); 
    glEnable(GL_COLOR_MATERIAL); 
    glShadeModel(GL_SMOOTH); 
    glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE); 
    glDepthFunc(GL_LEQUAL); 
    glEnable(GL_DEPTH_TEST); 
    glEnable(GL_LIGHTING); 
    glEnable(GL_LIGHT0); 

} 


void keyboard(unsigned char key, int mousePositionX, int mousePositionY) 
{ 
    switch (key) 
    { 
    case KEY_ESCAPE: 
        exit(0); 
        break; 

    default: 
        break; 
    } 
} 

int main(int argc, char **argv) 
{ 
    win.width = 640; 
    win.height = 480; 
    win.title = "OpenGL user interaction "; 
    win.field_of_view_angle = 45; 
    win.z_near = 1.0f; 
    win.z_far = 500.0f; 

    glutInit(&argc, argv);                                      
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);  
    glutInitWindowSize(win.width, win.height);             
    glutCreateWindow(win.title);                             
    glutDisplayFunc(renderScene);                                 
    glutIdleFunc(renderScene); 
    glutMouseFunc(processMouse); 
    glutSpecialFunc(processSpecialKeys); 
    glutKeyboardFunc(keyboard);                                 
    initialize(); 
    glutMainLoop();                                             
    return 1; 
}

وشكككرااا

مواضيع مشابهة