当前位置:网站首页>OpenGL - Coordinate Systems
OpenGL - Coordinate Systems
2022-07-05 09:12:00 【农场主er】
从顶点坐标到我们最终看到的效果,中间要经历多个坐标系的转换:
对于我们来讲,只需要关注三个矩阵即可:Vclip=Mprojection⋅Mview⋅Mmodel⋅Vlocal
Mmodel
:将局部坐标转为世界坐标的矩阵,注意此时的平移是以物体本身的坐标系为基准的Mview
:将世界坐标以摄像机的视角进行转换,比如向右平移,实际上视图会向左平移Mprojection
:对观察坐标进行投影
Camera/View space
通过view matrix
,将世界坐标系相对摄像机的位置和方向进行转换,就可以得到view space
。摄像机在世界坐标系的位置定义如下:
glm::vec3 cameraPos = glm::vec3(0.0f, 0.0f, 3.0f);
glm::vec3 cameraTarget = glm::vec3(0.0f, 0.0f, 0.0f);
glm::vec3 cameraDirection = glm::normalize(cameraPos - cameraTarget);
glm::vec3 up = glm::vec3(0.0f, 1.0f, 0.0f);
glm::vec3 cameraRight = glm::normalize(glm::cross(up, cameraDirection));
glm::vec3 cameraUp = glm::cross(cameraDirection, cameraRight);
有了位置信息之后,可以计算出LookAt matrix
:
利用glm
可以更便捷的构造出该矩阵:
glm::mat4 view;
// Position Target Up
view = glm::lookAt(glm::vec3(0.0f, 0.0f, 3.0f),
glm::vec3(0.0f, 0.0f, 0.0f),
glm::vec3(0.0f, 1.0f, 0.0f));
Walk around
Look around
Euler angles
俯仰角(pitch)
是描述我们如何往上或往下看的角,可以在第一张图中看到。第二张图展示了偏航角(yaw)
,表示我们往左和往右看的程度。滚转角(roll)
代表我们如何翻滚摄像机,通常在太空飞船的摄像机中使用。
鼠标左右移动改变了yaw
,上下移动改变了pitch
,变换的坐标可以计算为:
glm::vec3 direction;
// yaw 在xz平面, pitch 在yz平面
direction.x = cos(glm::radians(yaw)) * cos(glm::radians(pitch));
direction.y = sin(glm::radians(pitch));
direction.z = sin(glm::radians(yaw)) * cos(glm::radians(pitch));
Zoom
Camera Class
边栏推荐
- C # image difference comparison: image subtraction (pointer method, high speed)
- nodejs_ fs. writeFile
- Huber Loss
- 【PyTorch Bug】RuntimeError: Boolean value of Tensor with more than one value is ambiguous
- 太不好用了,长文章加图文,今后只写小短文
- Solutions of ordinary differential equations (2) examples
- 2310. 个位数字为 K 的整数之和
- Ministry of transport and Ministry of Education: widely carry out water traffic safety publicity and drowning prevention safety reminders
- ROS learning 1- create workspaces and function packs
- 驾驶证体检医院(114---2 挂对应的医院司机体检)
猜你喜欢
Ros-11 common visualization tools
C [essential skills] use of configurationmanager class (use of file app.config)
Nodejs modularization
Blogger article navigation (classified, real-time update, permanent top)
nodejs_ 01_ fs. readFile
Solutions of ordinary differential equations (2) examples
Introduction Guide to stereo vision (7): stereo matching
fs. Path module
[code practice] [stereo matching series] Classic ad census: (4) cross domain cost aggregation
Confusion matrix
随机推荐
Ecmascript6 introduction and environment construction
.NET服务治理之限流中间件-FireflySoft.RateLimit
Pearson correlation coefficient
Chris LATTNER, the father of llvm: why should we rebuild AI infrastructure software
Add discount recharge and discount shadow ticket plug-ins to the resource realization applet
Wechat H5 official account to get openid climbing account
Introduction Guide to stereo vision (2): key matrix (essential matrix, basic matrix, homography matrix)
Wxss template syntax
Jenkins pipeline method (function) definition and call
It's too difficult to use. Long articles plus pictures and texts will only be written in short articles in the future
交通运输部、教育部:广泛开展水上交通安全宣传和防溺水安全提醒
信息与熵,你想知道的都在这里了
【PyTorch Bug】RuntimeError: Boolean value of Tensor with more than one value is ambiguous
Nodejs modularization
Configuration and startup of kubedm series-02-kubelet
信息與熵,你想知道的都在這裏了
OpenFeign
Blogger article navigation (classified, real-time update, permanent top)
The combination of deep learning model and wet experiment is expected to be used for metabolic flux analysis
RT thread kernel quick start, kernel implementation and application development learning with notes