前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >5.5 Opengl编程实例-红蓝三角形

5.5 Opengl编程实例-红蓝三角形

作者头像
步行者08
发布2018-10-09 18:08:30
6540
发布2018-10-09 18:08:30
举报
文章被收录于专栏:图形学与OpenGL图形学与OpenGL
这里写图片描述
这里写图片描述
代码语言:javascript
复制
#include <GL/glut.h>

typedef GLfloat point2d[2]; // a point data type

void triangle( point2d a, point2d b, point2d c) // display a triangle

{

    glBegin(GL_TRIANGLES);

    glVertex2fv(a);

    glVertex2fv(b);

    glVertex2fv(c);

    glEnd();

}

void display(void)

{

    point2d v[3] = {{-1.0, -0.58}, {1.0, -0.58}, {0.0, 1.15}}; //initial triangle vertices

    glClear(GL_COLOR_BUFFER_BIT); // Clear display window

    glColor3f(0.0,0.0,1.0); // Set fill color to blue

    glLoadIdentity();//应该放在此处,保证每次显示正确

    glViewport(0, 0, 300, 400); // Set left viewport

    triangle(v[0], v[1], v[2]);

    glColor3f(1.0,0.0,0.0); // Set fill color to red

    glViewport(300, 0, 300, 400); // Set right viewport

    glRotatef(90.0, 0.0, 0.0, 1.0); // Rotate about z axis

    triangle(v[0], v[1], v[2]); // Display blue triangle

    glFlush();

}

void init()

{

    glMatrixMode(GL_PROJECTION);

    //glLoadIdentity();//如果放在此处,会导致第一次显示正确,再次刷新时图形旋转

    gluOrtho2D(-2.0, 2.0, -2.0, 2.0);

    glMatrixMode(GL_MODELVIEW);

    glClearColor(1.0, 1.0, 1.0,1.0);

}

void main(int argc, char **argv)

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);

    glutInitWindowSize(600, 400);

    glutCreateWindow("Triangle");

    glutDisplayFunc(display);

    init();

    glutMainLoop();

}

注意:教材中原代码中第55行”glLoadIdentity()”位置不对,现在更正至第31行。教材中原图5.17同时更正如上图。 思考:教材中原代码中根据所给三角形顶点坐标,三角形应为一个正角形,为何显示时不是正角形呢?同时,在旋转后的三角形也发生了变形,请分析原因,并给出修改建议。提示:请从”glViewport()”函数入手。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年08月26日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档