OpenGL学习笔记(5)3D基本概念
来源:互联网 发布:c语言type buffer 编辑:程序博客网 时间:2024/05/17 03:28
这次介绍的都是一些比较枯燥的概念.在现实生活中都非常真实,为了避免枯燥,我们还是讲点大家都经历过的事情
视图变换
拍照:
- 第一步先选景(模型)
- 选好景之后你就需要挑一个好的位置(视图)来拍
- 挑好位置以后拿起你的照相机对准景物
接下来针对不同的景,你会做出不同的动作
比如拍杭州西湖:那么你会横放你的照相机进行全景拍摄
但是换做拍雷峰塔的,你想拍全景的就必须把照相机竖起来
比如你的头可以左右移动,也可以上下移动
以上讲的就是视图变换,即模型(参照物)位置不变,但视图在发生变化.
模型变换
假设现在不拍景色,而是拍人,即参照物可以移动变化.但视图没有变化
即这时照相机的位置,拍摄的角度都已经固定了.
但可能会让模型(人)发生一些变化
比如位置的移动(包括左右,上下,前后)
缩放(人是无法缩放的,所以其可能做的动作是蹲下,站在一个假山上使得自己更高(也不会飞))
旋转(大部分人只会左右旋转,艺术家则会翻跟斗),所以这时候你应该拿一块大的橡皮泥来做参照物
下面还是来看代码吧
#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方法用于修改的是选择模型视图矩阵还是投影矩阵
设置视图变换
这里的模型则是使用glutWireCube 画了一个立方体
请下载http://www.xmission.com/~nate/tutors.html此处的示例教程,改变参数来理解视图变换和模型变换
0 0
- OpenGL学习笔记(5)3D基本概念
- OpenGL学习笔记:动画基本概念
- OpenGL学习笔记 (5) —— 3D
- OpenGL 3D 超级宝典学习笔记
- opengl es学习笔记1(基本概念)
- opengl学习笔记3-2-在3D中画线
- Android 3D 游戏学习笔记(1)-openGL基础
- OpenGL ES之Android 3D系列基本概念
- OpenGL ES学习笔记---3D世界的第一个3D图形绘制
- opengl学习笔记(5)
- opengl学习笔记(3)
- openGL学习笔记3
- OpenGL超级宝典学习笔记第一部分:OpenGL API基础 第1章 3D图形学的基本原理
- OpenGL学习六:3D图形
- OpenGL学习三十七:Windows 3D字体
- opengl学习笔记3-1-在3D中绘制点
- android学习笔记之3D--(02)-OPenGL ES常用API
- opengl 学习笔记(3) 2D 点、线、坐标、键盘
- glPushMatrix()和glPopMatrix()以及glLoadIdentity()的理解
- OpenGL 学习笔记(1)初始化窗体
- OpenGL 学习笔记(2)创建第一个图形
- OpenGL 学习笔记(3)绘制几何物体
- OpenGL 学习笔记(4)顶点数组
- OpenGL学习笔记(5)3D基本概念
- OpenGL学习笔记(6)第一个动画
- OpenGL学习笔记(7)多边形绘制
- java中int和Integer什么区别
- OpenGL学习笔记(8)显示列表
- OpenGL学习笔记(9)颜色混合
- OpenGL学习笔记(10)抗锯齿
- Surface,SurfaceView,SurfaceHolder及SurfaceHolder.Callback的关系
- OpenGL学习笔记(12)基本光照