OpenGL编程指南8:模型组合变换
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:模型组合变换相关推荐
- OpenGL编程指南7:视图-
1.前言 计算机图形学的要点就是创建三维物体的二维图像(图像必须是二维的,因为他是在平面的屏幕上显示的).但是,当我们决定怎样在屏幕上绘图时,必须使用三维坐标的方式考虑. 为了把一个物体的三维坐标变成 ...
- 《OpenGL编程指南》一第2章 着色器基础
本节书摘来自华章出版社<OpenGL编程指南>一书中的第2章,作者 Bill Licea-Kane ,更多章节内容可以访问云栖社区"华章计算机"公众号查看 第2章 着色 ...
- OpenGL编程指南5:学习绘制不同风格的曲线
1.不同风格曲线绘制 #include <vgl.h> //宏定义;当定义的宏不能用一行表达完整时,可以用"\"表示下一行继续 #define drawOneLine( ...
- OpenGL编程指南4:双缓冲实现运行
1.前言 绘制一个旋转的方块,主要为了说明glutSwapBuffers()函数的用法. 同时也为了学习如何使用GLUT控制输入设备,并打开或关闭空闲处理函数. 2.OpenGL编程及程序剖析 /** ...
- OpenGL编程指南3:GLUT:OpenGL使用工具库
1.前言 我们知道的,OpenGL包含了很多的渲染函数,这些函数的设计目的就是独立与任何窗口系统或操作系统.因此,他并没有包含打开窗口或者从键盘或鼠标读取事件的函数.遗憾的是,如果连最基本的打开窗口的 ...
- opengl编程指南第8版源码编译详细说明
1. 到:https://github.com/openglredbook/examples 下载完全版的源码examples-master.zip,大小有131MB左右,不要下载缩略版的,否则\bi ...
- 《OpenGL编程指南(原书第8版)》——计算着色器
原文 http://www.csdn.net/article/2014-11-21/2822754 主题 OpenGL 数学 概述 由于图形处理器每秒能够进行数以亿计次的计算,它已成为一种性能十分惊 ...
- 《OpenGL编程指南》一第3章 OpenGL绘制方式
本节书摘来自华章出版社<OpenGL编程指南>一书中的第3章,作者 Bill Licea-Kane ,更多章节内容可以访问云栖社区"华章计算机"公众号查看 第3章 Op ...
- 《OpenGL编程指南》一3.2 OpenGL缓存数据
本节书摘来自华章出版社<OpenGL编程指南>一书中的第3章,第3.2节,作者 Bill Licea-Kane ,更多章节内容可以访问云栖社区"华章计算机"公众号查看 ...
- OpenGL编程指南(第八版)第一个渲染三角形案例代码在win8双显卡电脑VS2015中运行方法总结
弄了好几天才把第一个程序运行出来,用该博客记录一下参考的博客资料及问题: 写得很好的博客参考资料为: http://blog.csdn.net/IceTeaSet/article/details/50 ...
最新文章
- 神州数码使用telnet方式管理交换机
- win10下安装TensorFlow(CPU only)
- Silverlight for Windows Phone 7开发体验
- java 最大子数组_求一个数组中子数组的最大和算法(Java实现)
- detachedcriteria查询去重_sql的简单查询
- mysql的安全管理_MySQL安全管理
- Unity3D SceneView Camera
- [剑指offer] 66. 机器人的运动范围
- 【OpenCV】图像线性混合
- ios 避免两个button同一时候被点击
- xCheckRDCostMerge2NX2N函数流程
- 什么才是高标准要求自己?
- Android studio实现类微信界面
- SpringBoot+MongoDB GridFS文件上传、下载、预览实战
- 2013华为工作之电信客服上线
- 关于matlab提示“警告: 矩阵为奇异工作精度” 的问题
- OpenCV实战——多尺度FAST特征检测
- Hebutgo 7.21 git使用(alicode)
- 西北乱跑娃 --- opencv泛洪填充学习笔记
- 康耐视智能相机IO操作笔记