<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>three.js从入门到精通系列教程015 - three.js使用TextGeometry绘制变形三维文字</title>
    <script src="ThreeJS/three.js"></script>
    <script src="ThreeJS/jquery.js"></script>
</head>

<body>
    <center id="myContainer"></center>
    <script type="text/javascript">
        //创建渲染器
        var myRenderer = new THREE.WebGLRenderer({ antialias: true });
        myRenderer.setSize(window.innerWidth, window.innerHeight);
        $("#myContainer").append(myRenderer.domElement);
        var myScene = new THREE.Scene();
        myScene.background = new THREE.Color('white');
        var myCamera = new THREE.PerspectiveCamera(45,
            window.innerWidth / window.innerHeight, 0.1, 1000);
        myCamera.position.set(0, 40, 700);
        myScene.add(myCamera);
        //加载字库并绘制字母
        var myFontLoader = new THREE.FontLoader();
        /*
          THREE.TextGeometry(text, parameters)
          text是文字字符串;
          parameters是以下参数组成的对象:
            · size:字号大小,一般为大写字母的高度
            · height:文字的厚度
            · curveSegments:弧线分段数,使得文字的曲线更加光滑
            · font:字体,默认是'helvetiker',需对应引用的字体文件
            · weight:值为'normal'或'bold',表示是否加粗
            · style:值为'normal'或'italics',表示是否斜体
            · bevelEnabled:布尔值,是否使用倒角,意为在边缘处斜切
            · bevelThickness:倒角厚度
            · bevelSize:倒角宽度    
        */
        myFontLoader.load('Data/optimer_bold.typeface.json', function (font) {
            var myGeometry = new THREE.TextGeometry('hello', { font: font, size: 80 });
            //计算当前几何体的范围
            myGeometry.computeBoundingBox();
            //计算字母(几何体)当前中心的偏移量
            var myOffsetX = (myGeometry.boundingBox.max.x
                - myGeometry.boundingBox.min.x) / 2;
            var myOffsetY = (myGeometry.boundingBox.max.y
                - myGeometry.boundingBox.min.y) / 2;
            var myMaterial = new THREE.MeshBasicMaterial({ color: 0x0000ff });
            var myTextMesh = new THREE.Mesh(myGeometry, myMaterial);
            myTextMesh.position.x = myGeometry.boundingBox.min.x - myOffsetX;
            myTextMesh.position.y = myGeometry.boundingBox.min.y + myOffsetY;
            myScene.add(myTextMesh);
        });
        //渲染绘制的字母
        animate();
        function animate() {
            requestAnimationFrame(animate);
            myCamera.lookAt(new THREE.Vector3(0, 100, 0));
            myRenderer.render(myScene, myCamera);
        }
    </script>
</body>

</html>

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐