shader01_texture简单应用

需要电子档书籍或者源码可以Q群:828202939   希望可以和大家一起学习、一起进步!!

如有错别字或有理解不到位的地方,可以留言或者加微信15250969798,博主会及时修改!!!!!

最近博主在学习shader,就随手记了下来!!

本博客适合对顶点、片元着色器的基础有一定了解,如果不了解请看博主的WebGL系列博客!

这里是官方文档ShaderMaterial

今天学习shader的texture简单应用

效果图示:

代码如下:

<!doctype html>
<html lang="cn">

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>shader01_texture简单应用</title>
    <script src="../../../build/three.js"></script>
    <script src="../../js/controls/OrbitControls.js"></script>
    <script type="x-shader/x-fragment" id="fragmentShader">
        //获取纹理
        uniform sampler2D texture1;
        //纹理坐标
        varying vec2 vUv;

        void main(void){
        //texture2D()获取纹素
            gl_FragColor = texture2D(texture1, vUv);
        }

    </script>
    <script id="vertexShader" type="x-shader/x-vertex">
        varying vec2 vUv;
        void main()
            {
                vUv = uv;
                vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );
                //projectionMatrix * mvPosition; 最终得到MVP矩阵
                gl_Position = projectionMatrix * mvPosition;

            }
    </script>
    <style>
        body {
            background-color: #000;
            margin: 0px;
            overflow: hidden;
        }
    </style>
</head>

<body>
    <div id="Stats-output"></div>
    <script>
        var scene, camera, renderer,controls;
        var mesh;
        scene = new THREE.Scene();
        camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 10000);
        camera.position.set(0, 0, 10);
        camera.lookAt(scene.position);

        renderer = new THREE.WebGLRenderer({
            antialias: true
        });
        renderer.setClearColor(0xffffff);
        renderer.setSize(window.innerWidth, window.innerHeight);
        document.body.appendChild(renderer.domElement);
        window.addEventListener('resize', onResize, false);

        var controls = new THREE.OrbitControls(camera);
        var textureLoader = new THREE.TextureLoader();

        //配置shaderMaterial中的uniforms属性
        var uniforms = {
            texture1: {
                value: textureLoader.load('../../textures/cube/Bridge2/negz.jpg')
            }
        };
        //设置平铺方式
        uniforms.texture1.value.warpS = uniforms.texture1.value.warpT = THREE.RepeatWrapping;

        // BoxGeometry( width, height, depth, widthSegments, heightSegments, depthSegments )
        var geometry = new THREE.BoxGeometry(5, 5, 5, 3, 3, 3);
        var Material = new THREE.ShaderMaterial({
            uniforms: uniforms,
            vertexShader: document.getElementById('vertexShader').textContent,
            fragmentShader: document.getElementById('fragmentShader').textContent,
            side: THREE.DoubleSide
        });
         mesh = new THREE.Mesh(geometry, Material);
        scene.add(mesh);

        function onResize() {
            renderer.setSize(window.innerWidth, window.innerHeight);
            camera.aspect = (window.innerWidth / window.innerHeight);
            camera.updateProjectionMatrix();
        }

        function render() {
            requestAnimationFrame(render);
            if (controls) controls.update();
            mesh.rotation.y += 0.005;
            renderer.render(scene, camera);
        }

        render();
    </script>
</body>

</html>

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

webgl_谷子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值