opengl红宝书第三章 视图 拾遗
来源:互联网 发布:linux 进程执行了sleep 编辑:程序博客网 时间:2024/04/28 12:02
gluLookAt(ex,ey,ez,cx,cy,cz,upx,upy,upz) 以e坐标决定照相机的空间位置,c坐标决定照相机的镜头朝向,up坐标决定照相机的朝上位置。以此法定义的视图矩阵将会右乘当前矩阵。
在调用glMatrixMode函数修改当前矩阵时,一般都会在此函数后加glLoadIdentity(),来确保当前矩阵为一个单位矩阵。
无论是对窗口内的模型、图像作什么样的位移操作,其实都是通过定义一个变换矩阵与当前矩阵相乘来实现的。因此,为了使得所有操作都是通过乘法实现,OPENGL中的矩阵都是4*4,如下形式:
{a,b,c,p; 其中,第四列前三行,即pqr三数是控制图形透视变换的位置;第四列第四行S是控制整体比例变换的,也就是glScale;
d,e,f,q; 第四行前三列,lmn是控制平移变换;前三行前三列,则是旋转比例变换位。
j,h,i,r; 在平移变换时,变换矩阵中的lmn分别代表xyz平移的幅度,即是x=x+l,y+=m,z+=n;
l,m,n,s} 在比例变换时,其实在a-s对角线上的位置都是比例控制位,变换矩阵上的数代表着比例变换幅度,x*=a,y*=e,z*=i。而s
是整体的一个比例变换。
绕某轴旋转时,在前三行三列,需要将第i行第i列置1,x对应1,y为2,z为3.而剩下的两个数j,k(j<k)构成的j行j、k列,k行j、k列分别为cosθ,sinθ,-sinθ,cosθ.
而关于某轴对称时,是将i行i列置1,j行j列与K行k列置-1即可。
glDepthRange(near,far) 定义z坐标的一种编码形式与深度缓冲区的最大最小值。
在使用投影函数时,我们所说的近裁面与远裁面都是指的z轴上的负方向,即是如果近裁面是1,远裁面是3,那么所有物体的Z坐标就必须在-3~-1之间。
glClipPlane(GLenum plane,*equation) equation是一个4维向量的指针,plane参数是GL_CLIP_PLANEi,定义的是剪裁面的编号。equation向量中,代表着一个方程Ax+By+Cz+D=0.只有高于这个平面的部分才会被显示出来
对于平面坐标转世界坐标的操作,我在许多地方都曾用到,比如trackball的设计中。那么gluUnProject(winx,winy,winz,modelmatrix,projmatrix,viewport,objx,objy,objz)这个函数就是必须要记住的。win代表着屏幕坐标,winz一般是深度值,modelmatrix、projmatrix分别是模型矩阵与投影矩阵,最后值被存在obj里。
是以,2017/5/23 书于526.D
- opengl红宝书第三章 视图 拾遗
- OpenGL 红宝书
- 再读OpenGL红宝书(1-8章)
- 再读OpenGL红宝书(1-8章)【续】
- 再读OpenGL红宝书(1-8章)
- Opengl编程指南第三章:视图
- OpenGL 红宝书 帧缓冲区
- OpenGL 红宝书 纹理映射
- Opengl红宝书Makefile
- OpenGL 红宝书 混合
- OpenGL红宝书 第八版
- 红宝书OpenGL环境建立
- [OpenGL红宝书]第一章 OpenGL概述
- opengl编程指南笔记(四)第三章 视图
- OpenGL编程指南之阅读笔记 第三章 视图
- OpenGL编程指南(OpenGL红宝书)
- opengl红宝书 第8章的代码中readImage()的简单解决方法(Intel 处理器上)
- opengl红宝书第11章, gluTessCallback函数的例子在vs.net编译不过的解决方法
- 计划任务,账户密钥集不存在 错误是: 0x80090016
- Jquery轮播实现
- java学习-----例子2
- JavaSE学习--面向对象
- Butterknife8.6在项目中的使用
- opengl红宝书第三章 视图 拾遗
- setTimeout 与setInterval 用法案例
- SQLServer配置
- 软考笔记0523
- 【问底】徐汉彬:Web系统大规模并发——电商秒杀与抢购
- Mybatis传多个参数(三种解决方案)
- Android性能优化-布局优化
- 移动端web开发技巧笔记
- SQL查询包括本级分类的无限级分类列表