OpenGL函数解析之glLoadIdentity()

函数原型:void glLoadIdentity(void)

函数说明:调用glLoadIdentity()函数可以恢复初始坐标系,用一个4x4的单位矩阵来代替当前矩阵,实际上就是对当前矩阵进行初始化。无论之前进行了多少次矩阵变换,在执行该函数后,当前矩阵均恢复成一个单位矩阵,即相当于没有进行任何矩阵变换。

调用glLoadIdentity()函数之后,实际上将当前点移到了屏幕中心,类似于一个复位操作,状态如下:

  1. x轴从左至右,y轴从下至上,z轴从里至外。
  2. OpenGL屏幕中心的坐标值是x轴和y轴的0.0f点。
  3. 中心左面的坐标值是负值,右面是正值。
  4. 移向屏幕顶端是正值,移向屏幕底端是负值。
  5. 移向屏幕深处是负值,移出屏幕则是正值。

glLoadIdentity()函数在语义上等同于单位矩阵调用glLoadMatrix()函数,但是在一些情况下,glLoadIdentity()更有效率。

为什么要使用glLoadIdentity()函数?

由于某些原因可能使得当前矩阵中的元素有一些不确定的值,这将导致程序对图形对象进行几何变形时得到一个非预期的结果。因此有必要将当前矩阵初始化成一个单位矩阵,即对图形对象不做任何变换。这就是为什么在调用过glMatrixMode()命令后,总是要调用该命令的原因。由于glMatrixMode()命令本身也是一种矩阵变换,它将当前矩阵变成命令参数所规定的形式,若不用单位矩阵来替换它,在此矩阵下绘制出的图形将是难以预计的。

PS:用单位矩阵替换当前矩阵并不改变当前矩阵模式。

用一个单位矩阵来替换当前矩阵的做法并非在任何场合下都可以使用。例如,已经进行了3次矩阵变换,而现在打算将当前矩阵恢复到第二次变换后的状态时,该方法将失效。此时可用glPushMatrix()命令将每次变换前的矩阵压入矩阵堆栈,在进行完新矩阵中的各种操作后,再利用glPopMatrix()命令将栈顶的矩阵弹出矩阵堆栈,成为当前矩阵。

时间: 2024-10-27 10:19:12

OpenGL函数解析之glLoadIdentity()的相关文章

OpenGL函数解析之gluPerspective()

函数原型: void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar); 参数说明: fovy:指定视景体的视野的角度,以度数为单位,y轴的上下方向. aspect:指定视景体的宽高比(x平面上). zNear:指定观察者到视景体的最近的裁剪面的距离. zFar:指定观察者到视景体的最远的裁剪面的距离. 函数说明: gluPerspective()函数设置透视投影矩阵,一般在执行该函数glMatr

AngularJS指令中的compile与link函数解析

AngularJS指令中的compile与link函数解析 通常大家在使用ng中的指令的时候,用的链接函数最多的是link属性,下面这篇文章将告诉大家complie,pre-link,post-link的用法与区别. 原文地址 angularjs里的指令非常神奇,允许你创建非常语义化以及高度重用的组件,可以理解为web components的先驱者. 网上已经有很多介绍怎么使用指令的文章以及相关书籍,相互比较的话,很少有介绍compile与link的区别,更别说pre-link与post-lin

ngx_http_process_request_headers函数解析

ngx_http_process_request_headers函数被ngx_http_process_request_line函数调用,将请求头逐个放到r->headers_in.headers结构体中.由于不确定请求中一共有多少个header,所以这个函数主要功能也是在for(;;){}循环中完成,一下所有的代码都是在上述循环内部的.主要代码和解析如下: 判断是否超时,如果超时,报错并结束请求.    if (rev->timedout) {        ngx_log_error(NG

iOS 基础函数解析 - Foundation Functions Reference

Foundation Functions Reference Framework Foundation/Foundation.h Declared in NSBundle.h NSByteOrder.h NSDecimal.h NSException.h NSObjCRuntime.h NSObject.h NSPathUtilities.h NSRange.h NSZone.h Overview This chapter describes the functions and function

thread.join函数,java多线程中的join函数解析

join函数的作用,是让当前线程等待,直到调用join()的 线程结束或者等到一段时间,我们来看以下代码 1 package mian; 2 3 4 public class simpleplela { 5 static void threadMessage(String message) { 6 String threadName = 7 Thread.currentThread().getName(); 8 9 System.out.println(threadName+" "+m

socket使用TCP协议时,send、recv函数解析以及TCP连接关闭的问题

Tcp协议本身是可靠的,并不等于应用程序用tcp发送数据就一定是可靠的.不管是否阻塞,send发送的大小,并不代表对端recv到多少的数据. 在阻塞模式下, send函数的过程是将应用程序请求发送的数据拷贝到发送缓存中发送并得到确认后再返回.但由于发送缓存的存在,表现为:如果发送缓存大小比请求发送的大小要大,那么send函数立即返回,同时向网络中发送数据;否则,send向网络发送缓存中不能容纳的那部分数据,并等待对端确认后再返回(接收端只要将数据收到接收缓存中,就会确认,并不一定要等待应用程序调

BulkLoop例程の初始化函数and重复调度函数の解析

//----------------------------------------------------------------------------- // File: bulkloop.c // Contents: Hooks required to implement USB peripheral function. // // $Archive: /USB/Examples/FX2LP/bulkloop/bulkloop.c $ // $Date: 3/23/05 2:55p $

C++虚函数解析(转载)

虚函数详解第一篇:对象内存模型浅析 C++中的虚函数的内部实现机制到底是怎样的呢? 鉴于涉及到的内容有点多,我将分三篇文章来介绍. 第一篇:对象内存模型浅析,这里我将对对象的内存模型进行简单的实验和总结. 第二篇:继承对象的构造和析构浅析,这里我将对存在继承关系的对象的构造和析构进行简单的实验和总结. 第三篇:虚函数的内部机制浅析,这里我将对虚函数内部的实现机制进行实验总结. 我使用的编译器是VS2008,有不足或者不准确的地方,欢迎大家拍砖(我个人非常迫切的希望得到大家的指正),我会及时修正相

ngx_http_process_request_line函数解析

处理请求行,一般的http请求过程中,ngx_http_process_request_line函数被ngx_http_wait_request_handler调用,并且在ngx_http_wait_request_handler中被设置为读事件的回调函数.在连接被accept之后,有数据到达之后会执行ngx_http_create_request函数,之后再有读事件被触发时被调用的回调函数就是ngx_http_process_request_line.主要代码和解析如下. 判断是否超时,如果超