いくつかの平面にテクスチャを表示するアプリを構築しています。ただし、錐台の幅とカメラの位置に基づいて、らせんの半径 (計算でらせんを作成するために使用します) を動的に計算したいと思います。
らせんは、画面の中心 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 パラメータを減らしてみましたが、結果は一貫していません...