在CesiumVR基础上实现3D左右立体视觉
生活随笔
收集整理的這篇文章主要介紹了
在CesiumVR基础上实现3D左右立体视觉
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
整體思路
?
?
代碼部分
......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; };有待解決的問題
相機偏移后(左屏),應當對場景(左屏)重新進行渲染。具體指
轉載于:https://www.cnblogs.com/dongzhiwu/p/8092932.html
總結
以上是生活随笔為你收集整理的在CesiumVR基础上实现3D左右立体视觉的全部內容,希望文章能夠幫你解決所遇到的問題。