Three.js png图片透明问题

发布于 2022-09-12 04:04:22 字数 3040 浏览 38 评论 0

用threejs 做了一个圆环,然后用一张png当材质,然后一直旋转,但是有一些角度透明的地方居然不透明了,这是什么原因,各位大佬

image
上图注意左边的箭头,是透明的

image
旋转到右边的时候却不透明了

image
原图

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>three.js webgl - loaders - OBJ loader</title>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
        <link type="text/css" rel="stylesheet" href="/css/main.css">
    </head>

    <body>

        <script type="module">

            import * as THREE from '/js/three.module.js';

            var container;

            var camera, scene, renderer;

            var cube;

            init();
            animate();


            function init() {

                container = document.createElement( 'div' );
                document.body.appendChild( container );

                camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 2000 );
                camera.position.set( 40, 10, 40 );
                camera.lookAt( 0, 0, 0 );

                // scene

                scene = new THREE.Scene();

                var pointLight = new THREE.PointLight( 0xffffff, 1 );
                camera.add( pointLight );
                scene.add( camera );

                var axesHelper = new THREE.AxesHelper( 150 );
                // 和网格模型Mesh一样,AxesHelper你也可以理解为一个模型对象,需要插入到场景中
                scene.add( axesHelper );


                var texture = THREE.ImageUtils.loadTexture('/js/yuan2.png', {}, function() {
                    renderer.render(scene, camera);
                });

                // 材质
                var material = new THREE.MeshLambertMaterial({
                    map: texture,
                    color:0xffff00,
                });

                material.side = THREE.DoubleSide
                material.transparent = true

                // 几何体
                cube = new THREE.Mesh(new THREE.CylinderGeometry(10, 10, 3, 32, 1, true), material);
                scene.add(cube);

                renderer = new THREE.WebGLRenderer();
                renderer.setPixelRatio( window.devicePixelRatio );
                renderer.setSize( window.innerWidth, window.innerHeight );
                renderer.setClearColor(0xeeeeee,1.0);
                container.appendChild( renderer.domElement );


            }

            function animate() {

                requestAnimationFrame( animate );
                render();

            }

            function render() {

                if (cube !== undefined) {
                    // console.log(1);
                    cube.rotation.y += 0.005
                }

                renderer.render( scene, camera );

            }

        </script>

    </body>
</html>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文