2017-06-16 9 views
-1

var FrontSide = new materialClass({ color: 0xffffff, map: THREE.ImageUtils.loadTexture('front.jpg') });Three.js:画像をアップロードする際、起動

で画像を回転させることで、私は90度で、すぐにそれを回転したいです。何をする必要があり、どのようにそれを行うことができますか?

お知らせください。

+1

何をしようとしていますか? _texture_を回転させますか? _オブジェクト_を回転させますか? _何を試しましたか? ['どうすれば良い質問をしますか?](https://stackoverflow.com/help/how-to-ask)をご覧ください。また、関連するコード、試したコード、エラーを含めてください。参照:[最小限で完全で検証可能なサンプルを作成する方法](https://stackoverflow.com/help/mcve) – TheJim01

+0

[このSOの回答](https://stackoverflow.com/a/16747250/4045502)をお読みください。オプションとして、テクスチャを回転させるために[THREE.ShaderMaterial()]と[fragment shader](https://www.shadertoy.com/view/XlsGWf)を使用することもできます。 – prisoner849

+0

テクスチャに関するスピーチ... 良い例がありましたが、 "MakeRotate"などの簡単なメソッドがあると思いました – MetaVoffka

答えて

0

enter image description here

移植されたシェーダ(shadertoyからthree.jsする):

var vertShader = ` 
    varying vec2 vUv; 
    void main() 
    { 
     vUv = uv; 
     vec4 mvPosition = modelViewMatrix * vec4(position, 1.0); 
     gl_Position = projectionMatrix * mvPosition; 
    } 
`; 

var fragShader = ` 
    uniform float iGlobalTime; 
    uniform sampler2D iChannel0; 
    varying vec2 vUv; 

    void main(){ 
    vec2 uv = vUv; 
    float rot = iGlobalTime; //radians(90); 
    uv-=.5; 

    mat2 m = mat2(cos(rot), -sin(rot), sin(rot), cos(rot)); 
    uv = m * uv; 
    uv+=.5; 
    gl_FragColor = texture2D(iChannel0, uv); 
    } 
`; 

と制服をそれのために:

var uniforms = { 
    iGlobalTime: { 
    value: 1.0 
    }, 
    iChannel0: { 
    value: new THREE.Texture() 
    } 
}; 

はその後、我々はこのように、テクスチャをロードします:

var textureLoader = new THREE.TextureLoader(); 
textureLoader.setCrossOrigin(""); 
textureLoader.load("https://threejs.org/examples/textures/UV_Grid_Sm.jpg", function(texture){ 
    texture.wrapS = texture.wrapT = THREE.RepeatWrapping; 
    uniforms.iChannel0.value = texture; 
}); 

は、それらを一緒に収集します。

var planeMat = new THREE.ShaderMaterial({ 
    uniforms: uniforms, 
    vertexShader: vertShader, 
    fragmentShader: fragShader 
}); 
var planeGeom = new THREE.PlaneGeometry(2, 2); 
var plane = new THREE.Mesh(planeGeom, planeMat); 
scene.add(plane); 

そしてアニメーションループは次のようになります。

var clock = new THREE.Clock(); 
var delta = 0; 

render(); 
function render() { 
    requestAnimationFrame(render); 
    delta += clock.getDelta(); 
    uniforms.iGlobalTime.value = delta; 
    renderer.render(scene, camera); 
} 

three.js R85

jsfiddle

関連する問題