这次介绍的都是一些比较枯燥的概念.在现实生活中都非常真实,为了避免枯燥,我们还是讲点大家都经历过的事情

视图变换

拍照:

  1. 第一步先选景(模型)
  2. 选好景之后你就需要挑一个好的位置(视图)来拍
  3. 挑好位置以后拿起你的照相机对准景物

接下来针对不同的景,你会做出不同的动作

比如拍杭州西湖:那么你会横放你的照相机进行全景拍摄

但是换做拍雷峰塔的,你想拍全景的就必须把照相机竖起来
比如你的头可以左右移动,也可以上下移动

以上讲的就是视图变换,即模型(参照物)位置不变,但视图在发生变化.

模型变换

假设现在不拍景色,而是拍人,即参照物可以移动变化.但视图没有变化

即这时照相机的位置,拍摄的角度都已经固定了.
但可能会让模型(人)发生一些变化
比如位置的移动(包括左右,上下,前后)
缩放(人是无法缩放的,所以其可能做的动作是蹲下,站在一个假山上使得自己更高(也不会飞))

旋转(大部分人只会左右旋转,艺术家则会翻跟斗),所以这时候你应该拿一块大的橡皮泥来做参照物

下面还是来看代码吧

#include <GL/glut.h>
#include <stdlib.h>void init(void)
{glClearColor (0.0, 0.0, 0.0, 0.0);glShadeModel (GL_FLAT);
}void display(void)
{glClear (GL_COLOR_BUFFER_BIT);glColor3f (1.0, 1.0, 1.0);glLoadIdentity ();             /* clear the matrix *//* viewing transformation  */gluLookAt (1.0, 1.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);glutWireCube (1.0);glFlush ();
}
void reshape (int w, int h)
{glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION);glLoadIdentity ();glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);glMatrixMode (GL_MODELVIEW);}
int main(int argc, char** argv)
{glutInit(&argc, argv);glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);glutInitWindowSize (500, 500); glutInitWindowPosition (100, 100);glutCreateWindow (argv[0]);init ();glutDisplayFunc(display); glutReshapeFunc(reshape);glutMainLoop();return 0;
}

以下是效果

矩阵相乘

当设置对象矩阵时,会把当前矩阵(可能是OpenGL内部一个全局的变量)与当前的矩阵相乘,为了清除这个变量,需要先调用glLoadIdentity 方法,当然在组合变换的时候则不需要此方法.但当参照物发生变化时,则需要调用此方法

选择矩阵模式

glMatrixMode方法用于修改的是选择模型视图矩阵还是投影矩阵

设置视图变换

gluLookAt 方法方便的设置了视图需要的一些参数

这里的模型则是使用glutWireCube 画了一个立方体

请下载http://www.xmission.com/~nate/tutors.html此处的示例教程,改变参数来理解视图变换和模型变换

转载于:https://www.cnblogs.com/Clingingboy/archive/2010/10/17/1853617.html

OpenGL学习笔记(5)3D基本概念相关推荐

  1. 【OpenGL学习笔记⑥】——3D变换【旋转的正方体 实现地月系统 旋转+平移+缩放】

    ✈️ 文章目录 零. 成果预览图 一.3D立方体的顶点数组 二.纹理旋转 三.纹理缩放 四.画n个3D图形 五.轨道的数学公式 六.深度缓冲(Z 缓冲) 七.完整代码 八.参考附录: 神器的正方体 ☁ ...

  2. OpenGL学习笔记(八):进一步理解VAO、VBO和SHADER,并使用VAO、VBO和SHADER绘制一个三角形

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7888 ...

  3. OpenGL学习笔记:矩阵变换

    文章目录 缩放 glm矩阵表示 glm缩放矩阵实现 位移 齐次坐标 glm位移矩阵实现 旋转 沿x轴旋转 沿y轴旋转 沿z轴旋转 沿任意轴旋转 glm旋转矩阵实现 矩阵的组合 glm矩阵组合使用 接上 ...

  4. 【OpenGL学习笔记⑧】——键盘控制正方体+光源【冯氏光照模型 光照原理 环境光照+漫反射光照+镜面光照】

    ✅ 重点参考了 LearnOpenGL CN 的内容,但大部分知识内容,小编已作改写,以方便读者理解. 文章目录 零. 成果预览图 一. 光照原理与投光物的配置 1.1 光照原理 1.2 投光物 二. ...

  5. OPENGL学习笔记之八

    OPENGL学习笔记之八 2017/11/15 阅读材料来自learnopengl.com以及learnopengl-cn.github.io 我们通常会自己设定一个坐标的范围,之后再在顶点着色器中将 ...

  6. OpenGL 学习笔记 II:初始化 API,第一个黑窗,游戏循环和帧率,OpenGL 默认垂直同步,glfw 帧率

    前情提要: 上一篇: OpenGL 学习笔记 I:OpenGL glew glad glfw glut 的关系,OpenGL 状态机,现代操作系统的窗口管理器,OpenGL 窗口和上下文 OpenGL ...

  7. MySQL学习笔记01【数据库概念、MySQL安装与使用】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  8. vue学习笔记-03-浅谈组件-概念,入门,如何用props给组件传值?

    vue学习笔记-03-浅谈组件-概念,入门,如何用props给组件传值? 文章目录 vue学习笔记-03-浅谈组件-概念,入门,如何用props给组件传值? 什么是组件? 为什么要使用组件? 如何使用 ...

  9. OpenGL学习笔记(一)绘制点线面及多面体

    OpenGL学习笔记(一)绘制点线面及多面体 绘制点线面 #include <iostream> #include <GL/GLUT.h> #define PI 3.14159 ...

最新文章

  1. centos7+ansible自动化工具使用
  2. Spring Boot 进行优雅的字段校验,写得太好了!
  3. 开关怎么使用_开关也能自发电?ebelong易百珑S2自发电无线开关曝光
  4. joo工作流_不要错过使用jOOλ或jOOQ编写Java 8 SQL单行代码的机会
  5. 深度学习之卷积神经网络 VGGNet
  6. wordpress 自定义分类url 重写_WordPress导航主题-WebStack导航主题
  7. Boosting Xgboost
  8. Ubuntu 18.04/20.04 部署minikube
  9. Eclipse插件大全 挑选最牛的TOP30
  10. 模拟钟表的手机软件_手机时钟软件推荐
  11. mysql数据库修复工具_MySQL数据库修复软件(Recovery Toolbox for MySQL)
  12. python暴力破解WiFi
  13. Excel VBA小游戏,上班摸鱼必备
  14. linux bin sh命令,linux shell中#!bin/sh的理解
  15. 学生学籍管理系统~~功能界面
  16. 全排列(从大到小排列)
  17. 适合所有手环的app_一只手环就能指导运动?Keep 想做你手腕上的魔鬼教练
  18. 华为路ws5200设置虚拟服务器,华为路由器WS5200如何设置上网 最详细的华为路由器WS5200上网设置方法教程...
  19. Python的Scrapy框架入门教程
  20. 进程创建过程详解 CreateProcess

热门文章

  1. 最全SpringBoot学习教程:鬼知道我经历了啥,Java篇
  2. 关于新版本,iOS10的相关内容,兼容iOS 10 资料整理笔记
  3. DevSuite产品研发管理软件针对中小团队免费了!
  4. 3c认证的有效期是多久?过期还能用吗?
  5. 根据倾斜矩形中心点,长宽和倾斜角度,计算顶点,计算两直线交点
  6. oracle分开中文和英文_英文简历绝对不能这样写
  7. UBIFS文件系统分析6 - LPT分析1
  8. Sketch卡顿解决办法
  9. 【操作系统】文件管理(四)—— 文件的保护和共享
  10. CTFHub web 文件上传- 无限制