LookAt的实现 | Blurred code

LookAt的实现

2019/09/14

LastMod: 2019/09/14

Categories: CG

一个物体要在OpenGL中被渲染出现,需要经过经典的MVP变换,主要是从物体坐标系,通过Model Matrix,变换到世界坐标系,然后通过View Matrix,也叫相机坐标系,转换为某个视角所看到的内容,最后通过projection Matrix,做仿射变换,最后还有一步OpenGL隐藏的剪裁步骤,裁减掉不在投影区域内的像素点。

流程图可以看1 流程图

其中,glm::lookat函数是glm库提供的一个工具函数,可以用来计算view matrix。给定三个特殊向量,包括相机的position向量,相机所看的物体的位置target向量以及整个世界坐标系的up向量,可以计算出view矩阵。

view矩阵

其中P是相机的位置向量,U是需要计算的,相机的up向量,R也是需要计算的,相机坐标系的右向量,D是最好计算的,D是direction向量,是从物体到相机的向量。 因此代码可以写成如下,

  //* a solution to glm::lookat
  auto look_at = [](glm::vec3 position, glm::vec3 target,
                           glm::vec3 worldup) -> glm ::mat4 {
    glm::vec3 zaxis = glm::normalize(position - target);    //direction vector
    glm::vec3 xaxis =                                       //right vector
        glm::normalize(glm::cross(glm::normalize(worldup), zaxis));     
    glm::vec3 yaxis = glm::cross(zaxis, xaxis);  // camera up vector

    glm::mat4 trans = glm::mat4(1.0f);
    trans[3][0] = -position.x;
    trans[3][1] = -position.y;
    trans[3][2] = -position.z;

    glm::mat4 rotation = glm::mat4(1.0f);
    rotation[0][0] = xaxis.x;
    rotation[1][0] = xaxis.y;
    rotation[2][0] = xaxis.z;

    rotation[0][1] = yaxis.x;
    rotation[1][1] = yaxis.y;
    rotation[2][1] = yaxis.z;

    rotation[0][2] = zaxis.x;
    rotation[1][2] = zaxis.y;
    rotation[2][2] = zaxis.z;

    return rotation * trans;
  };

  1. reference : https://learnopengl.com/Getting-started/Camera ↩︎

玻璃钢生产厂家玻璃钢寺庙佛像雕塑加工定制博乐气球商场美陈装饰联系电话广宁玻璃钢花盆花器广州玻璃钢花盆哪里买十堰市玻璃钢雕塑厂保定玻璃钢仿铜雕塑厂家镜面玻璃钢彩绘雕塑制作厂家正宗玻璃钢雕塑推荐平凉动物玻璃钢雕塑设计上海彩绘玻璃钢雕塑园林玻璃钢雕塑直销北京走廊商场美陈怎么样茂名玻璃钢狗雕塑新疆艺术玻璃钢雕塑北海玻璃钢雕塑制作厂家河北玻璃钢雕塑供应商玻璃钢雕塑品的税收编码枣强玻璃钢雕塑武汉商场气球美陈盘锦玻璃钢雕塑制作安装绍兴人物玻璃钢雕塑制作玻璃钢泡沫雕塑工厂九江大型玻璃钢雕塑批发武汉玻璃钢人物不锈钢公园雕塑景观玻璃钢卡通雕塑要求玻璃钢仿铜雕塑浮雕壁画山东常见商场美陈厂家供应浙江市政工程绿化玻璃钢花盆西红柿玻璃钢雕塑图片山东校园玻璃钢雕塑制作香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化