openGL در c و c++

ayask

عضو جدید
با سلام در این تاپیک قصد دارم که چند کد مربوط به openGl رو براتون بزارم.
اولیش رسم یک پنکه است که با کلید 1 و 2 و 3 سرعتش زیاد و کم میشه.
کد:
#include<windows.h>
#include<GL/glut.h>

int  w = 0;

void init(void) 
{ 
    glClearColor(0.5, 0.5, 0.75, 0.0); 
    glShadeModel(GL_SMOOTH); 
} 


void display(void) 
{ 
    glClear(GL_COLOR_BUFFER_BIT);    

    GLUquadricObj *qobj;
       
    qobj = gluNewQuadric(); // DESINE DAYERE
    glColor3f(0.5,0.25,0);

    gluDisk(qobj, 0.10, 0.25, 50, 2); // DESINE DAYERE



    glRotatef( w,0,0,1);
     
    for(int i = 0; i < 10000000; i++);
        glLineWidth(10.0);

    glBegin(GL_LINES);
        glColor3f(0.5,0,0);
        glVertex3f(-02.25,-01.25,-01.25);
        glColor3f(0.5,0.5,0.35);
        glVertex3f(0,0,0);    
    glEnd();

    glBegin(GL_LINES);
        glColor3f(0.5,0,0);
        glVertex3f(0,01.5,01.5);
        glColor3f(0.5,0.5,0.35);
        glVertex3f(0,0,0);    
    glEnd();

        glBegin(GL_LINES);
        glColor3f(0.5,0,0);
        glVertex3f(01.5,0,01.5);
        glColor3f(0.5,0.5,0.35);
        glVertex3f(0,0,0);
    glEnd();
    glLineWidth(1.0);
            

    glFlush();


    
}

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

void keyboard(unsigned char key, int x, int y) 
{ 
    switch (key) { 
    case '3': 
    w = (w + (30)) % 360;
    glutIdleFunc(display);

    break; 
    
    case '2':
    w = (w + (15)) % 360;
    glutIdleFunc(display);

        
    break; 
    case '1':
    w = (w + (5)) % 360; 
    glutIdleFunc(display);

    break; 
    case 's':
    w = 0; 
    glutPostRedisplay();

    break; 

    case 'x':
        exit(1);
        break;
        case 'X':
        exit(2);


    default: 
    break; 
    }

    
}
 
int main(int argc, char** argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(500, 500); 
    glutInitWindowPosition(100, 100); 
    glutCreateWindow(argv[0]); 
    
    init();

    glutDisplayFunc(display); 
    glutReshapeFunc(reshape); 
    glutKeyboardFunc(keyboard);

    glutMainLoop(); 
    return 0; 
}

و دومین کد مربوط به طراحی یک صندلی است

کد:
#include<windows.h>
#include<GL\glut.h>



void dis()
{
        
         

           glClear(GL_COLOR_BUFFER_BIT);

            glShadeModel(GL_SMOOTH);
    
      
    

        glLineWidth(4.0);
        glBegin(GL_QUADS);
            glColor3f(0.5,0.5,1);
            glVertex2f(-0.25,0.9);
            glColor3f(0.5,0.5,0);
            glVertex2f(0.39,0.8);
            glColor3f(0.5,0,1);
            glVertex2f(0.3,0.35);
            glColor3f(0,0.5,1);
            glVertex2f(-0.32,0.45);
        glEnd();
            
            glBegin(GL_LINES);
            glColor3f(0.5,0.5,1);
            glVertex2f(-0.39,0);
            glColor3f(0.5,0.5,0);
            glVertex2f(-0.39,-0.7);
        glEnd();
    

        
            glBegin(GL_QUADS);
            glColor3f(0.5,0.5,1);
            glVertex2f(-0.4,0);
            glColor3f(0.5,0.5,0);
            glVertex2f(0.2,-0.1);
            glColor3f(0.5,0,1);
            glVertex2f(-0.5,-0.3);
            glColor3f(0,0.5,1);
            glVertex2f(-0.98,-0.1);
        glEnd();
    
            glBegin(GL_LINES);
            glColor3f(0.5,0.5,1);
            glVertex2f(-0.31,0.45);
            glColor3f(0.5,0.5,0);
            glVertex2f(-0.39,0);
        glEnd();

            glBegin(GL_LINES);
            glColor3f(0.5,0.5,1);
            glVertex2f(0.29,0.35);
            glColor3f(0.5,0.5,0);
            glVertex2f(0.19,-0.1);
        glEnd();

    
    

            glBegin(GL_LINES);
            glColor3f(0.5,0.5,1);
            glVertex2f(0.19,-0.1);
            glColor3f(0.5,0.5,0);
            glVertex2f(0.19,-0.8);
        glEnd();

//


        glBegin(GL_LINES);
            glColor3f(0.5,0.5,1);
            glVertex2f(-0.49,-0.3);
            glColor3f(0.5,0.5,0);
            glVertex2f(-0.49,-0.93);
        glEnd();

            glBegin(GL_LINES);
            glColor3f(0.5,0.5,1);
            glVertex2f(-0.97,-0.1);
            glColor3f(0.5,0.5,0);
            glVertex2f(-0.97,-0.91);
        glEnd();
        


    glFlush();
}

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


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


    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
    glutInitWindowSize(200,300);
    glutInitWindowPosition(100,50);
    glutCreateWindow("Test Program");

    glClearColor(0.64,0.67,0.88,0);
    glutReshapeFunc(reshape); 

    glutDisplayFunc(dis);
    

    glutMainLoop();
}

واسه اونایی که با مفهوم openGl آشنا نیستند باید بگم که جهت طراحی برنامه ها و اشکال گرافیکی از این استفاده میشه ،مثلا 3dmax با این نوشته شده.
 

Kaveh.Sadeghi

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

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

salam.
yek tasvire voroodi ba format jpg ke shamele sheklhaye mosalas va dayere va yek chand zeli(polygon) k daraye pas zamineye sefid va dore ashkal range meshki bashad.karbar yeki az ashkale tasvir ra entekhab mikonad va ba mouse ruye yek noghteye delkhah az shekle entekhabi entekhab mikonad k an shekl shoroo be por shodan (rang shodan) mikonad va dar nahayat tasvire khorooji k namayesh dade mishavad an shekle entekhabi ra rangi (por shode) namayesh midahad.
b zabane c++ va ba Opengl bayad neveshte shavad.2ta algoritme por kardane ashkale hendesi boundery filled va scanline filled hastan. az tarighe poshte (stack) ham tashkhis midahad k shekl b range meshki reside k joze shekl nist va agar dar mohite sefid rang bashad joze shekl ast vabayad dar poshte gharar girad ta por shavad(rang shavad) albatte b jaye stack mishe az tabee bazgashty ham estefade kard.
y tamrine gerafikie. 2ta source code c++ ba opengl attach kardam (rasme bazi az ashkale hendesi va taghire range pas zamine)


rasme ashkale hendesi:

#include <glut.h>// also included gl.h, glu.h​
void display() {​
glClear(GL_COLOR_BUFFER_BIT); // Clear the color buffer​
glBegin(GL_QUADS); // Each set of 4 vertices form a quad​
glColor3f(0.4f, 0.4f, 0.4f); // Red​
glVertex2f(-0.7f, -0.1f); // x, y​
glVertex2f(-0.1f, -0.1f);​
glVertex2f(-0.1f, 0.5f);​
glVertex2f(-0.7f, 0.5f);​
glEnd();​
glBegin(GL_TRIANGLES); // Each set of 3 vertices form a triangle​
glColor3f(0.0f, 1.0f, 0.0f); // Green​
glVertex2f(0.2f, -0.3f);​
glVertex2f(0.8f, -0.3f);​
glVertex2f(0.5f, 0.2f);​
glEnd();​
glBegin(GL_POLYGON); // The vertices form one closed polygon​
glColor3f(0.0f, 0.0f, 1.0f); // Blue​
glVertex2f(0.2f, 0.3f);​
glVertex2f(0.4f, 0.3f);​
glVertex2f(0.5f, 0.5f);​
glVertex2f(0.4f, 0.7f);​
glVertex2f(0.2f, 0.7f);​
glVertex2f(0.1f, 0.5f);​
glEnd();​
glFlush(); // Render now​
}​
// GLUT runs as a Console Application​
int main(int argc, char** argv) {​
glutInit(&argc, argv); // Initialize GLUT​
glutCreateWindow("2D Shapes"); // Create a window with the given title​
glutDisplayFunc(display); // Register callback handler for window re-paint​
glutMainLoop(); // Enter infinitely event-processing loop​
return 0;​
}​


Taghire range pas zamine

#include <glut.h>// also included gl.h, glu.h​
void display() {​
glClearColor(1.0,0.2,0.3,1.0);​
glClear(GL_COLOR_BUFFER_BIT); // Clear the color buffer​
glBegin(GL_LINES); // Each set of 4 vertices form a quad​
glColor3f(0.0f, 0.0f, 1.0f); // Red​
glVertex2f(-0.6f, 0.2f); // x, y​
glVertex2f(-0.2f, 0.77f);​
glEnd();​
glFlush(); // Render now​
}​
// GLUT runs as a Console Application​
int main(int argc, char** argv) {​
glutInit(&argc, argv); // Initialize GLUT​
glutCreateWindow("2D Shapes"); // Create a window with the given title​
glutDisplayFunc(display); // Register callback handler for window re-paint​
glutMainLoop(); // Enter infinitely event-processing loop​
return 0;​
}​
 
Similar threads
Thread starter عنوان تالار پاسخ ها تاریخ
S کار با opengl در vc++2005.net C++ , C 12

Similar threads

بالا