整体思路


  1. 在VR模块的基础上调整视差,使其随距离发生变化;
  2. 左右分屏时,需要将左右屏的横向进行1/2压缩;这是因为3D-TV在对左右格式影像进行合并时,会进行拉伸;
  3. 左屏幕的相机相对于原来的(右屏)相机位置发生了变化,所以需要重新判断左屏幕相机视野内的切片,并重新进行渲染(解决黑色切片问题)。

代码部分


  1. 视差调整以及分屏横向压缩      
      function updateAndExecuteCommands(scene, passState, backgroundColor) {    
       ......
   var near = camera.frustum.near;
   var fo = near * 5.0;
   var eyeSeparation = fo / 30.0;    //var eyeTranslation = Cartesian3.multiplyByScalar(savedCamera.right, eyeSeparation * 0.5, scratchEyeTranslation);
   //修改,使得视差随相机高度变化
   //var modifyEyeSeparation = eyeSeparation * 0.5 * savedCamera.position.z ;
  //savedCamera.getMagnitude()获取距离中心的距离
   var modifyEyeSeparation = eyeSeparation * 0.5 * savedCamera.getMagnitude() ;
   var eyeTranslation = Cartesian3.multiplyByScalar(savedCamera.right, modifyEyeSeparation, scratchEyeTranslation);    viewport.x = passState.viewport.width;    // camera.frustum.aspectRatio = viewport.width / viewport.height;
   // 修改,使得VR模式下球体横向收缩
   camera.frustum.aspectRatio = viewport.width*2 / viewport.height;    var offset = 0.5 * eyeSeparation * near / fo;    //Cartesian3.add(savedCamera.position, eyeTranslation, camera.position);
   camera.frustum.xOffset = offset;
      executeCommands(scene, passState);             

           viewport.x = 0;
   //
   Cartesian3.subtract(savedCamera.position, eyeTranslation, camera.position);    camera.frustum.xOffset = -offset;
   //相机位置发生变化,所以要渲染的切片发生变化;所以重新计算需要渲染的切片,进行渲染 (这部分还需要进行完善)
   executeCommands(scene, passState);
   Camera.clone(savedCamera, camera);

2.对左屏(相机偏移的场景)重新进行渲染(暂时解决方案,对相机外的场景同样进行渲染,存在的问题:效率太低)

  CullingVolume.prototype.computeVisibility = function(boundingVolume) {
   if (!defined(boundingVolume)) {
   throw new DeveloperError('boundingVolume is required.');
   }    var planes = this.planes;
   var intersecting = true;
   for (var k = 0, len = planes.length; k < len; ++k) {
   var result = boundingVolume.intersectPlane(Plane.fromCartesian4(planes[k], scratchPlane));
   if (result === Intersect.OUTSIDE) {
   // return Intersect.OUTSIDE;
   //修改,不进行判断是否在范围内,全部进行渲染,从而避免立体视觉部分出现黑框
   return Intersect.INSIDE;
   } else if (result === Intersect.INTERSECTING) {
   intersecting = true;
   }
   }
   return intersecting ? Intersect.INTERSECTING : Intersect.INSIDE;
  };

有待解决的问题

  相机偏移后(左屏),应当对场景(左屏)重新进行渲染。具体指

    1. 重新判断boundingVolume(球体)与CullingVolume(相机的视野)的相互关系(INSIDE或OUTSIDE),即判断球体是否在相机的视野范围内,对范围内的部分进行渲染;
    2. 重新对场景进行渲染,从而将当前相机视野内的切片渲染出来,避免黑框的出现

在CesiumVR基础上实现3D左右立体视觉的更多相关文章

  1. ]Kinect for Windows SDK开发入门(六):骨骼追踪基础 上

    原文来自:http://www.cnblogs.com/yangecnu/archive/2012/04/06/KinectSDK_Skeleton_Tracking_Part1.html Kinec ...

  2. 将Cesium ion上的3D Tiles和Bing imagery应用到osgEarth

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ Pelican Mapping 激动的宣布支持加载Cesium ...

  3. .net在当前日期的基础上加一天

    比如今天是:2015-11-10 18:57:01,在这个基础上加一天,那么就是2015-11-11 18:57:01,代码如下: DateTime now_dt = DateTime.Now; ). ...

  4. 【JavaEE】SSH+Spring Security基础上配置AOP+log4j

    Spring Oauth2大多数情况下还是用不到的,主要使用的还是Spring+SpringMVC+Hibernate,有时候加上SpringSecurity,因此,本文及以后的文章的example中 ...

  5. 在cocos code ide的基础上构建自己的lua开发调试环境

    对于一种语言,其所谓开发调试环境, 大体有以下两方面的内容: 1.开发, 即代码编写, 主要是代码提示.补齐, 更高级一点的如变量名颜色等. 2.调试, 主要是运行状态下断点.查看变量.堆栈等. 现在 ...

  6. Android 工程在4.0基础上混淆

    Android现在对安全方面要求比较高了,我今天要做的对apk进行混淆,用所有的第三方工具都不能反编译,作者的知识产权得到保障了,是不是碉堡了. 一,首先说明我这是在4.0基础上进行的. 先看看pro ...

  7. 框架使用的技术主要是SpringMVC 在此基础上进行扩展

    框架使用的技术主要是SpringMVC 在此基础上进行扩展 1 Web前端使用 2 前段控制器采用SpringMVC零配置 3 IOC容器Spring 4 ORM使用 Mybites或者hiberna ...

  8. 实现Square类,让其继承自Rectangle类,并在Square类增添新属性和方法,在2的基础上,在Square类中重写Rectangle类中的初始化和打印方法

    实现Square类,让其继承自Rectangle类,并在Square类增添新属性和方法,在2的基础上,在Square类中重写Rectangle类中的初始化和打印方法 #import <Found ...

  9. 【Xamarin开发 Android 系列 6】 Android 结构基础(上)

    原文:[Xamarin开发 Android 系列 6] Android 结构基础(上) 前面大家已经熟悉了什么是Android,而且在 [Xamarin开发 Android 系列 4] Android ...

随机推荐

  1. (十四)hibernate逆向工程

    一.hibernate逆向工程生成实体 介绍一个模型设计工具PowerDesigner,这个是j2ee开发必要的一个工具.一般在开发中先使用PowerDesigner 创建实体关系图即概念模型.建立了 ...

  2. uva 12452 Plants vs. Zombies HD SP (树DP)

    Problem I: Plants vs. Zombies HD Super Pro Plants versus Zombies HD Super Pro is a game played not a ...

  3. 7.17实习培训日志-java基础

    总结 今天主要是学习了java基础,java面向对象方面的知识,然后下午老师讲了软件的设计模式,今天看了一部分,印象深刻的是单例模式,用枚举实现单例模式.晚上主要讲了maven的一些基础知识和idea ...

  4. MySQL8.0.16新特性:The Communication Protocol In Group Replication

    MGR优雅升级到MySQL8.0.16 传统的升级手段之一,5.7 MGR集群与8.0 MGR集群进行数据传输,程序切换新集群后测试是否正常. 如果不正常,要么将新集群的新增数据同步回旧集群,要么就舍 ...

  5. IDEA Maven Mybatis generator 自动生成代码(实例讲解)(转)

    IDEA Maven Mybatis generator 自动生成代码(实例讲解) MyBatis Generator • 简称MBG,是一个专门为MyBatis框架使用者定制的代码生成器,可以快速的 ...

  6. Python之路(四十一):通过项目来深入理解tornado

    Tornado之路   引子 与其感慨路难行,不如马上出发 目录 通过项目来深入理解tornado(一):tornado基础回顾 通过项目来深入理解tornado(二):AsyncHttpClient ...

  7. C++经典面试算法题

    转自:http://blog.csdn.net/f_r_e_e_x/article/details/50770907 //1.实现strcpy. char* MyStrCpy( char *pDest ...

  8. Keras实现CIFAR-10分类

      仅仅为了学习Keras的使用,使用一个四层的全连接网络对MNIST数据集进行分类,网络模型各层结点数为:3072: : 1024 : 512:10:   使用50000张图片进行训练,10000张 ...

  9. pyinstaller打包多个py文件仍报错ModuleNotFoundError: No module named 'xxx'

    [问题现象] 使用pyinstaller A.py -p b.py -p c.py打包多个文件 或者使用main.spec在Analysis配置好各个文件打包 打包成功后,运行main.exe仍然报错 ...

  10. Windows服务器初始配置

    系统状态是否良好 检查ip地址.子网掩码等配置 防火墙是否关闭 是否有攻击,有多大的攻击,什么类型的攻击,攻击流量图 是否中病毒 1.改端口 (1)打开注册表 [HKEY_LOCAL_MACHINE\ ...