Opengl gluLookAt函式詳解

2021-07-28 16:48:50 字數 1760 閱讀 7624

void glulookat(gldouble eyex,gldouble eyey,gldouble eyez,

gldouble centerx,gldouble centery,gldouble centerz,

gldouble upx,gldouble upy,gldouble upz);

函式定義乙個檢視

矩陣,並與當前矩陣相乘。

第一組eyex, eyey,eyez 相機在世界座標的位置

第二組centerx,centery,centerz 相機鏡頭對準的物體在世界座標的位置

第三組upx,upy,upz 相機向上的方向在世界座標中的方向

你把相機想象成為你自己的腦袋:

第一組資料就是腦袋的位置

第二組資料就是眼睛看的物體的位置

第三組就是頭頂朝向的方向(因為你可以歪著頭看同乙個物體)。

[cpp]view plain

copy

#include "stdafx.h"

#include 

#include 

void

init(

void

)   

void

display(

void

)    

void

reshape (

intw, 

inth)  

intmain(

intargc, 

char

** argv)    

一、上面的display()函式中:glulookat(0.0,0.0,5.0, 0.0,0.0,0.0, 0.0,1.0,0.0); 相當於我們的腦袋位置在(0.0,0.0,5.0)處,眼睛望向(0.0,0.0,0.0),即原點。後面的三個引數(0.0,1.0,0.0),y軸為1,其餘為0,表示腦袋朝上,就是正常的情況。看到的情況如下圖:

壺嘴在右,壺柄在坐,壺底在下,壺蓋在上。

二、若將glulookat的後三個引數設定為(0.0,-1.0,0.0),即y軸為-1,其餘為0。這樣表示腦袋向下,即人眼倒著看,看到的效果如下圖:

三、再次修改glulookat的後三個引數為(1.0,0.0,0.0);x軸為1,其餘為0.即人的腦袋像右歪90度來看,即順時針轉90度(換個角度思考就是壺逆時針轉90度),猜想看到的結果應該是壺嘴在上,壺蓋在右,壺底在左,壺柄在下。如下圖:

如果並沒有呼叫glulookat(),那麼照相機就被設定為預設的位置和方向。在預設情況下,照相機位於原點,指向z軸的負方向,朝上向量為(0,1,0)。

可以修改原來的**。把檢視變換函式glulookat()函式,改為模型變換函式gltranslatef(),並使用引數(0.0,0.0,-5.0)。這個函式的效果和使用glulookat()函式的效果是完全相同的,原因:glulookat()函式是通過移動照相機(使用試圖變換)來觀察這個立方體,而gltranslatef()函式是通過移動茶壺(使用模型變換)。另外注意:檢視變換要在模型變換之前進行。

Opengl gluLookAt函式詳解

視點轉換 函式原型 void glulookat gldouble eyex,gldouble eyey,gldouble eyez,gldouble centerx,gldouble centery,gldouble centerz,gldouble upx,gldouble upy,gldoub...

OpenGL gluLookAt函式詳解

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!視點轉換 函式原型 void glulookat gldouble eyex,gldouble eyey,gldouble eyez,gldouble centerx,gldouble centery,gldouble centerz,gldoub...

ngx process options函式詳解

ngx process options是初始化init cycle中的一些如 conf file,prefix,conf prefix等字段的功能,其方法的定義在src core nginx.c中,以下為詳細 主要功能是將ngx prefix,配置檔案的位置資訊,以及命令列引數的資訊初始化到cycl...