android camera移动方向_游戏引擎养成《九》 Camera !!!

3be912833cd7e2d4aabc52e66919abc1.png

# 封装的意义

emmm,讲渲染部分比我规划里要长一点.... 伪光照三角形并不能让我满足,回顾一下:

  1. 第七节抽象了Shader类,提供了shader源码读取、编译、链接 、启动等API 。
  2. 第八节完善了Shader类对Uniform的操作,补全了投影矩阵与鼠标输入。

但是main.cpp仍然不够简洁!最不爽的就是顶点数据,一个三角形还好,如果我们要绘制复杂图形,那几万行的顶点颜色数据信息太煞风景了。而且在我们接触的引擎中,一般提供的都是sprite、prefab、blueprint等封装好的renderable 。这是一个很常见的概念,比如在许多渲染引擎中Forward Rendering的伪代码如下:

For each light:
    For each renderable affected by the light:
        framebuffer += renderable * light

如果单纯用OpenGL API来实现游戏引擎的渲染的话,我们需要不断的调用API设置渲染状态、传输几何体信息、通知GPU渲染、清理 反复循环。使用面向对象的方式会更优,抽象出静态物体、动态物体组成场景、灯光、摄像机以及其他。

我们调个软柿子捏,先抽象摄像机吧。

# 摄像机本质

当我们讨论摄像机/观察空间(Camera/View Space)的时候,是我们在讨论以摄像机的透视图作为场景原点时场景中所有可见顶点坐标。观察矩阵把所有的世界坐标变换到观察坐标,这些新坐标是相对于摄像机的位置和方向的。定义一个摄像机,我们需要一个摄像机在世界空间中的位置、观察的方向、一个指向它的右测的向量以及一个指向它上方的向量。细心的读者可能已经注意到我们实际上创建了一个三个单位轴相互垂直的、以摄像机的位置为原点的坐标系。 OpenGL是右手坐标系
移动世界!

# 视图矩阵

LookAt API :描述一台摄像机看向一个目标点,我们需要以下三个量

  1. 摄像机的位置
  2. 摄像机看向的目标点位置 ,1+2 决定了摄像机的方向。
  3. 摄像机向上的方向。
坐标系的逆矩阵,如果是该坐标系正交,则其逆矩阵为其转置矩阵

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程解决的问题: 作为游戏行业或者图形学从业者,你是否面临以下问题: 到底openGL底层如何实现的? 到底矩阵操作变换是怎么做到的? 到底光栅化的算法以及原理是什么? 到底如何才能从3D世界投射到2D屏幕呢? 图形学有这么多的矩阵操作,到底如何推导如何应用呢? 学完这门课程,你应该就可以从底层了解一个初级的openGL图形接口如何实现,图形学最底层的封装到底面临哪些挑战;跟随我们一行一行写完代码,你就会得到一个迷你版本的openGL图形库,你可以深度体会图形从模型变换,观察矩阵变换,投影矩阵变换一直到光栅化纹理操作的全套模拟流程。 课程介绍: 本课程将带领学员不使用任何图形库,实现从0到1的图形学接口封装以及算法讲解,并且带领大家手敲代码,一行一行进行实现。 涵盖了(环境搭建,绘制点,Bresenham算法绘制完美直线,三角形拆分绘制算法,颜色插值算法,图片操作,图片二次插值放缩算法,纹理系统接口搭建及封装,矩阵操作理论以及实践,openGL类似接口封装,3D世界的图形学理论及接口封装等) 最终将带领大家通过C++实现一个3D世界的图形接口,方便所有人入门图形学,进行接下来的openGL接口以及GPU编程的学习   本课程为系列课程的第一步入门,且带领所有人进行实现,更加实用,可以让大家打牢图形学的基础知识及编程技能

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值