OpenGL(四) 左右手坐标系及基本坐标变换
来源:互联网 发布:unity3d插件手机版 编辑:程序博客网 时间:2024/04/30 04:07
左手坐标系、右手坐标系、笛卡尔坐标系
左手坐标系:伸开左手,大拇指指向X轴正方向,食指指向Y轴正方向,其他三个手指指向Z轴正方向。
右手坐标系:伸开右手,大拇指指向X轴正方向,食指指向Y轴正方向,其他三个手指指向Z轴正方向。
左右手坐标系的示意图如下:
左手和右手坐标注系的区别在于两者Z轴的方向是相反的。
在高等数学中使用的三维空间是笛卡尔坐标系,如下:
笛卡尔坐标系其实就是右手坐标系,OpenGL中使用右手坐标注系,Direct3D使用的是左手坐标系。
左手旋转规则、右手旋转规则
左右手旋转规则用于判断当前坐标系中物体旋转时正方向的判定。在右手坐标系中,确定旋转轴后,右手握成拳头,拇指指向旋转轴的正方向,其余手指的弯曲方向即为旋转的正方向,跟手指弯曲方向一致的旋转记为正向,相反则为负向。左手坐标注系中判断旋转方向的正负使用左手,其他规则一样。两者的示意图:
在OpenGL中,对物体的移动、缩放、旋转操作要使用模型变换,有三个模型变换函数:
- glTranslatef 平移
- glRotatef 旋转
- glScalef 缩放
平移:
glTranslatef (GLfloat x, GLfloat y, GLfloat z);
x,y,z分别表示物体在xyz方向上的平移,举例来说,glTransLatef(-5.0f,4.0f,-3.0f)表示物体沿x轴负方向移 动5,y正方向移动4,z负方向移动3。
旋转:
glRotatef (GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
第一个参数是旋转角度,后三个参数定义了旋转轴,这个旋转轴是由地当前坐标系的原点和点(x,y,z)的直 线。正方向是原点指向点(xyz)。如果要定义不经过原点的旋转轴,则需要先把物体的旋转轴平移到过原 点,旋转之后,再经过平移的逆变换平移回去。
缩放:
glScalef (GLfloat x, GLfloat y, GLfloat z);
三个参数分别是物体在xyz三个方向上的缩放比例。
举例如下,原始图像:
平移:
旋转:
缩放:
坐标变换完整代码:
#include <glut.h> #include <iostream>using namespace std;void myDisplay(void) { glClearColor(1,1,0.8,1);glClear(GL_COLOR_BUFFER_BIT);//加载单位矩阵,在做坐标变换之前都要加载一下这个单位矩阵//glLoadIdentity();//将变换矩阵与当前矩阵相乘,之后所有的点都会左乘上该平移矩阵glTranslatef(0.6,0,0);glRotatef(45,0,0,1);glScalef(0.5,0.5,0.5);glColor3f(1,0,1);glBegin(GL_POLYGON); //绘制一个多边形{glVertex2f(-0.4,-0.4);glVertex2f(-0.4,0.4);glVertex2f(0.4,0.4);glVertex2f(0.4,-0.4);}glEnd();glFlush();} int main(int argc, char *argv[]) { glutInit(&argc, argv); //初始化GLUTglutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowPosition(500, 200); glutInitWindowSize(400, 400); glutCreateWindow("OpenGL"); glutDisplayFunc(&myDisplay); //回调函数 glutMainLoop(); //持续显示,当窗口改变会重新绘制图形return 0; }
- OpenGL(四) 左右手坐标系及基本坐标变换
- Opengl坐标系 坐标变换 笔记
- 左右手系,坐标变换
- Android OpenGL ES(十三):三维坐标系及坐标变换初步
- 详解坐标系及坐标变换--大地坐标系(一)
- 详解坐标系及坐标变换--大地坐标系(二)
- openGL 坐标的基本变换
- [OpenGL]OpenGL坐标系及坐标转换
- Android OpenGL ES 开发教程(14):三维坐标系及坐标变换初步
- Android OpenGL ES 开发教程(14):三维坐标系及坐标变换初步
- Android OpenGL ES 开发教程(14):三维坐标系及坐标变换初步
- Android OpenGL ES 开发教程(14):三维坐标系及坐标变换初步
- Android OpenGL ES 开发教程(14):三维坐标系及坐标变换初步
- Android OpenGL ES 开发教程(14):三维坐标系及坐标变换初步
- Android OpenGL ES 开发教程(14):三维坐标系及坐标变换初步
- 三维坐标系及坐标变换初步
- OpenGL空间(坐标系)变换
- OpenGL: 你不知道的左右手坐标系
- [人工智能技术(转)]关于机器学习的十个实例
- Java中的syso方法是如何调用toString()方法的
- 360个人图书馆禁止复制问题
- 数据结构之查找
- Oracle从零开始-创建表空间,用户及给用户创建授权
- OpenGL(四) 左右手坐标系及基本坐标变换
- 分治法——循环赛日程表
- 数据库连接池
- 简谈面向对象的六大原则
- MySQL第七天----Connection连接池、包装模式(装饰模式)与动态代理模式
- MongoDB入门
- Angular2入门教程-1
- 轮播图缓慢动画完整封装函数代码
- 【数据结构】大数据处理面试题解法