zoukankan      html  css  js  c++  java
  • 三维世界里的坐标和变换,逆方向旋转移动三维世界的方式来实现3D漫游

    一、由于刚学习opengl,我不知道opengl内是如何定义的,以下定义的坐标系是我个人自己定义的:

    视觉坐标:我们从屏幕看到的三维世界,即未旋转的三维绘图的坐标系,屏幕外为z轴,屏幕右为x轴,屏幕上为y轴。这个坐标系不会旋转是固定的(当然可以反着理解,世界坐标系不变,改变的是视觉坐标,后面的都是以视觉坐标不变理解的,若以世界坐标不变的则刚好相反理解)。
    视觉界面:视觉是屏幕显示的界面,它是从视觉坐标系(0,0,-1)为中心显示的一个界面,界面的大小由屏幕决定。
    三维世界的坐标系,绘图坐标系:起初屏幕外为z轴,屏幕右为x轴,屏幕上为y轴,在利用旋转函数和移动绘图坐标系后就会与视觉坐标系有所差异了。
     
    二、视觉界面视觉坐标系三维世界坐标系中的绘图物体共同决定的。
    三维世界原始绘图与视觉坐标是一致的,当三维世界坐标系旋转后,原来的x、y、z轴会发生变化但是三维世界坐标系内的点坐标不会改变,但是投影到视觉坐标后都会有所改变,而投影到视觉坐标系后,有些点在-1层后面的可以显示的点经过旋转后投影到视觉坐标点后大于等于-1层后就不会显示了,这就会导致视觉的变化。
     
     
    三、3D漫游的实现方法:
    视觉界面由视觉坐标和三维世界坐标系共同决定,当我们想漫游一个三维场景时候通常有2种改变,即视觉方向的改变和视觉点的改变。
    视觉方向:屏幕显示的三维世界内的方向的改变,如向左右上下旋转视觉。
    视觉点:原始视觉界面是(0,0,-1)为中心的显示投影在视觉坐标系-1层后的三维世界。这里的(0,0,-1)就是视觉点。
        视觉方向的改变可以利用glTranslatef函数来实现,当向右旋转视觉时候我们就把三维世界绕y轴逆时针方向旋转一定角度。同理如果向上小修改的话就绕x轴旋转一定角度。
        视觉点改变:视觉点的改变主要是用到glTranslatef(x,y,z),修改绘图的中心点,如果我们要向前走就将z的坐标增加一定的值,若想向左走就将x的坐标增加一定的值。
     
    注意:视觉点初始位置在视觉点(0,0,-1),因此显示的三维世界时候通过旋转平移三维世界来漫游的,因为显示界面有固定大小,因此注意不要把视觉界面最下的点当作视觉点的z坐标。
     
    四、物体旋转的坐标变换
            当利用glrotatef函数旋转,我们可以理解把整个三维世界按照右手准则(类似安培右手准则)旋转(当然也可以理解为视觉坐标绕相反方向旋转,后面是以旋转三维世界理解),而当我们在设定绘图原点,gltranslate()时候就是设定绘图原点,它的调用一般都在旋转函数前,因此在三维漫游的时候想让物体的前进后退,左移右移都不会因为旋转而改变,可以直接修改原点的参数来实现漫游。
  • 相关阅读:
    11.【nuxt起步】-登录验证
    10.【nuxt起步】-引用mintui
    9.【nuxt起步】-scroll分页加载
    8.【nuxt起步】-vue组件之间数据交互
    7.【nuxt起步】-Nuxt与后端数据交互
    6.【nuxt起步】-完成一个静态的页面
    5.【nuxt起步】-swiper组件
    4.【nuxt起步】-具体练习一个h5实例
    3.【nuxt起步】-下面以一个SPA单页程序为例子
    2.【nuxt起步】-初始化创建nuxt项目
  • 原文地址:https://www.cnblogs.com/bokeofzp/p/5967575.html
Copyright © 2011-2022 走看看