Threejs에서 정거리 원통도법
구현 방법 여기 를 참고로 했다(라고 할까 거의 파크리다). PostProcessing에서 사용할 수 있도록 THREE.ShaderPass에 전달할 수있는 셰이더로 다시 작성했습니다. THREE.CubeCamera로부터, samplerCube(큐브상의 텍스처)를 얻을 수 있으므로, 그것을 glsl의 textureCube라고 하는 메소드를 사용해 색 취득 & 평면에 매핑 하고 있다(같다).
//ref https://github.com/spite/THREE.CubemapToEquirectangular
THREE.EquirectanglarShader = {
uniforms: {
"map": { type: "t", value: null }
},
vertexShader: [
"varying vec2 vUv;",
"void main() {",
"vUv = vec2( 1.- uv.x, uv.y );",
"gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
"}"
].join("\n"),
fragmentShader: [
"uniform samplerCube map;",
"varying vec2 vUv;",
"#define M_PI 3.1415926535897932384626433832795",
"void main() {",
"vec2 uv = vUv;",
"float longitude = uv.x * 2. * M_PI - M_PI + M_PI / 2.;",
"float latitude = uv.y * M_PI;",
"vec3 dir = vec3(",
"- sin( longitude ) * sin( latitude ),",
"cos( latitude ),",
"- cos( longitude ) * sin( latitude )",
");",
"normalize( dir );",
"gl_FragColor = vec4( textureCube( map, dir ).rgb, 1. );",
"}"
].join("\n")
};
사용법
//準備
equirectanglerEffect = new THREE.ShaderPass( THREE.EquirectanglarShader );
effectComposer.addPass( equirectanglerEffect );
//毎フレームcube cameraの結果を渡す
cubeCamera.updateCubeMap(renderer,scene);
equirectanglerEffect.uniforms[ 'map' ].value = cubeCamera.renderTarget;
샘플 코드
Reference
이 문제에 관하여(Threejs에서 정거리 원통도법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kitasenjudesign/items/e1240d1c7fe0c5689ce8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)