1.代码

#include <vgl.h>void init(void)
{glClearColor(0.0,0.0,0.0,0.0);glShadeModel(GL_FLAT);
}void draw_triangle(void)
{  glBegin(GL_LINE_LOOP);glVertex2f(0.0, 25.0);glVertex2f(25.0, -25.0);glVertex2f(-25.0, -25.0);glEnd();
}void display(void)
{glClear (GL_COLOR_BUFFER_BIT);glColor3f (1.0, 1.0, 1.0);glLoadIdentity ();glColor3f (1.0, 1.0, 1.0);draw_triangle ();glEnable (GL_LINE_STIPPLE);glLineStipple (1, 0xF0F0);glLoadIdentity ();glTranslatef (-20.0, 0.0, 0.0);draw_triangle ();glLineStipple (1, 0xF00F);glLoadIdentity ();glScalef (0.8, 0.8, 1.0);draw_triangle ();glLineStipple (1, 0x8888);glLoadIdentity ();glRotatef (30.0, 0.0, 0.0, 1.0);draw_triangle ();glDisable (GL_LINE_STIPPLE);glFlush ();
}void reshape(int w, int h)
{glViewport (0, 0, (GLsizei) w, (GLsizei) h);glMatrixMode (GL_PROJECTION);glLoadIdentity ();if (w <= h)glOrtho (-50.0, 50.0, -50.0*(GLfloat)h/(GLfloat)w,50.0*(GLfloat)h/(GLfloat)w, -1.0, 1.0);elseglOrtho (-50.0*(GLfloat)w/(GLfloat)h,50.0*(GLfloat)w/(GLfloat)h, -50.0, 50.0, -1.0, 1.0);glMatrixMode(GL_MODELVIEW);
}int main (int argc, char** argv)
{glutInit(&argc, argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(500,500);glutInitWindowPosition(150,150);glutCreateWindow(argv[0]);init();glutDisplayFunc(display); glutReshapeFunc(reshape);glutMainLoop();return 0;
}

输出结果:

2.注意事项

使用glLoadIdentity()函数的目的是隔离各个模型变换的效果。对矩阵值初始化能够防止连续变换产生的累积效果。

尽管反复使用glLoadIndentity()能够是想预想的结果,但是它的效率可能较低,因为必须重新指定视图或模型变换。后面会有更好的方法。

OpenGL编程指南8:模型组合变换相关推荐

  1. OpenGL编程指南7:视图-

    1.前言 计算机图形学的要点就是创建三维物体的二维图像(图像必须是二维的,因为他是在平面的屏幕上显示的).但是,当我们决定怎样在屏幕上绘图时,必须使用三维坐标的方式考虑. 为了把一个物体的三维坐标变成 ...

  2. 《OpenGL编程指南》一第2章 着色器基础

    本节书摘来自华章出版社<OpenGL编程指南>一书中的第2章,作者 Bill Licea-Kane ,更多章节内容可以访问云栖社区"华章计算机"公众号查看 第2章 着色 ...

  3. OpenGL编程指南5:学习绘制不同风格的曲线

    1.不同风格曲线绘制 #include <vgl.h> //宏定义;当定义的宏不能用一行表达完整时,可以用"\"表示下一行继续 #define drawOneLine( ...

  4. OpenGL编程指南4:双缓冲实现运行

    1.前言 绘制一个旋转的方块,主要为了说明glutSwapBuffers()函数的用法. 同时也为了学习如何使用GLUT控制输入设备,并打开或关闭空闲处理函数. 2.OpenGL编程及程序剖析 /** ...

  5. OpenGL编程指南3:GLUT:OpenGL使用工具库

    1.前言 我们知道的,OpenGL包含了很多的渲染函数,这些函数的设计目的就是独立与任何窗口系统或操作系统.因此,他并没有包含打开窗口或者从键盘或鼠标读取事件的函数.遗憾的是,如果连最基本的打开窗口的 ...

  6. opengl编程指南第8版源码编译详细说明

    1. 到:https://github.com/openglredbook/examples 下载完全版的源码examples-master.zip,大小有131MB左右,不要下载缩略版的,否则\bi ...

  7. 《OpenGL编程指南(原书第8版)》——计算着色器

    原文  http://www.csdn.net/article/2014-11-21/2822754 主题 OpenGL 数学 概述 由于图形处理器每秒能够进行数以亿计次的计算,它已成为一种性能十分惊 ...

  8. 《OpenGL编程指南》一第3章 OpenGL绘制方式

    本节书摘来自华章出版社<OpenGL编程指南>一书中的第3章,作者 Bill Licea-Kane ,更多章节内容可以访问云栖社区"华章计算机"公众号查看 第3章 Op ...

  9. 《OpenGL编程指南》一3.2 OpenGL缓存数据

    本节书摘来自华章出版社<OpenGL编程指南>一书中的第3章,第3.2节,作者 Bill Licea-Kane ,更多章节内容可以访问云栖社区"华章计算机"公众号查看 ...

  10. OpenGL编程指南(第八版)第一个渲染三角形案例代码在win8双显卡电脑VS2015中运行方法总结

    弄了好几天才把第一个程序运行出来,用该博客记录一下参考的博客资料及问题: 写得很好的博客参考资料为: http://blog.csdn.net/IceTeaSet/article/details/50 ...

最新文章

  1. 神州数码使用telnet方式管理交换机
  2. win10下安装TensorFlow(CPU only)
  3. Silverlight for Windows Phone 7开发体验
  4. java 最大子数组_求一个数组中子数组的最大和算法(Java实现)
  5. detachedcriteria查询去重_sql的简单查询
  6. mysql的安全管理_MySQL安全管理
  7. Unity3D SceneView Camera
  8. [剑指offer] 66. 机器人的运动范围
  9. 【OpenCV】图像线性混合
  10. ios 避免两个button同一时候被点击
  11. xCheckRDCostMerge2NX2N函数流程
  12. 什么才是高标准要求自己?
  13. Android studio实现类微信界面
  14. SpringBoot+MongoDB GridFS文件上传、下载、预览实战
  15. 2013华为工作之电信客服上线
  16. 关于matlab提示“警告: 矩阵为奇异工作精度” 的问题
  17. OpenCV实战——多尺度FAST特征检测
  18. Hebutgo 7.21 git使用(alicode)
  19. 西北乱跑娃 --- opencv泛洪填充学习笔记
  20. 康耐视智能相机IO操作笔记

热门文章

  1. 不使用jQuery对Web API接口POST,PUT,DELETE数据
  2. OPPM 一页纸项目管理 One-Page Project Management
  3. centos5.5 内核升级记录
  4. hdu 1874畅通工程续(基础Floyd)
  5. hdu 3681(bfs+dfs+状态压缩)
  6. springboot10(docker)
  7. dataframe常用处理
  8. Android开发 - 设置DialogFragment全屏显示
  9. 四维空间引发-维度空间(0-10)来自我的教授的班长
  10. PHP 设计模式 笔记与总结(8)策略模式