摄像机Learn OpenGL

需求

需求:摄像机在世界空间位置、观察方向、右向量和上向量。
在这里插入图片描述

1.摄像机位置

::世界空间中代表摄像机的向量。

glm::vec3 cameraPos=glm::vec3(0.0f,0.0f,3.0f);

!!!Z轴是屏幕指向自己。如果希望摄像机往后移动,把Z往正方向移动。

2.摄像机方向

::摄像机位置方向—场景原点向量=指向原点。

glm::vec3 cameraTarget=glm::vec3(0.0f,0.0f,0.0f);
glm::vec3 caremaDiretion=glm::normalize(cameraPos-cameraTarget);

!!!:方向向量:摄像机到目标向量的反方向(如上图)

3.右轴和上轴

获取右轴(代表摄像机空间X轴的正方向):定义一个上向量(Up Vector),将上向量和摄像机方向向量叉乘。(交换顺序得到X轴负方向的向量)

glm::vec3 up=glm::vec3(0.0f,1.0f,0.0f)
glm::vec3 cameraRight=glm::normalize(glm::cross(up,cameraDirection));

获取上轴(正Y轴):把右轴和方向向量进行叉乘。

glm::vec3 cameraUp=glm::corss(cameraDirection,cameraRight);

4.Look At

作用:如果你定义了一个坐标空间,里面有3个相相互垂直的轴,你可以用这三个轴+一个平移向量来创建一个矩阵,用这个矩阵乘以任何向量来变换到那个坐标空间!
R:右向量,U:上向量,P:摄像机位置向量

glm::mat4 view;
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));
//只需要:摄像机位置,目标位置,表示上向量的世界空间中的向量)

5.摄像机在场景旋转

目的:摄像机在场景旋转,注视点始终在(0,0,0)
每一帧创建x,z坐标。x和z在一个圆圈上的一点。

GLfloat radius=10.0f;
GLfloat camx=sin(glfwGetTime())*radius;
GLfloat camz=cos(glfwGetTime())*radius;
glm::mat4 view;
view = glm::lookAt(glm::vec3(camx,0.0,camz),glm::vec3(0.0,0.0,0.0),glm:vec3(0.0,1.0,0.0));

5.自由移动

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值