世界坐标是按照笛卡尔坐标系定义出来的绝对坐标系,下面的各种坐标系都建立在世界坐标的基础上。

对象坐标系

对象被应用于任何变换之前的初始位置和方向所在的坐标系,也就是当前绘图坐标系;该坐标系不固定且仅对该对象适用;默认情况下,该坐标系与世界坐标系重合;当用函数glTranslatef(),glScalef(),glRotatef()glTranslatef(),glScalef(),glRotatef()对当前绘图坐标系进行平移、伸缩、旋转变换后,世界坐标系和当前绘图坐标系不再重合;改变以后,再用glVertex3f()glVertex3f()等绘图函数绘图时,都是在当前绘图坐标系进行绘图,所有函数参数都是相对当前绘图坐标系来讲。

眼坐标系(相机坐标系/观察空间/视觉空间)

GL_MODELVIEW矩阵是模型变换矩阵和视变换矩阵的组合Mview×Mmodel;使用GL_MODELVIEW矩阵就可以使对象从对象坐标系转换到眼坐标系;OpenGL不存在单独的模型变换Mmodel和视点变换Mview;ModelView变换把场景与我们的观察位置对应起来;默认情况下,眼坐标系与世界坐标系是重合;使用函数gluLookAt()可以指定眼睛(相机)的位置和眼睛的方向;

使用glTranslatef(),glScalef(),glRotatef()函数可以对对象坐标系进行变动;使用gluLookAt()函数可以对眼坐标系进行变动;两者可以达到相同的变换效果,相当于对象不动移动相机,和相机不动移动对象。

裁剪坐标系(裁剪空间)

眼坐标到裁剪坐标由投影完成,眼坐标通过乘以GL_PROJECTION矩阵变成了裁剪坐标;GL_PROJECTION矩阵定义了视景体,即确定哪些物体位于视野之内,位于视景体外的对象会被剪裁掉;除了视景体,投影变换还定义了顶点投影到屏幕上的方式,包括:透视投影和正交投影。

归一化设备坐标系

由裁剪坐标系下通过除以W分量得到,该操作为透视除法;归一化设备坐标很像屏幕坐标,但还没有经过平移和缩放到屏幕像素;(x,y,z)范围均为[−1,1]。

屏幕坐标系(屏幕空间)

(OpenGL)将屏幕上的设备坐标称为屏幕坐标;设备坐标又称为物理坐标,指输出设备上的坐标;设备坐标用对象距离窗口左上角的水平距离和垂直距离来指定对象的位置,以像素为单位表示;设备坐标XX轴向右为正,YY轴向下为正,坐标原点位于窗口的左上角;从归一化设备坐标到屏幕坐标基本上是一个线性映射关系,通过对归一化设备坐标进行视口变换得到;可以用函数glViewport()定义渲染区域的矩形。

(Unity3D)屏幕坐标是以像素来定义的,它的范围是以左下角为(0,0),右上角为(Screen.width,Screen.height)(Screen.width,Screen.height)定义的这样一个矩形,屏幕坐标是一个3D坐标,Z轴用相机的世界单位来衡量;屏幕坐标和相机之间满足两个条件:

creen.width=Camera.pixelWidth,Screen.height=Camera.pixelHeight

例如:相机正对着场景中的原点(0,0,0),相机的Z轴分量为−10,按照屏幕坐标的定义,假设屏幕大小为800×640,则原点转化为屏幕坐标后应该是(400,320,10)。

视口坐标

(Unity3D)视口坐标是标准化后的屏幕坐标;视口坐标是一个3D坐标,Z轴用相机的世界单位来衡量;视口坐标用0到1间的数字来表示,左下角为(0,0),右上角为(1,1)。

例如:将相机正对着场景中的原点(0,0,0),相机的Z轴分量为−10,按照屏幕坐标的定义,假设屏幕大小为800×640,则原点转化为视口坐标后应该是(0.5,0.5,10)。

webgl坐标转换_OpenGL/WebGL顶点坐标变换过程简介相关推荐

  1. webgl坐标转换_WebGL教程

    前言 通过WebGL做了很多项目,感觉有必要录制一套视频教程,所以在这里写一个录制大纲,大家也可以通过章节目录了解下WebGL的基本内容. 视频教程发布地址 Threejs引擎 Threejs是web ...

  2. WebGL自学教程——WebGL示例:开始

    终于开始WebGL的示例了,...... 开始 使用WebGL的步骤,很简单: 1. 获得WebGL的渲染环境(也叫渲染上下文). 2. 发挥你的想象力,利用<WebGL参考手册>中的函数 ...

  3. OpenGL,WebGL基于HTML5/WebGL的建模及构建3D场景

    一.OpenGL和WebGL WebGL基于OpenGL ES,它缺少常规OpenGL具有的许多功能,例如仅支持顶点和片段着色器.OpenGL具有WebGL所不具备的功能,例如几何体着色器,镶嵌细分着 ...

  4. UA MATH565C 随机微分方程II Wiener过程简介

    UA MATH565C 随机微分方程II Wiener过程简介 Wiener过程的简单性质 Wiener过程的定义 在上一讲我们定义了WtW_tWt​: dWt=ηtdt⇔Wt=∫0tηsdsdW_t ...

  5. BetaFlight飞控启动运行过程简介

    BetaFlight飞控启动&运行过程简介 1. 源由 2. 启动过程 2.1 main(主程序) 2.2 init (初始化) 2.3 run 3. 任务调度 3.1 任务定义 3.2 sc ...

  6. RISC-V嵌入式开发准备篇1:编译过程简介

    原文出处:https://mp.weixin.qq.com/s/-syKN0DibKGGPCllaeNqMg 随着国内第一本RISC-V中文书籍<手把手教你设计CPU--RISC-V处理器篇&g ...

  7. WebGL自学教程——WebGL示例:12. 要有光

    12. 要有光 WebGL没有光(没有像OpenGL中那样提供光方面的API).要想有光,那就全靠我们自己进行计算了. 在http://learningwebgl.com上,有老外写的WebGL系列教 ...

  8. MacPorts打包过程简介

    本文主要为大家介绍一下MacPorts的打包过程. 往期回顾:通过git bisect快速定位大型工程中的问题 MacPorts 与 Homebrew Homebrew 相信很多人都听说过,它是 ma ...

  9. webgl坐标转换_WebGL笔记_绘制流程以及三维坐标变换(一)

    WebGL绘制一个模型的步骤: 1.获取模型的顶点坐标 2.图元装配(即画相应的三角形面片) 3.光栅化(生成片元,绘制每个三角片上的像素点,染色.纹理映射都在此步) 顶点坐标处理 现实中最常见的三维 ...

最新文章

  1. 南岸焊接机器人厂_焊接技术的发展历史,世界焊接发展200年回顾,你了解焊接吗?...
  2. Project interpreter not specified(eclipse+pydev) (转)
  3. LightOJ - 1265 概率
  4. AI公开课:19.04.03周明—MSRA副院长《NLP的进步如何改变搜索的体验》课堂笔记以及个人感悟
  5. 不是HR,Leader你会面试应聘者吗
  6. UIImage与Iplimage相互转换
  7. tomcat日志、控制台乱码
  8. 声呐图像数据集_MaskedFace-Net 口罩人脸基准数据集,13万+图像数据
  9. linux与虚拟化实验室,Linux·学习笔记(2)虚拟化与仿真
  10. CSS布局教程:用DIV CSS实现国内经典式三行两列布局-CSS布局实例
  11. LeetCode 1426. 数元素(哈希set)
  12. CentOS Linux 7.7 安装kafka zookeeper
  13. 在位置 0 处没有任何行。_我家孩子最爱这个小零食,外酥里糯,没有任何添加剂,0失败教程...
  14. Android自定义ScrollBar,android自定义View之垂直的滚动条
  15. 第95天:CSS3 边框、背景和文字效果
  16. 大型网站技术架构之技术一览
  17. Js-字符串转Json并提取字段值
  18. 关于vlan tag untag 标签 区别
  19. ubuntu 20.04安装RTL8821CE无线网卡驱动
  20. 新一届信息奥赛国家队出炉:3/4来自浙江,北大英才班成最大赢家

热门文章

  1. g4e基础篇#1 为什么要使用版本控制系统
  2. 升讯威微信营销系统开发教程:(1)订阅号和服务号深入分析
  3. powershell 常用命令笔记
  4. [转]ES6、ES7、ES8、ES9、ES10新特性一览 (个人整理,学习笔记)
  5. 【ArcGIS Pro微课1000例】0013:NOAA全球1km分辨率DEM下载及拼接教程(附已拼接成果下载地址)
  6. 【Microstation】第三章:Microstation三维模型构建与编辑
  7. Java面向对象编程学习
  8. Android之安卓8.0版本以上手机开启热点提示Caller already has an active LocalOnlyHotspot request
  9. Android之怎么隐藏EditText光标和自动显示键盘
  10. Android之如何实现通讯录的搜索并且让匹配到的数据变颜色