Eigen 重寫部分 OpenGL 矩陣變換函式

2021-08-26 12:29:40 字數 3095 閱讀 2147

最近花了一天時間重寫了 op

engl

o pe

ng

l中矩陣變換的部分函式,主要包含五個: gl

load

iden

tity

()g ll

oadi

dent

ity(

)、gl

uloo

kat(

) glu

look

at()

、glscal

ed()

g ls

cale

d(

)、gl

tran

slat

ed()

g lt

rans

late

d(

)、gl

rota

ted(

) glr

otat

ed()

, 重寫後對應的命名是: lo

adid

enti

ty()

l oa

dide

ntit

y(

)、lo

okat

()l oo

kat(

)、sc

aled

()s ca

led(

)、tr

ansl

ated

()t ra

nsla

ted(

)、ro

tate

d() rot

ated

()

, 另外由於是寫在乙個類中,所以還寫了乙個設值乙個取值函式,並且還寫了兩個 de

bug deb

ug

函式。這裡的矩陣變換函式所用到的變換矩陣都是比較簡單的,網上隨便搜一下或者自己推一下就好了,可能稍微難一些的是旋轉矩陣,這個可以去 le

arno

peng

lcn lea

rnop

engl

cn

入門章節中變換部分看看。主要難點是使用 ei

gen eig

en

有些生疏,初次使用,所以寫起來花了一些功夫,另外需要注意的是,在 op

engl

o pe

ng

l中的矩陣變換使用的不是像 c+

+ c++

等語言中的陣列那樣的以列為主行為輔的布局,而是剛好相反,也就是說要利用這些常規的變換矩陣的轉置矩陣進行操作。

一定要注意是轉置矩陣!!!

#ifndef opengl_transformations_h

#define opengl_transformations_h

#include

#include

#include

#include

#include

class

opengltransformations ;

#endif // opengl_transformations_h

#include "opengl_transformations.h"

#include #include opengltransformations::opengltransformations()

opengltransformations::opengltransformations(gldouble *matrix)

opengltransformations::~opengltransformations()

// set matrix_

void opengltransformations::set_matrix(gldouble *matrix)

}// get matrix_ with gldouble[16]

gldouble *opengltransformations::matrix_1x16()

return

matrix;

}// identity

void opengltransformations::loadidentity() else

// }

// }

}// look at

void opengltransformations::lookat(eigen::vector3d position,

eigen::vector3d target,

eigen::vector3d world_up)

void opengltransformations::scaled(eigen::vector3d zoom)

void opengltransformations::translated(eigen::vector3d move)

void opengltransformations::rotated(gldouble angle, eigen::vector3d axis) else

if (axis(1) > 0) else

if (axis(2) > 0)

// update matrix_

eigen::matrix4d &mat = *matrix_;

mat = rotation * mat;

}void opengltransformations::debugoutputtransposematrix4d(eigen::matrix4d mat,

qstring s)

qdebug() << "debug-";

}void opengltransformations::debugoutputvector3d(eigen::vector3d vec,

qstring s)

有關於 ei

gen eig

en

或者 op

engl

o pe

ng

lgoo

glec

++g oo

glec

++

程式設計規範。

opengl中直接繪畫部分

描述點 openggl中需要提供頂點座標,支援2維,三維等 glvertex2x glvertex3x x可以是d表示正數,f表示32位浮點數等 s表示16位整數 opengl中將這個型別定義為glshort i表示32位整數 opengl中將這個型別定義為glint和glsizei f表示32位浮...

字串部分函式的重寫和memcpy memmov

這裡面的字串有些是沒有進行是否為空的判斷,自行參考一下。assert 斷言是預告版內容,比較草率,沒有詳解 這個函式是乙個複製的作用。在實際運用中應該就是需要需要修改某乙個字串,但是又要保留原有資料,這就需要把它複製到另乙個字串裡面。c語言 模擬實現strcpy strcpy的格式是 strcpy ...

偽靜態和URL重寫以及錨部分簡記

草草的記敘了一下,了解的不是很深刻。現在出現了越來越多的 有些我們根據檔案字尾就能知道它的指令碼型別,有些卻是假的或者根本沒有字尾。今天在查一些資料的時候瞥到了url重寫,就順便了解下並做個記錄。因為了解的目的不同,所以我不會去管如何具體的實現。1轉為 1.html或者 1等等之類的url顯示在我們...