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

بالا