当前位置: 首页 > news >正文

glulookat函数

opengl中glulookat函数的意思

gluLookAt( 摄像机x,摄像机y,摄像机z, 目标点x,目标点y,目标点z,
摄像机顶朝向x,摄像机顶朝向y,摄像机顶朝向z )

osg中camera->setViewMatrixAsLopengl 的函数相当于opengl中的glulookat
openGL变换小节:
视图:指定观察者或摄像机的位置
模型:在场景中移动对象
模型视图:描述视图变换盒模型变换的对偶性
投影:对视见空间进行修剪和改变大小
视见区: 对到窗口的最终输出进行缩放
眼坐标:来自观察者的观察点,与可能发生的任何变换无关,可以把它们视为“绝对”屏幕坐标。因此并不是真正的坐标,而是代表一个虚拟的固定坐标系,用作参考的公共框架。大部分变换都是根据它们相对于眼坐标系的效果来描述的。
视图变换的过程如下:视图(eye)变换或者模型变换,投影变换(正射投影和透视投影),视见区变换。
利用实用库函数 gluLookAt()设置视觉坐标系。在实际的编程应用中,用户在完成场景的建模后,往往需要选择一个合适的视角或者不停地变换视角,以对场景作观察。实用库函数 gluLookAt()就提供了这样的一个功能。

void gluLookAt(GLdouble eyex,GLdouble eyey,GLdouble eyez,

      GLdouble centerx,GLdouble centery,GLdouble centerz,

      GLdouble upx,GLdouble upy,GLdouble upz);

该函数定义一个视图矩阵,并与当前矩阵相乘。

eyex, eyey,eyez 指定视点的位置

centerx,centery,centerz 指定参考点的位置

upx,upy,upz 指定视点向上的方向
 
   图5-1-10 函数gluLookAt()的设置

    视点E参考点C视点向上的方向U实际上就是设定了一个视觉坐标系。这个视觉坐标系的原点是E,视线的方向(即z轴)是C-Uy轴方向就是视点向上的方向U剩下的x轴方向就是向量((C-E)*U)。由于y轴和x轴是垂直的,所以也要求向量(C-U)和U互相垂直。这点在设置该函数参数时是必须注意的。

 
yqchang 发表于 2007-7-2 22:26:00  阅读全文(1267) | 回复(2) | 引用通告(32) | 编辑
 

Re:opengl中glulookat函数的意思

还是最后一句: 由于y轴和x轴是垂直的,所以也要求向量(C-U)和U互相垂直。这点在设置该函数参数时是必须注意的。 应用中不垂直也是没问题的,所以有找了个可能更合理的解释 void gluLookAt( GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx,
GLdouble upy, GLdouble upz );
eye=(eyex, eyey, eyez)是视点(原点)的位置 center = (centerx, centery, centerz)是视口中心点的位置 center - eye是z轴负方向 z = (eye - center) / |eye - center| up = (upx, upy, upz) - eye表示上方 x轴正方向x = up × z / |up × z| y轴正方向(就是正上方)y = z × x
 

火花的明天(游客)发表评论于2007-12-16 0:54:54 个人主页 | 引用 | 返回 | 删除 | 回复

恩,1楼正解,那我说个详细的
视点变换可以通过gluLookAt()函数完成,那三组参数分别指定了相机的位置、瞄准方向的参考点和相机向上方向。
通常视点变换操作在模型变换操作之前发出,以便模型变换先对物体发生作用。这样,场景中物体的顶点经过模型转换后一定到所希望的位置,然后再对场景进行视点定位等操作。模型变换和视点变换共同构成模型视景矩阵。
gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
1、改变前三个参数的值可以模拟人在实际环境中的移动; 2、改变中间三个参数的值,可以模拟人眼的转动,即所观察场景的变化。
3、后三个参数的值比较特殊,它所制定的不是一个点,而是一个方向,即决定将哪一个坐标轴作为向上的方向,如果向上方向与观察点到中心点的方向一致,结果将是不确定的。
 
为了您的安全,请只打开来源可靠的网址

打开网站    取消

来自: http://hi.baidu.com/luckwxx623/blog/item/d7dd823dafc458e63d6d97e0.html

转载于:https://www.cnblogs.com/lzhitian/archive/2012/02/04/2338261.html

相关文章:

  • oracle执行一条插入语句一直执行
  • SAP QM Batch to Batch的转移过账事务中的Vendor Batch
  • addMusic 和playMusic(AVAudioPlayer)
  • 12:Web及MySQL服务异常监测案例
  • 一个***的自白:年赚两三百万 生活纸醉金迷(3)
  • weex 项目开发(四)项目框架搭建 及 自定义 TabBar 组件
  • 项目规划管理 - 1
  • C# DLL资源文件打包(图片、JS、CSS)[WebResource]
  • 阅读摘要
  • 浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色
  • exchange日常管理之十五:报550错误
  • 12. ZooKeeper之Java客户端API使用—创建会话。
  • 安装office2007 1706错误
  • 36.Linux驱动调试-根据oops定位错误代码行
  • 自我激励的20种方法
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • JavaScript HTML DOM
  • Java知识点总结(JavaIO-打印流)
  • PAT A1050
  • vue.js框架原理浅析
  • 阿里云前端周刊 - 第 26 期
  • 爱情 北京女病人
  • 多线程 start 和 run 方法到底有什么区别?
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 如何学习JavaEE,项目又该如何做?
  • 责任链模式的两种实现
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • MyCAT水平分库
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • #NOIP 2014#Day.2 T3 解方程
  • (C)一些题4
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (poj1.2.1)1970(筛选法模拟)
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (四)Android布局类型(线性布局LinearLayout)
  • (转)Unity3DUnity3D在android下调试
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .NET Micro Framework 4.2 beta 源码探析
  • .NET/C# 使窗口永不获得焦点
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • ?
  • @Autowired @Resource @Qualifier的区别
  • @Controller和@RestController的区别?
  • @JoinTable会自动删除关联表的数据
  • @在php中起什么作用?
  • [20150321]索引空块的问题.txt
  • [2016.7 Day.4] T1 游戏 [正解:二分图 偏解:奇葩贪心+模拟?(不知如何称呼不过居然比std还快)]
  • [2021 蓝帽杯] One Pointer PHP
  • [AutoSAR系列] 1.3 AutoSar 架构