panyifei1992 2017-06-07 01:05
浏览 951
已结题

Opengl Camera类 求详解,请3D数学方面的大神进来帮忙解答。

在博客上看到了一篇文章,讲Opengl Camera类的设计。
有好多内容没有看懂,求解释啊。
博客原文:
http://blog.csdn.net/hobbit1988/article/details/7956838#comments

其中以下内容都没有看懂背后的矩阵运算究竟是什么。求解答
void Camera::setModelViewMatrix()

{

float m[16];

Vector3 eVec(eye.x, eye.y,eye.z);

m[0]=u.x; m[4]=u.y; m[8]=u.z; m[12]=-eVec.dot(u);

m[1]=v.x; m[5]=v.y; m[9]=v.z; m[13]=-eVec.dot(v);

m[2]=n.x; m[6]=n.y; m[10]=n.z; m[14]=-eVec.dot(n);

m[3]=0; m[7]=0; m[11]=0; m[15]=1.0;

glMatrixMode(GL_MODELVIEW);

glLoadMatrixf(m); //用M矩阵替换原视点矩阵

}

/* 摄像机绕n、v、u轴旋转的计算函数*/

void Camera::roll(float angle)

{

float cs=cos(angle*3.14159265/180);

float sn=sin(angle*3.14159265/180);

Vector3 t(u);

Vector3 s(v);

u.set(cs*t.x-sn*s.x, cs*t.y-sn*s.y, cs*t.z-sn*s.z);

v.set(sn*t.x+cs*s.x, sn*t.y+cs*s.y, sn*t.z+cs*s.z);

setModelViewMatrix(); //每次计算完坐标轴变化后调用此函数更新视点矩阵

}

void Camera::yaw(float angle)

{

float cs=cos(angle*3.14159265/180);

float sn=sin(angle*3.14159265/180);

Vector3 t(n);

Vector3 s(u);

n.set(cs*t.x-sn*s.x, cs*t.y-sn*s.y, cs*t.z-sn*s.z);

u.set(sn*t.x+cs*s.x, sn*t.y+cs*s.y, sn*t.z+cs*s.z);

setModelViewMatrix();

}

void Camera::pitch(float angle)

{

float cs=cos(angle*3.14159265/180);

float sn=sin(angle*3.14159265/180);

Vector3 t(v);

Vector3 s(n);

v.set(cs*t.x-sn*s.x, cs*t.y-sn*s.y, cs*t.z-sn*s.z);

n.set(sn*t.x+cs*s.x, sn*t.y+cs*s.y, sn*t.z+cs*s.z);

setModelViewMatrix();

}

/* 摄像机绕三个轴平移的计算函数*/

void Camera::slide(float du, float dv, float dn)

{

eye.x+=du*u.x+dv*v.x+dn*n.x;

eye.y+=du*u.y+dv*v.y+dn*n.y;

eye.z+=du*u.z+dv*v.z+dn*n.z;

look.x+=du*u.x+dv*v.x+dn*n.x;

look.y+=du*u.y+dv*v.y+dn*n.y;

look.z+=du*u.z+dv*v.z+dn*n.z;

setModelViewMatrix();

}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 运筹学排序问题的应用
    • ¥15 ubuntu子系统密码忘记
    • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
    • ¥15 保护模式-系统加载-段寄存器
    • ¥15 电脑桌面设定一个区域禁止鼠标操作
    • ¥15 求NPF226060磁芯的详细资料
    • ¥15 使用R语言marginaleffects包进行边际效应图绘制
    • ¥20 usb设备兼容性问题
    • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
    • ¥15 安装svn网络有问题怎么办