
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдПрдХ 3D рдореЙрдирд┐рдЯрд░ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдХрд╣рд╛рдиреА рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдкрд╣рд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдПрдХ рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рд╕реЗ (рд╡реАрдПрд▓рд╕реА рдкреНрд▓реЗрдпрд░ рдореЗрдВ) рд╕реНрдЯреАрд░рд┐рдпреЛ рдЗрдореЗрдЬ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдм рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╕реАрдзреЗ рд╕реНрдЯреАрд░рд┐рдпреЛ рдЗрдореЗрдЬ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдбреЗрдореЛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрджреНрднреБрдд
рдереНрд░реАрдЬреЗрдЬ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд▓рд┐рдпрд╛, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИрдмреЗ рдкрд░ рдмрд╣реБрдд рдХреБрдЫ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рд╡реЗрдмрдЬреАрдПрд▓ рдкрд░ рд╕реБрдВрджрд░ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЬрд▓реНрджреА рдФрд░ рд╕рд░рд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдиреАрдЪреЗ рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рдЧрд╣рд░реА 3 рдбреА рддрд╕реНрд╡реАрд░ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ рдФрд░ рдПрдХ рдлреНрд▓реИрдЯ рдкреНрд░рдХреНрд╖реЗрдкрдг рдирд╣реАрдВред
рд╣рдо рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ
Three.js рд╕реЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд▓реЗрддреЗ рд╣реИрдВред
- рдпрд╣ рдПрдХ
рдШреВрдордиреЗ рд╡рд╛рд▓рд╛ рдШрди рд╣реЛрдЧрд╛ ред 3D рдЗрдлрд╝реЗрдХреНрдЯ рдХреЛ рдЙрдЬреНрдЬрд╡рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП - рдореИрдВрдиреЗ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреА рдУрд░ рдПрдХ рдФрд░ рдЖрдЧреЗ рдХреА рдЧрддрд┐ рдХреЛ рд░реЛрдЯреЗрд╢рди рдореЗрдВ рдЬреЛрдбрд╝рд╛ред
рд╣рдорд╛рд░реА рддреНрд░рд┐-рдЖрдпрд╛рдореА рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП 2 foreshortenings рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рд╣рдо рдРрд╕реА рдЪрд╛рд▓ рдХрд░рддреЗ рд╣реИрдВ
рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рдХреЗ рд░реЗрдВрдбрд░ рд▓реВрдк рдореЗрдВ:
- рдХреИрдорд░реЗ рд╕реЗ рджреГрд╢реНрдп рдХреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдмрдирд╛рд╡рдЯ рд╕реЗ рдЦреАрдВрдЪреЗ
- рдХреИрдорд░рд╛ рд▓реЗ рдЬрд╛рдПрдБ (рдЬреИрд╕реЗ рдХрд┐ рджреВрд╕рд░реА рдЖрдБрдЦ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ)
- рджреГрд╢реНрдп рдХреЛ рдПрдХ рдЕрд▓рдЧ рдмрдирд╛рд╡рдЯ рдореЗрдВ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдВ
- рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╛рдИрдВ рдФрд░ рджрд╛рдИрдВ рдЖрдВрдЦреЛрдВ рдХреЗ рд▓рд┐рдП рдЪрд┐рддреНрд░ рд╣реИрдВ - рд╣рдореЗрдВ рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдорд┐рд╢реНрд░рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдмрд╛рдИрдВ рдЖрдВрдЦ рдмрд╛рдИрдВ рддрд╕реНрд╡реАрд░ рдФрд░ рджрд╛рдИрдВ рдЖрдВрдЦ рдХреЛ рджреЗрдЦ рд╕рдХреЗ - 3 рдбреА рдореЙрдирд┐рдЯрд░ рдкрд░ рджрд╛рдИрдВ рдУрд░ред
рдЕрдм рдЗрд╕реЗ рдХреЛрдб рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд░реЗрдВ
(webgl_geometry_cube рдЙрджрд╛рд╣рд░рдг рдХреЗ рдореВрд▓ рдХреЛрдб рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ; рдореИрдВ рдХреЗрд╡рд▓ рд╡рд╣реА рдЬреЛрдбрд╝реВрдВрдЧрд╛ рдЬреЛ рдореИрдВрдиреЗ рдЬреЛрдбрд╝рд╛ рд╣реИ)
рдЕрдкрдбреЗрдЯ: рдбреЗрдореЛ рдореЗрдВ рдПрдирд╛рдЧреНрд▓рд┐рдлрд╝ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЕрдм рдЖрдк рдЗрд╕реЗ рд▓рд╛рд▓-рдиреАрд▓реЗ рдЪрд╢реНрдореЗ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рдореЙрдирд┐рдЯрд░ рдкрд░ рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВред
shaders
рдЙрдирдореЗрдВ рд╣рдо рд╕реНрдХреНрд░реАрди рдХреЗ рдкрд┐рдХреНрд╕рд▓ рдореЗрдВ 2 рдмрдирд╛рд╡рдЯ рдФрд░ рдлреНрд░реЗрдо рдХреА рдКрдБрдЪрд╛рдИ рдХреЛ рдкрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ
рд╢реАрд░реНрд╖ shader рдмрд┐рдВрджреБ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкрд┐рдХреНрд╕реЗрд▓ shader рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ
рд╡рд╣рд╛рдВ рд╣рдо рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рд░реЗрдЦрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рд╣рдо рдПрдХ рдмрдирд╛рд╡рдЯ рд▓реЗрддреЗ рд╣реИрдВ - рд╡рд┐рд╖рдо рд░реЗрдЦрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ (
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛ рд╣реИ рдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ 3 рдбреА рдЪрд┐рддреНрд░ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдХреИрд╕реЗ рджреЗрддрд╛ рд╣реИ)
<script id="fragmentShader" type="x-shader/x-fragment"> varying vec2 vUv; uniform sampler2D rRacurs; uniform sampler2D lRacurs; uniform float height; void main() { //odd from left racurs, even from right float d = mod((floor(height*(vUv.y+1.0))),2.0); //odd or even, height - is new uniform to get viewport height if(d > 0.1) { gl_FragColor = texture2D( rRacurs, vUv ); } else { gl_FragColor = texture2D( lRacurs, vUv ); } } </script> <script id="vertexShader" type="x-shader/x-vertex"> varying vec2 vUv; void main() { vUv = uv; gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); } </script>
рдЕрдм рд╣рдорд╛рд░реЗ рджреГрд╢реНрдп рдХреЛ рдбреНрд░рд╛ рдХрд░реЗрдВ
var x = camera.position.x; var faceWidth = 5;
рд╡рд╣ рд╕рдм рд╣реИред
рдирд┐рд╖реНрдХреНрд░рд┐рдп 3 рдбреА рдореЙрдирд┐рдЯрд░ рдХреЗ рдЦреБрд╢ рдорд╛рд▓рд┐рдХ
рдбреЗрдореЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ (рдПрдХ рдирд┐рдпрдорд┐рдд рдореЙрдирд┐рдЯрд░ рдкрд░, рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрддрдирд╛ рд╕реБрдВрджрд░ рдирд╣реАрдВ рд╣реИ)ред рдХреЛрдб
рдЬреАрдердм рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХреЛрдб рдХреА рейреж рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди andреж рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИрдВ - рдФрд░ рдЖрдкрдХреЛ рей рдбреА рдЪрд┐рддреНрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдлреЗрд╕рд╡рд╛рдЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдЬрд┐рддрдирд╛ рдмрдбрд╝рд╛ рдпрд╣ рд╣реИ - 3 рдбреА рдЬрд┐рддрдирд╛ рдордЬрдмреВрдд, рд▓реЗрдХрд┐рди рдЬреНрдпрд╛рдорд┐рддреАрдп рд╡рд┐рдХреГрддрд┐рдпрд╛рдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред
рдЗрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рддреАрди .js (WebGL) рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдХрд┐рд╕реА рднреА рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ 3D рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ
рдЙрд╕ рдЧреЗрдо рдХрд╛ рд▓рд┐рдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЕрдзреНрдпрдпрди рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛ - 3 рдбреА рдореЗрдВ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред
рдЕрдкрдбреЗрдЯ: рдЗрд╕ рдбреЗрдореЛ рдореЗрдВ рдПрдирд╛рдлрд┐рдлрд╝ рдЗрдлреЗрдХреНрдЯ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП KOLANICH рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж - рдЕрдм рдЖрдк рдЗрд╕реЗ рд▓рд╛рд▓-рдиреАрд▓реЗ рдЪрд╢реНрдореЗ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рдореЙрдирд┐рдЯрд░ рдкрд░ рджреЗрдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЬрд╛рдБрдЪ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХреЛрдИ рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмрдЧ рдкрд╛рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдкреБрд▓-рдЕрдиреБрд░реЛрдз рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реВрдБрдЧрд╛ред