3

Three.js r55を使用して、バンプマップを平面に適用し、漠然と感じられるようなサーフェスを作成しようとしています。

これが私のコードです:

var mapHeight = THREE.ImageUtils.loadTexture("images/felt.png");
mapHeight.repeat.set(2, 2);
mapHeight.wrapS = mapHeight.wrapT = THREE.RepeatWrapping;
mapHeight.format = THREE.RGBFormat;

var groundMaterial = new THREE.MeshPhongMaterial({
    ambient: 0x008800, color: 0x008800, specular: 0x888888,
    shininess: 25, bumpMap: mapHeight, bumpScale: 10, metal: false
} );

scene.add(new THREE.Mesh(new THREE.PlaneGeometry(0.3, 0.3), groundMaterial));

x/y軸に沿って2回繰り返すようにテクスチャを設定したことに注目してください。しかし、私が見ているのは、1つの象限のテクスチャのみを適用しています。

私はこれをクランプ/リピートラッピング(またはそれが呼ばれるもの)で期待しますが、私はRepeatWrappingここで要求しました。

バンプマップを平面上で任意の回数正しく繰り返すにはどうすればよいですか?


編集-フルコード

簡単な複製ケースを作り始めました。これは非常に最小限であり、下の画像を(わずかに異なるカメラアングルから)再現します。出力にも同じ問題があります。

<!DOCTYPE html>
<html>
<head>
    <script src="scripts/libs/three.min.js" type="text/javascript"></script>
</head>
<body>
<div id="scene-container"></div>

<script>

    init();

    function init() {
        var camera, scene, renderer;

        scene = new THREE.Scene();
        scene.add( new THREE.AmbientLight( 0x555555 ) );

        var light = new THREE.DirectionalLight( 0x555555 );
        light.position.set( 0, 0, 10 );
        scene.add( light );

        var bumpMapTexture = THREE.ImageUtils.loadTexture( "images/felt.png", undefined, function () {
            requestAnimationFrame( function () {
                // render once texture has loaded
                renderer.render( scene, camera );
            } );
        } );
        bumpMapTexture.repeat.set( 2, 2 );
        bumpMapTexture.wrapS = bumpMapTexture.wrapT = THREE.RepeatWrapping;

        var groundMaterial = new THREE.MeshPhongMaterial( {
            ambient: 0x00AA00,
            color: 0x00AA00,
            bumpMap: bumpMapTexture
        } );

        scene.add( new THREE.Mesh( new THREE.PlaneGeometry( 3, 3 ), groundMaterial ) );

        camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.01, 100000 );
        camera.position.set( 0, 0, 3 );
        camera.lookAt( new THREE.Vector3( 0, 0, 0 ) );

        renderer = new THREE.WebGLRenderer( { antialias: true } );
        renderer.setSize( window.innerWidth, window.innerHeight );//        renderer.render(scene, camera);

        document.getElementById( 'scene-container' ).appendChild( renderer.domElement );
    }

</script>

</body>
</html>

これはThree.jsr55(縮小)にリンクしています。

助けていただければ幸いです。

4

1 に答える 1

6

テクスチャを繰り返したい場合、各次元のピクセル単位のサイズは 2 の累乗でなければなりません (例: 512 x 256 )。

拡散反射光mapとがある場合bumpMapは、同じoffset/repeat設定にする必要があります。たとえば、この回答を参照してください。

three.js r.55

于 2013-02-15T01:32:55.430 に答える