📜  opengl draw house 使用 glut c++ 代码示例

📅  最后修改于: 2022-03-11 14:44:48.192000             🧑  作者: Mango

代码示例1
#include 
#include 

void init()
{
    // Set display window color to as glClearColor(R,G,B,Alpha)
    glClearColor(0.5, 0.9, 0.4, 0.0);

    // Set projection parameters.

    glMatrixMode(GL_PROJECTION);
    // Set 2D Transformation as gluOrtho2D(Min Width, Max Width, Min Height, Max Height)
    gluOrtho2D(0.0, 800, 0.0, 600);

}

void home()
{

    glClear(GL_COLOR_BUFFER_BIT); // Clear display window
    // Set line segment color as glColor3f(R,G,B)

    //side Wal
    glColor3f(0.1, 0.2, 0.3);
    glBegin(GL_LINE_LOOP);
    glVertex2i(200, 100);
    glVertex2i(200, 350);
    glVertex2i(100, 350);
    glVertex2i(100, 400);
    glVertex2i(700, 400);
    glVertex2i(700, 350);
    glVertex2i(600, 350);
    glVertex2i(600, 100);
    glEnd();

    //Left window
    glColor3f(0.2, 0.4, 0.3);
    glBegin(GL_POLYGON);
    glVertex2i(230, 320);
    glVertex2i(350, 320);
    glVertex2i(350, 230);
    glVertex2i(230, 230);
    glEnd();

    // lines on left window
    glColor3f(0.1, 0.7, 0.5);
    glLineWidth(5);
    glBegin(GL_LINES);
    glVertex2i(290, 320);
    glVertex2i(290, 230);
    glVertex2i(230, 273);
    glVertex2i(350, 273);
    glEnd();

    //right window
    glColor3f(0.2, 0.4, 0.3);
    glBegin(GL_POLYGON);
    glVertex2i(430, 320);
    glVertex2i(550, 320);
    glVertex2i(550, 230);
    glVertex2i(430, 230);
    glEnd();

    // lines on right window
    glColor3f(0.1, 0.7, 0.5);
    glLineWidth(5);
    glBegin(GL_LINES);
    glVertex2i(490, 320);
    glVertex2i(490, 230);
    glVertex2i(430, 273);
    glVertex2i(550, 273);
    glEnd();

    // Front Door
    glColor3f(0.7, 0.2, 0.9);
    glBegin(GL_POLYGON);
    glVertex2i(350, 200);
    glVertex2i(425, 200);
    glVertex2i(425, 100);
    glVertex2i(350, 100);
    glEnd();

    // Front Door Lock/knob
    glColor3f(0.3, 0.7, 0.9);
    glPointSize(10);
    glBegin(GL_POINTS);
    glVertex2i(400, 150);
    glEnd();

    //semi-circle roof
    //fix variable naming
    int centerx = 400;//x axis center
    int centery = 400;//y axis center
    int roofr = 100;//radius
    int roofd = 200;//diameter
    float PI = 3.141592653589793238f;
    float semicircleangle = PI * 1.0f;
    int steps = 100;
    glBegin(GL_TRIANGLE_FAN);

    for (int i = 0; i < steps; i++) {
        float theta = semicircleangle * float(i) / float(steps);//get the current angle
        float x = roofr * cosf(theta);//calculate the x component
        float y = roofr * sinf(theta);//calculate the y component
        glVertex2f(x + centerx, y + centery);//output vertex

    }
    glEnd();

    //first circle moon
    int moonr = 50;
    int mooncenterx = 700;
    int mooncentery = 500;
    int moonsteps = 100;
    float circleangle = PI * 2.0f;
    glColor3f(1.0, 1.0, 1.0);
    glBegin(GL_TRIANGLE_FAN);

    for (int a = 0; a <= moonsteps; a++) {
        float angle = circleangle * float(a) / float(moonsteps);//get the current angl
        float moonx = moonr * cosf(angle);//calculate the x component
        float moony = moonr * sinf(angle);//calculate the y component
        glVertex2f(moonx + mooncenterx, moony + mooncentery);//output vertex
    }
    glEnd();
    //second circle moon
    int moon2r = 50;
    int mooncenter2x = 725;
    int mooncenter2y = 525;
    int moonsteps2 = 100;
    float circleangle2 = PI * 2.0f;
    glColor3f(0.5, 0.9, 0.4);
    glBegin(GL_TRIANGLE_FAN);

    for (int b = 0; b <= moonsteps; b++) {
        float angle2 = circleangle * float(b) / float(moonsteps2);//get the current angle
        float moon2x = moonr * cosf(angle2);//calculate the x component
        float moon2y = moonr * sinf(angle2);//calculate the y component
        glVertex2f(moon2x + mooncenter2x, moon2y + mooncenter2y);//output vertex
    }
    glEnd();
    // Process all OpenGL routine s as quickly as possible
    glFlush();
}

    int main(int argc, char** argv) {
    // Initialize GLUT
    glutInit(&argc, argv);
    // Set display mode
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    // Set top - left display window position.
    glutInitWindowPosition(100, 100);
    // Set display window width and height
    glutInitWindowSize(900, 700);
    // Create display window with the given title
    glutCreateWindow("2D House Assignment");
    // Execute initialization procedure
    init();
    // Send graphics to display window
    glutDisplayFunc(home);
    // Display everything and wait.
    glutMainLoop();
}