我正在構建一個應用程序,其中我呈現了一些帶有紋理的平面。但是,我想計算螺旋線的半徑(我在計算中用於創建螺旋線),動態基於截錐體寬度和相機位置。計算螺旋線的半徑,以便螺旋線中的模型位於平截頭體內
螺旋位於屏幕中心x = 0,y = 0,z = 0。
我想這樣做考慮屏幕方向(風景/人像)。到目前爲止,這是我有的代碼,但似乎我失去了一些東西,因爲左側和右側的飛機不在裏面視口。
App.prototype.calculateHelixRadius = function(){
// plane width = height = 512;
var friend = this.getFriend();
var vFOV = friend.camera.fov * Math.PI/180;
var dist = utils.getAbsPointsDistance3D(friend.camera.position, friend.scene.position);
var aspect = friend.settings.container.clientWidth/friend.settings.container.clientHeight;
var frustumHeight = 2.0 * dist * Math.tan(0.5 * vFOV);
var frustumWidth = frustumHeight * aspect;
return utils.isLandscape() ? frustumHeight/2 : frustumWidth/2 ;
};
我在做什麼錯,爲什麼屏幕邊緣的平面不在裏面?
也可對照這裏是getAbsPointsDistance3D
var utils = {
// other helpers...
getAbsPointsDistance3D: function(p1, p2) {
var xd = p2.x - p1.x;
var yd = p2.y - p1.y;
var zd = p2.z - p1.z;
return Math.sqrt(xd * xd + yd * yd + zd * zd);
}
};
更新
我試圖降低DIST參數的代碼,但結果並不一致......
1. http://stackoverflow.com/questions/14614252/how-to-fit-camera-to-object,2. http://stackoverflow.com/questions/20059612/calculate- camera-zoom-required-for-object-to-fit-in-screen-height,3. http://stackoverflow.com/questions/16462848/three-js-zoom-to-fit-width-of-objects-忽略 - 高度 – gaitat
你試圖達到的截圖,將有助於解決這個問題。 – ProllyGeek