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 条评论
登录 后参与评论

相关文章

来自专栏机器学习入门

LWC 53:694. Number of Distinct Islands

LWC 53:694. Number of Distinct Islands 传送门:694. Number of Distinct Islands Probl...

26170
来自专栏程序生活

斯坦福tensorflow教程-实例代码简单代码关于占位符 placeholder与feed_dictvariable 变量

15830
来自专栏mathor

LeetCode342. 4的幂

 这是上一道题2的幂的进阶,首先我们看和2的幂有什么不同。2的幂有1,2,4,8......,而4的幂有1,4,16,64,也就是说少了2,8,32......

9720
来自专栏软件开发 -- 分享 互助 成长

函数依赖集闭包、属性集闭包、超键、候选键和最小函数依赖集的求法。

函数依赖集的闭包 F:FD的集合称为函数依赖集。 F闭包:由F中的所有FD可以推导出所有FD的集合,记为F+。 例1,对于关系模式R(ABC),F={A→B,B...

44850
来自专栏小二的折腾日记

牛客网-剑指offer-10

主要是想为什么会有最大的和,一个情况是,新加上的数比原来的数都要大,就要开始考虑需不需要原来的数了。所以我们需要两个数,一个保存最大的和,用来返回,一个 保存当...

12530
来自专栏深度学习之tensorflow实战篇

python 对矩阵进行复制操作 np.repeat 与 np.tile区别

python 对矩阵进行复制操作 np.repeat 与 np.tile区别 二者区别 二者执行的是均是复制操作; np.repeat:复制的是多维数组的...

586100
来自专栏机器学习从入门到成神

字符串面试题(一)— 字符串逆序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/articl...

28510
来自专栏数据结构与算法

cf1027F. Session in BSU(并查集 匈牙利)

$n$个人,每个人可以在第$a_i$天或第$b_i$,一天最多考一场试,问在最优的情况下,最晚什么时候结束

13410
来自专栏人工智能LeadAI

Python 中argparse模块的使用

如果脚本很简单或临时使用,没有多个复杂的参数选项,可以直接利用sys.argv将脚本后的参数依次读取(读进来的默认是字符串格式)。

10240
来自专栏nummy

Uninformed search Python实现【译】

图的搜索可以分为uninformed搜索和informed搜索,两者的区别是前者是的搜索是盲目的,它不知道目标节点在哪,而后者是启发式的搜索。

12720

扫码关注云+社区

领取腾讯云代金券