opengl 教程 13 攝像機座標系

2021-09-06 07:49:26 字數 1131 閱讀 4988

在前面的教程中,我們都是預設攝像機座標在三維座標的原點,本篇教程我們開始討論把攝像機放在三維空間的任意位置,從而更方便的從不同視角觀察物體。決定三維空間攝像機座標系有三個因素,攝像機的在三維空間的位置,攝像機lookat的方向向量,攝像機的up方向向量,有了這三個值,我們就可以確定三維空間攝像機的位置和方位,從而推導出世界座標系到攝像機座標的轉化矩陣。

具體推導見我轉的另外一篇文章:

主要**變化:

建立乙個矩陣類matrix4f,用來管理所有的矩陣操作。

pipeline.h

struct m_camera;

math3d.h

vector3f vector3f::cross(const vector3f& v) const

向量類vector3f增加了2個向量叉積的函式。

math3d.h

vector3f& vector3f::normalize()

注意:右向量是根據叉積算出來的。

math3d.cpp

void matrix4f::initcameratransform(const vector3f& target, const vector3f& up)

pipeline.cpp

const matrix4f* pipeline::gettrans()

下面**把攝像機從原點移動到(1.0,1.0,-3.0)的位置,攝像機對準位置

(0.45f, 0.0f, 1.0f),攝像機的up方向是y軸正方向。

tutorial13.cpp

vector3f camerapos(1.0f, 1.0f, -3.0f);

vector3f cameratarget(0.45f, 0.0f, 1.0f);

vector3f cameraup(0.0f, 1.0f, 0.0f);

p.setcamera(camerapos, cameratarget, cameraup);

程式執行後介面如下:

攝像機內參與OpenGL

參考 1 相機引數是三種不同的引數。相機的內引數是六個分別為 1 dx 1 dy r u0 v0 f。opencv1裡的說內引數是4個其為fx fy u0 v0。實際其fx f sx,其中的f就是焦距上面的f,sx是畫素 沒公釐即上面的dx,其是最後面圖里的後兩個矩陣進行先相乘,得出的,則把它看成整...

OpenGL基礎14 攝像機

很可惜,opengl沒有攝像機的概念 我們當然需要想辦法模擬出乙個攝像機,也就是玩家的視角,在前面這一章 第乙個正方體,我們僅將 攝像機 往z軸正方向移動了3個單位,並且正對著 0,0,0 但是大部分的情況下,類似於我們處於乙個3d場景中,攝像機的視角都是從上斜向下的,這個時候若想要計算攝像機的位置...

POV Ray簡單上手教程 攝像機的使用

在本篇,我們學習pov ray中攝像機的一些功能,來獲得一些酷炫的效果 我們首先構建一幅場景 我們使用三個物體,乙個底面 乙個粉色球體,乙個綠色正方體,乙個藍色柱體和乙個黑白相間的地面。三個物體的位置資訊如下 球體在前面,正方體在中間,柱體在後面。最後使用兩個光源來完成場景。上述場景 如下 incl...