专栏首页图形学与OpenGL5.5 Opengl编程实例-红蓝三角形

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

#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()”函数入手。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 6.5编程实例-立方体透视投影

    GLint winWidth = 600, winHeight = 600; //设置初始化窗口大小

    步行者08
  • 第5章代码-三维观察

    步行者08
  • 实验5 立方体显示与变换

    (1) 修改代码,让立方体平移和旋转,产生两点透视和三点透视,将两种透视图结果存为图1-2,与对应修改的代码一起保存至word实验文档中(20分钟);

    步行者08
  • 27.opengl高级光照-点光源阴影

    接上一篇继续,实际中的光源几乎不会是平行光,点光比较多。点光的阴影生成原理和阴影映射基本相同,区别是阴影映射使用一张2D图作为深度缓存,点光照射是6个面,需要...

    用户1068165
  • Python绘制渐变色三角形

    本文要点在于Python扩展库pyopengl的应用,关于OpenGL函数参数含义可以查阅有关资料。 import sys from OpenGL.GL imp...

    Python小屋屋主
  • 第5章代码-三维观察

    步行者08
  • 6.5编程实例-立方体透视投影

    GLint winWidth = 600, winHeight = 600; //设置初始化窗口大小

    步行者08
  • 30.opengl高级光照-HDR

    HDR:High Dynamic Range, 高动态范围 LDR: Low Dynamic Range, 低动态范围

    用户1068165
  • Ubuntu 16.04 安装OpenGL

    最近忙于paper,就没有写博客;然后开始和华为合作一个项目,学习如何使用openGL 转自:https://blog.csdn.net/huangkangy...

    用户1148523
  • 31.opengl高级光照-泛光bloom

    bloom技术模拟现实场景中高亮光照效果,通过对光照增加模糊,形成一圈泛光,增强光照的辐射。

    用户1068165

扫码关注云+社区

领取腾讯云代金券