加载中...

Opengl__2D

基础代码

#include <GL/GLUT.h>
#include<time.h>
// 初始化参数
void init() {
    glClearColor(0.1, 0.1, 0.4, 0.0);//设置背景颜色
    glShadeModel(GL_SMOOTH);
}


void DrawMyObjects(void) {




    /* draw some points */
    glBegin(GL_POINTS);
    glColor3f(1.0, 0.0, 0.0);
    glVertex2f(-10.0, 11.0);//二维坐标表示点
    glColor3f(1.0, 1.0, 0.0);
    glVertex2f(-9.0, 10.0);
    glColor3f(0.0, 1.0, 1.0);
    glVertex2f(-8.0, 12.0);
    glEnd();


    /* draw some line_segments */
    glBegin(GL_LINES);
    glColor3f(1.0, 1.0, 0.0);
    glVertex2f(-11.0, 8.0);
    glVertex2f(-7.0, 7.0);
    glColor3f(1.0, 0.0, 1.0);
    glVertex2f(-11.0, 9.0);
    glVertex2f(-8.0, 6.0);
    glEnd();


    /* draw one opened_line */
    glBegin(GL_LINE_STRIP);//不闭合折线
    glColor3f(0.0, 1.0, 0.0);
    glVertex2f(-3.0, 9.0);
    glVertex2f(2.0, 6.0);
    glVertex2f(3.0, 8.0);
    glVertex2f(-2.5, 6.5);
    glEnd();


    /* draw one closed_line */
    glBegin(GL_LINE_LOOP);//闭合折线,第一个点最后会和最后一个点连接起来
    glColor3f(0.0, 1.0, 1.0);
    glVertex2f(7.0, 7.0);
    glVertex2f(8.0, 8.0);
    glVertex2f(9.0, 6.5);
    glVertex2f(10.3, 7.5);
    glVertex2f(11.5, 6.0);
    glVertex2f(7.5, 6.0);
    glEnd();


    /* draw one filled_polygon */
    glBegin(GL_POLYGON);//单个简单的多边形
    glColor3f(0.5, 0.3, 0.7);
    glVertex2f(-7.0, 2.0);
    glVertex2f(-8.0, 3.0);
    glVertex2f(-10.3, 0.5);
    glVertex2f(-7.5, -2.0);
    glVertex2f(-6.0, -1.0);
    glEnd();


    /* draw some filled_quandrangles */
    glBegin(GL_QUADS);//多组四边形
    glColor3f(0.7, 0.5, 0.2);
    glVertex2f(0.0, 2.0);
    glVertex2f(-1.0, 3.0);
    glVertex2f(-3.3, 0.5);
    glVertex2f(-0.5, -1.0);

    glColor3f(0.5, 0.7, 0.2);
    glVertex2f(3.0, 2.0);
    glVertex2f(2.0, 3.0);
    glVertex2f(0.0, 0.5);
    glVertex2f(2.5, -1.0);
    glEnd();

    /* draw some filled_strip_quandrangles */
    glBegin(GL_QUAD_STRIP);
    glVertex2f(6.0, -2.0);
    glVertex2f(5.5, 1.0);
    glVertex2f(8.0, -1.0);

    glColor3f(0.8, 0.0, 0.0);
    glVertex2f(9.0, 2.0);
    glVertex2f(11.0, -2.0);
 
    glColor3f(0.0, 0.0, 0.8);
    glVertex2f(11.0, 2.0);
    glVertex2f(13.0, -1.0);

    glColor3f(0.0, 0.8, 0.0);
    glVertex2f(14.0, 1.0);

    glEnd();


    /* draw some filled_triangles */

    glBegin(GL_TRIANGLES);//多组独立的三角形
    glColor3f(0.2, 0.5, 0.7);
    glVertex2f(-10.0, -5.0);
    glVertex2f(-12.3, -7.5);
    glVertex2f(-8.5, -6.0);
    glColor3f(0.2, 0.7, 0.5);
    glVertex2f(-8.0, -7.0);
    glVertex2f(-7.0, -4.5);
    glVertex2f(-5.5, -9.0);
    glEnd();

    /* draw some filled_strip_triangles */
    glBegin(GL_TRIANGLE_STRIP);
    glVertex2f(-1.0, -8.0);
    glVertex2f(-2.5, -5.0);
    glColor3f(0.8, 0.8, 0.0);
    glVertex2f(1.0, -7.0);
    glColor3f(0.0, 0.8, 0.8);
    glVertex2f(2.0, -4.0);
    glColor3f(0.8, 0.0, 0.8);
    glVertex2f(4.0, -6.0);
    glEnd();


    /* draw some filled_fan_triangles */
    glBegin(GL_TRIANGLE_FAN);
    glVertex2f(8.0, -6.0);
    glVertex2f(10.0, -3.0);
    glColor3f(0.8, 0.2, 0.5);
    glVertex2f(12.5, -4.5);
    glColor3f(0.2, 0.5, 0.8);
    glVertex2f(13.0, -7.5);
    glColor3f(0.8, 0.5, 0.2);
    glVertex2f(10.5, -9.0);
    glEnd();



    //坐标系 coordinate
    glBegin(GL_LINES);
    glColor3f(1.0, 0, 0);
    glVertex2f(-15, 0);
    glVertex2f(15.0, 0);
    glVertex2f(0, 15.0);
    glVertex2f(0, -15.0);
    glEnd();


    glBegin(GL_LINES);
    glColor3f(62 / 255.0, 62 / 255.0, 62 / 255.0);
    for (float i = 1; i < 15; i++) {
        glVertex2f(i, 15);
        glVertex2f(i, -15);
        glVertex2f(-i, 15);
        glVertex2f(-i, -15);

        glVertex2f(15, i);
        glVertex2f(-15, i);
        glVertex2f(15, -i);
        glVertex2f(-15, -i);
    }

    glEnd();
}

// 绘图回调函数
void display() {
    // 清除之前帧数据
    glClear(GL_COLOR_BUFFER_BIT);
    DrawMyObjects();
    // 执行绘图命令
    glFlush();
}


// 窗口大小变化回调函数
void reshape(int w, int h) {
    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(60.0, (GLfloat)w / (GLfloat)h, 0.1, 100000.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(0, 0, 25, 0, 0, -1, 0, 1, 0);
}

int main(int argc, const char* argv[]) {
    // 初始化显示模式
    glutInit(&argc, const_cast<char**>(argv));
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);

    // 初始化窗口
    glutInitWindowSize(500, 500);
    glutInitWindowPosition(100, 100);
    glutCreateWindow(argv[0]);

    init();
    glutReshapeFunc(reshape);
    glutDisplayFunc(display);

    // 开始主循环绘制
    glutMainLoop();
    return 0;
}

参考资料

opengl入门

posted @ 2022-08-29 22:11  lxp_blog  阅读(30)  评论(0编辑  收藏  举报