OpenGL的gluLookAt观察变换函数详解
本地坐标系-->世界坐标系-->眼坐标系-->裁剪坐标系
一般gluLookAt()用于从世界坐标系到眼坐标系的转换,但是由于OpenGL里面模型视图矩阵直接将本地坐标系转换为眼坐标系,所以gluLookAt()应该被用来设置模型视图矩阵,但是有一点得注意了:
gluLookAt()的调用应该在场景绘制初glLoadIdentity()函数调用之后,在所有的glTranslate*()、glRotate*()、glScale*()函数调用之前调用,且只调用一次,类似代码如下:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(...);
//这里最好先调用glPushMatrix()
//下面就可以任意调用glTranslate*(),glRotate*(),glScale*()等函数了,注意如果再次调用了glLoadIdentity(),则需要重新调用gluLookAt()
//也就是说,如果让gluLookAt()函数调用达到想要的效果的话,gluLookAt()设置的矩阵一定是模型视图矩阵所乘的第一个矩阵,且最多乘一次
#include "stdafx.h"
#include <GL/glut.h>
#include <stdlib.h> void init(void)
{
glClearColor (0.0, 0.0, 0.0, 0.0); //背景黑色
} void display(void)
{
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (1.0, 1.0, 1.0); //画笔白色 glLoadIdentity(); //加载单位矩阵 gluLookAt(0.0,0.0,5.0, 0.0,0.0,0.0, 0.0,1.0,0.0);
glutWireTeapot();
glutSwapBuffers();
} void reshape (int w, int h)
{
glViewport (, , (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
} int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize (, );
glutInitWindowPosition (, );
glutCreateWindow (argv[]); init ();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
return ;
}



OpenGL的gluLookAt观察变换函数详解的更多相关文章
- OpenGL的glTranslatef平移变换函数详解
OpenGL的glTranslatef平移变换函数详解 glTranslated()和glTranslatef()这两个函数是定义一个平移矩阵,该矩阵与当前矩阵相乘,使后续的图形进行平移变换. 我们先 ...
- OpenGL的glRotatef旋转变换函数详解
OpenGL的glRotatef旋转变换函数详解 先看一下函数定义:void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLflo ...
- OpenGL的glScalef缩放变换函数详解
glScalef是openGL中的模型缩放函数,就是把当前矩阵与一个表示延各个轴对物体进行拉伸.压缩.反射的矩阵相乘.这个物体的每个点的x,y,z坐标与对应的xyz参数相乘. 先看函数定义void g ...
- OpenGL的glViewport视口变换函数详解[转]
调用glViewPort函数来决定视见区域,告诉OpenGL应把渲染之后的图形绘制在窗体的哪个部位.当视见区域是整个窗体时,OpenGL将把渲染结果绘制到整个窗口. void glViewPort(G ...
- OpenGL的gluPerspective透视投影变换函数详解[转]
函数原型void gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar) 首先得设置gluPersp ...
- 【转载】D3DXMatrixLookAtLH视图变换函数详解
原文:D3DXMatrixLookAtLH视图变换函数详解 /*D3DXMatrixLookAtLH函数返回的是世界->视图变换矩阵. 视图坐标系和局部坐标系是一样的,都是世界坐标系转换为指定的 ...
- OpenGL ES: (4) EGL API详解 (转)
上一节我们初步学习了 OpenGL ES.EGL.GLSL 的相关概念,了解了它们的功能,以及它们之间的关联.我们知道了 EGL 是绘制 API(比如 OpenGL ES)与 底层平台窗口系统之间的接 ...
- moviepy音视频剪辑:与大小相关的视频变换函数详解
☞ ░ 前往老猿Python博文目录 ░ 一.引言 在<moviepy音视频剪辑:moviepy中的剪辑基类Clip详解>介绍了剪辑基类的fl.fl_time.fx方法,在<movi ...
- OpenGL的glOrtho平行投影函数详解[转]
glortho函数可以将当前的可视空间设置为正投影空间.基参数的意义如图,如果绘制的图空间本身就是二维的,可以使gluOrtho2D.他的使用类似于glOrtho 原型是: void glOrtho( ...
随机推荐
- [转]Unity: make your lists functional with ReorderableList
原文地址:http://va.lent.in/unity-make-your-lists-functional-with-reorderablelist/ This article is reprod ...
- selenium帮助手册以及 webdriver的各种driver
帮助手册 http://selenium-python.readthedocs.io/locating-elements.html 转载于:http://blog.csdn.net/five3/art ...
- 翻译之basename()
NAME top basename, dirname - parse pathname components SYNOPSIS top #include <libgen.h> char * ...
- hdu敌兵布阵
http://acm.hdu.edu.cn/showproblem.php?pid=1166 敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory ...
- linux rc.sysinit文件详解
/etc/rc.d/rc.sysinit 系统初始化脚本的任务 .激活udev和selinux .根据/etc/sysctl.conf文件设定内核参数 .设定系统时钟 .装载键盘映射 .启用交换分区 ...
- ContentProvider官方教程(7)3种访问形式:批处理、异步访问、intent间接访问(临时URI权限)
Alternative Forms of Provider Access Three alternative forms of provider access are important in app ...
- 【Java】聊聊常用的摘要算法,比如MD5
摘要算法的特性 摘要算法的目的的将信息进行简单地摘要,将任意长的信息摘要成固定长的信息.比如MD5,将任意长的信息摘要成128位的摘要. 不可逆的,将报文摘要成一段信息后,无法通过摘要信息还原会报文. ...
- 【leetcode❤python】13. Roman to Integer
#-*- coding: UTF-8 -*-#从前向后遍历罗马数字,#如果某个数比前一个数小,则加上该数.反之,减去前一个数的两倍然后加上该数###-----技术规则-----#----------- ...
- 【Unity3D游戏开发】性能优化之spine提高80~90%的效率 (三一)
Spine效率低 Unity项目加载spine动画,经常会出现卡顿的情况,如游戏中瞬间播放一个动画,打开一个带spine动画的界面.尤其是SkeletonRenderer.Awake时,会瞬间出现大量 ...
- Python字符串、元组、列表、字典互相转换的方法
直接上代码!!! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 ...