在前面的教程中,我們都是預設攝像機座標在三維座標的原點,本篇教程我們開始討論把攝像機放在三維空間的任意位置,從而更方便的從不同視角觀察物體。決定三維空間攝像機座標系有三個因素,攝像機的在三維空間的位置,攝像機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...