说说我对OpenGL坐标变换几个关键点的理解

刚接触OpenGL的朋友们,可能对坐标变换不太理解. 本人不才, 接触了三维一段时间后,冒昧说说我的理解, 如有偏差, 请指正.

一:  首先说说什么是世界坐标.

每个三维模型都有自己的局部坐标, 这个大家都好理解,  这个称作模型坐标, 坐标原点可以是模型的中心.   但是一个场景中如果有许多个三维模型,  那要想标准其每个位置,

就需要一个统一的坐标来标定,  那么这个坐标就叫世界坐标.  这都好理解对吧,  下面说点难的.

二:  再说说世界坐标怎么转换到摄像机坐标.

我们知道,  观察三维模型要用一个摄像机.  模型需要在摄像机里成像,  也就需要知道模型在摄像机里映射的位置.  这也就涉及到世界坐标怎么转换到摄像机坐标的问题.

要想理解这个问题,  得先理解摄像机,  生活中, 摄像机往那一放, 就确定了一个位置; 摄像机的朝向也就决定了要拍摄哪个方向的景物;  并且摄像机可以横着拍, 也可以竖着拍,

这个横竖也决定了景物的在底片上的成像是正的还是倒立的;  好, 我们回头一看, 决定摄像机的有三个量, eye(位置), target(所拍摄景物的方位),  up(在底片上成像的倒正).

好,  摄像机的三个量能否推出一个摄像机的坐标系呢,  答案是肯定的,  也就是摄像机所在的标架(标架,坐标系推导请自行查看相关书籍吧);  现在摄像机的坐标系有了,  那么, 能否把世界坐标转换摄像机坐标的问题看成是,  世界坐标系到摄像机坐标系的转换呢.  答案是可以的,  分两步走,  先平移, 再旋转.  好, 经过这样两步操作.  两者坐标转换轻松完成了.

三:  摄像机坐标投影到设备坐标

最终三维模型要显示在屏幕上, 投影为设备屏幕坐标, 投影主要有两种, 正交投影, 透视投影,  我觉得理解投影的关键点,  在于理解设备屏幕坐标, 所谓的往哪投影.  常听说设备坐标

归一化, 什么是归一化, 说白了就是往简单了整,  设备坐标可以理解成, 中心在原点,  长度为1的立方体.  三维投影就是往这个区域投.  所以知道了投哪, 怎么投那就很好办了, 中学几何知识, 再套上个矩阵, 就出来了.

四: 设备坐标到视口坐标

视口可以看成是 显示设备屏幕的某一个区域,  并且,  会把图形投影到以视口中心为原点的区域上,  理解这一点,  这个坐标转换就不难理解了.

时间: 2024-10-29 19:12:03

说说我对OpenGL坐标变换几个关键点的理解的相关文章

OpenGL坐标变换专题

OpenGL坐标变换专题(转) OpenGL通过相机模拟.可以实现计算机图形学中最基本的三维变换,即几何变换.投影变换.裁剪变换.视口变换等,同时,OpenGL还实现了矩阵堆栈等.理解掌握了有关坐标变换的内容,就算真正走进了精彩地三维世界. 一.OpenGL中的三维物体的显示 (一)坐标系统 在现实世界中,所有的物体都具有三维特征,但计算机本身只能处理数字,显示二维的图形,将三维物体及二维数据联系在一起的唯一纽带就是坐标. 为了使被显示的三维物体数字化,要在被显示的物体所在的空间中定义一个坐标系

OpenGL ES总结(二)OpenGL坐标变换之平移及旋转

世界坐标系: 在OpenGL中,世界坐标系是以屏幕中心为原点(0, 0, 0),且是始终不变的.你面对屏幕,你的右边是x正轴,上面是y正轴,屏幕指向你的为z正轴.长度单位这样来定:窗口范围按此单位恰好是(-1,-1)到(1,1),即屏幕左下角坐标为(-1,-1),右上角坐标为(1,1). openGL使用右手坐标 从左到右,x递增 从下到上,y递增 从远到近,z递增 当前绘图坐标系: 是绘制物体时的坐标系.程序刚初始化时,世界坐标系和当前绘图坐标系是重合的.当用glTranslatef(),gl

OpenGL坐标变换及其数学原理,两种摄像机交互模型(附源程序)

实验平台:win7,VS2010 先上结果截图(文章最后下载程序,解压后直接运行BIN文件夹下的EXE程序): a.鼠标拖拽旋转物体,类似于OGRE中的“OgreBites::CameraStyle::CS_ORBIT”. b.键盘WSAD键移动镜头,鼠标拖拽改变镜头方向,类似于OGRE中的“OgreBites::CameraStyle::CS_FREELOOK”. 1.坐标变换的一个例子,两种思路理解多个变换的叠加 现在考虑Scale(1,2,1); Transtale(2,1,0); Rot

opengl中对glOrtho()函数的理解

glOrtho是创建一个正交平行的视景体. 一般用于物体不会因为离屏幕的远近而产生大小的变换的情况.比如,常用的工程中的制图等.需要比较精确的显示. 而作为它的对立情况, glFrustum则产生一个透视投影.这是一种模拟真是生活中,人们视野观测物体的真实情况.例如:观察两条平行的火车到,在过了很远之后,这两条铁轨是会相交于一处的.还有,离眼睛近的物体看起来大一些,远的物体看起来小一些. glOrtho(left, right, bottom, top, near, far), left表示视景

使用opengl 绘制9个点,理解各个参数的含义

1 // SimpleTest1.cpp : 定义控制台应用程序的入口点. 2 // 3 4 #include "stdafx.h" 5 #include<gl/glut.h> 6 #include<iostream> 7 using namespace std; 8 void DrawTriggle() 9 { 10 glPointSize(20); 11 glColor4f(1.0,0.0,0.0,0.6); 12 glColor4f(0.5,0.8,0,0

opengl 对投影变化函数的理解

投影变化分两种: 1 . 平行投影       2 . 透视投影 投影变化的设置一般放在reshape函数当中调用 每次要对投影变化进行操作的时候我们需要修改矩阵的变化模式,指定它为投影变化 glMatrixMode(GL_PROJECTION); 用完了记得改回去让 视景体内的物体进行正常的视图变化 glMatrixMode(GL_MODELVIEW); 这里主要讲一下最近对透视投影的理解,以免以后自己又不记得了 透视投影主要的两个函数 void glFrustum(GLdouble left

Android OpenGL ES和OpenGL一起学(二)------理解Viewport(视口)和坐标系Android OpenGL ES篇(转帖)

? 来自:http://www.cnblogs.com/xiaobo68688/archive/2011/12/01/2269985.html ? 首先我们在屏幕中心显示一个矩形,效果如图: // 代码没有经过优化,为的是容易理解public class OpenGLTestActivity extends Activity { GLSurfaceView glView; @Override public void onCreate(Bundle savedInstanceState) { su

个人对stm32ADC编程关键点的理解

平时在做项目或者参加比赛的过程中,个人觉得,有些东西写出来可能会帮助到新手少走弯路.(也很可能是错误的,欢迎大家纠错) 如果只是采集一路信号,直接用ADC独立模式,单通道就可以了. 如果需要同时采集多路信号,比如说既要检测输入端的电压,又要检测输出端的电压,就要用到多通道采集,在stm32中,不同ADC的不同通道的GPIO是固定的,不能改变的.一个通道对应一个GPIO端口.使用的时候,只需要配置相应的GPIO端口.(所谓的同时采样,实际上是不可能的,就算是多通道采样,也存在多通道先后的问题.但可

基于C/S架构的3D对战网络游戏C++框架 _03客户端详细设计与OpenGL、Qt基础

本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): 1.实现基本通信框架,包括对游戏的需求分析.设计及开发环境和通信框架的搭建: 2.实现网络底层操作,包括创建线程池.序列化网络包等: 3.实战演练,实现类似于CS反恐精英的3D对战网络游戏: 技术要点:C++面向对象思想.网络编程.Qt界面开发.Qt控件知识.Boost智能指针.STL算法.STL.