3Dμ λν μ΄μ κ²½νμ΄ μκΈ° λλ¬Έμ 3D μ λ¬Έκ°μκ² μΌλ°μ μΈ μ§μμ΄ λ μμλ λͺ κ°μ§ λ¬Έμ κ° μμ΅λλ€.
λ€μν μ₯λ©΄ ν¬κΈ° (800x600, 1200x100 λ±)κ° μμ΅λλ€.
z μμΉκ° 0μ΄κ³ νκ³Ό λμ΄κ° μ₯λ©΄κ³Ό λμΌν λ¬Όμ²΄κ° μ 체 μ₯λ©΄μ μ±μ°λλ‘νλ €λ©΄ μ΄λ€ 곡μμ μ¬μ©ν μ μμ΅λκΉ?
μ : μ€λΈμ νΈ λ©μ Aλ 1200x100μ΄κ³ Z μμΉ 0μ μμ΅λλ€. μ₯λ©΄λ 1200x100μ λλ€. μΉ΄λ©λΌλ z μμΉ 1500μ μμ΅λλ€. λ¬Όμ²΄κ° μ₯λ©΄μ μ±μ°λλ‘νλ FOVλ 무μμ λκΉ?
((A / B) * C) μ€μ λ°λΌ λκ° λ΄κ° μ°Ύκ³ μλ κ²μ λλ€ : D.
λ΄ μ§λ¬Έμ λ΅ν μμμλ§νΌ λ°μ΄λ μ¬λμκ² λ¬΄νν μΉμ°¬μλ립λλ€. :)
μμ§ μμΌ vFOV
λ° μΉ΄λ©λΌλ‘λΆν°μ 거리 dist
κ³ λ €ν λ 보μ΄λ height
λ€μκ³Ό κ°μ΅λλ€.
height = 2 * Math.tan( ( vFOV / 2 ) ) * dist;
보μ΄λ width
λ
aspect = window_width / window_height;
hFOV = 2 * Math.atan( Math.tan( vFOV / 2 ) * aspect );
width = 2 * Math.tan( ( hFOV / 2 ) ) * dist;
THREE.jsμμ μΉ΄λ©λΌμ μμΌκ° λ§€κ° λ³μλ μμ§ λ§€κ° λ³μμ λλ€.
λ κ°μ§ λ°©μ μ μΈνΈλ₯Ό μ¬μ©νμ¬ νμν vFOVλ₯Ό λ λ² κ³μ°νκ³ λ ν° λ΅μ μ νν©λλ€.
λ΅μ₯ ν΄μ£Όμ
μ κ°μ¬ν©λλ€ :)
κ·Έλλ μ’ νΌλ μ€λ¬μμ. λ³μ vFOVλ μ΄λμ μ»μ΅λκΉ?
μ₯λ©΄μ μ±μμΌνλ 물체μ λμ΄μ
λκΉ?
κ·Έλ λ€λ©΄ μ΄μν μ«μ (1000 λ²μ)κ° νμλλ―λ‘μ΄λ₯Ό μ΅μ’
FOVλ‘ λ³ννλ €λ©΄ μ΄λ»κ²ν΄μΌν©λκΉ?
λλ Fiddle http://jsfiddle.net/dmYgr/6/μ λ§λ€μμ΅λλ€.
μ΄λ»κ²νλμ§ λ³΄μ¬μ€ μ μλμ?
λ λ€μ κ°μ¬ν©λλ€. κ·νμ κ²μλ¬Όμμ λλ μ΄λ―Έ λΉμ μ΄ λλ³΄λ€ λ μ²μ¬λΌκ³ λλ μ μμ΅λλ€.)
첫 λ²μ§Έ λ°©μ μμ μ¬μ©νμ¬ vFOV
λ₯Ό ꡬν λ€μμ΄λ₯Ό μΉ΄λ©λΌμ fov
λ§€κ° λ³μλ‘ μ¬μ©ν©λλ€.
λ΄ μ₯λ©΄μ 800 * 600μ
λλ€.
μΉ΄λ©λΌμ 거리λ 1000μ
λλ€.
곡μμμμ΄ μ«μλ₯Ό μ΄λ»κ² μ¬μ©ν©λκΉ?
vFOVμ 무μμ μ
λ ₯ν΄μΌν μ§ λͺ¨λ₯΄κ² μ΅λλ€.
λμ΄ = 2 * Math.tan ((vFOV / 2)) * dist; <-μ¬κΈ°μμ μμνλΌκ³ νλλ° vFOVλ₯Ό λ체ν΄μΌνλ μ«μλ 무μμ λκΉ?
첫 λ²μ§Έ λ°©μ μμ μ¬μ©νκ³ vFOV
νμΈμ.
vFOV = 2 * Math.atan( height / ( 2 * distance ) );
κ·Έλ° λ€μμ΄λ₯Ό μΉ΄λ©λΌμ fov
λ§€κ° λ³μλ‘ μ¬μ©ν©λλ€.
var renderWidth = 800;
var renderHeight = 600;
var cameraPosition = 1000;
var vFOV = 2 * Math.atan( renderWidth / ( 2 * cameraPosition ) );
var height = 2 * Math.tan( ( vFOV / 2 ) ) * cameraPosition;
var aspect = renderWidth / renderHeight;
var hFOV = 2 * Math.atan( Math.tan( vFOV / 2 ) * aspect );
var width = 2 * Math.tan( ( hFOV / 2 ) ) * cameraPosition;
κ²°κ³Ό:
vFOV = 0.7610127542247298μ μ ν¨ν FOVκ° μλλλ€.
var vFOV = 2 * Math.atan( renderHeight / ( 2 * cameraPosition ) );
var height = 2 * Math.tan( ( vFOV / 2 ) ) * cameraPosition;
var aspect = renderWidth / renderHeight;
var hFOV = 2 * Math.atan( Math.tan( vFOV / 2 ) * aspect );
var width = 2 * Math.tan( ( hFOV / 2 ) ) * cameraPosition;
vFOV = 0.5829135889557342λ μ ν¨ν FOVκ° μλλλ€.
λλ₯Ό μν΄ μμ λ₯Ό μμ±νκ³ μ ν¨ν FOV λ²νΈλ₯Ό μ 곡νλ μμ λ₯Ό 보μ¬μ€ μ μμ΅λκΉ?
μ μμ μ νν μ«μλ μ½ 37μ
λλ€.
λΉμ μ λ°μ΄μ¬λ¦°μμ
λμ΄ = νλ©΄ λ©μ¬μ λμ΄ = 500.
거리 = camera.z-plane.z = 1000-100 = 900.
vFOV = 2 * Math.atan (λμ΄ / (2 * 거리)) = 0.5419 λΌλμ λλ 31.04λ.
2 * Math.atan (500 / (2 * 900)) = 0.5418937006768411 λ΄ λΈλΌμ°μ (κ΅¬κΈ ν¬λ‘¬)μ λ°λΌ
μ£μ‘ν©λλ€. λΌλμμμ λλ‘μ λ³ν νμλ₯Ό 무μνμ΅λλ€. μ΄μ κ²μλ¬Όμ μ λ°μ΄νΈνμ΅λλ€.
μ λ§ κ³ λ§μ΅λλ€! :λ
ν, κ·Έκ²μ 10 νμ μ²λΌ κ±Έλ Έμ§ λ§ μ§κΈμ μλν©λλ€ :).
λ€μ ν λ² κ°μ¬λ립λλ€!
@Tobiasartz :-)
μ¨μ€νΈ λκΈλ¦¬. λΉμ μ μμ λλ€. κ°μ¬ν©λλ€.
μ΄κ²μ λ§€μ° λμμ΄λμμ΅λλ€!! @WestLangley κ°μ¬
@WestLangley κ°μ¬ν©λλ€ !!
볡μ¬μ΄μμ κ°λλ‘μ λ³νμ μΆκ°ν΄μΌνλ€λ μ¬μ€μ κΉ¨λ«λ λ° μκ°μ΄ μ’ κ±Έλ ΈκΈ° λλ¬Έμ μ¬κΈ°μ μ΅μ’
μ½λλ‘ μμ λ₯Ό μΆκ°νκ² μ΅λλ€.
var distance = 1000;
var FOV = 2 * Math.atan( window.innerHeight / ( 2 * distance ) ) * 180 / Math.PI;
var camera = new THREE.PerspectiveCamera( FOV, window.innerWidth/window.innerHeight, 0.1, distance );
camera.position.z = distance;
@ Emanuele-Spatola 곡μμ΄ μλ―Έκ° μμ΅λλ€. window.innerHeight
μλ ν½μ
λ¨μκ° μμ΅λλ€. distance
λλΆλΆμ κ·Έλ μ§ μμ΅λλ€. 보μ΄λ λμ΄μ λ¨μλ 거리μ λμΌν΄μΌν©λλ€.
Tobiasartzμ λ°μ΄μ¬λ¦°μ ν΄λΉ 곡μμΌλ‘ μ
λ°μ΄νΈνλλ° μλνλ κ² κ°μ΅λλ€.
http://jsfiddle.net/dmYgr/63/
μΊλ²μ€λ 500px, λΉνκΈ°λ 495x495μ΄λ©° μ£Όμμλ μ½ 5pxμ ν
λλ¦¬κ° μμ΅λλ€.
1000pxκ° μ ν¨ν κ±°λ¦¬κ° μλ μ΄μ λ 무μμ
λκΉ?
1000pxκ° μ ν¨ν κ±°λ¦¬κ° μλ μ΄μ λ 무μμ λκΉ?
νΌμ¬μ²΄ μμ μΉ΄λ©λΌλ₯Ό 1000 ν½μ λ°°μΉ ν μ μ΄ μμ΅λκΉ?
10 νΌνΈ λλΉμ μ₯λ©΄μ보기 μν΄ μ€μ μΉ΄λ©λΌλ₯Ό 10 νΌνΈ λ¨μ΄μ§ κ³³μ λ°°μΉ ν μ μμ΅λλ€. λ§μ°¬κ°μ§λ‘ 1000px λλΉμ μ₯λ©΄μ보기 μν΄ κ°μ μΉ΄λ©λΌλ₯Ό 1000px λ¨μ΄μ§ κ³³μ λ°°μΉ ν μ μμ΅λλ€.
λμ΄, μ₯λ©΄μ λλΉ, μΉ΄λ©λΌμ 거리λ₯Ό μ λ μ¬μ©ν©λλ€.
var distance = 1000,height=window.innerHeight,width=window.innerWidth
var diag = Math.sqrt((height*height)+(width*width))
var FOV = 2 * Math.atan( diag / ( 2 * distance ) ) * 180 / Math.PI;
var camera = new THREE.PerspectiveCamera( FOV, window.innerWidth/window.innerHeight, 0.1, distance );
camera.position.z = distance;
μ΄λ κ²νλ©΄ λμ΄> λλΉμ κ°μ μν©λ μ²λ¦¬λ©λλ€.
κ°μ₯ μ μ©ν λκΈ
μμ§ μμΌ
vFOV
λ° μΉ΄λ©λΌλ‘λΆν°μ 거리dist
κ³ λ €ν λ 보μ΄λheight
λ€μκ³Ό κ°μ΅λλ€.보μ΄λ
width
λTHREE.jsμμ μΉ΄λ©λΌμ μμΌκ° λ§€κ° λ³μλ μμ§ λ§€κ° λ³μμ λλ€.
λ κ°μ§ λ°©μ μ μΈνΈλ₯Ό μ¬μ©νμ¬ νμν vFOVλ₯Ό λ λ² κ³μ°νκ³ λ ν° λ΅μ μ νν©λλ€.