Three.js学习之文字形状及自定义形状
1.文字形状
说起3d文字想起了早年word里的一些艺术字
那么TextGeometry
可以用来创建三维的文字形状。
使用文字形状需要下载和引用额外的字体库。这里,我们以 helvetiker
字体为例。
引用
<script type="text/javascript" src="你的路径/helvetiker_regular.typeface.json"></script>
TextGeometry的构造函数是
THREE.TextGeometry(text, parameters)
text是文字字符串;
parameters是以下参数组成的对象
· size字号大小,一般为大写字母的高度
· height文字的厚度
· curveSegments弧线分段数,使得文字的曲线更加光滑
· font字体,默认是'helvetiker',需对应引用的字体文件
· weight值为'normal'或'bold',表示是否加粗
· style值为'normal'或'italics',表示是否斜体
· bevelEnabled布尔值,是否使用倒角,意为在边缘处斜切
· bevelThickness倒角厚度
· bevelSize倒角宽度
创建一个三维文字new THREE.TextGeometry('Hello', {size: 1, height: 1}),
其效果为
可以适当调整材质和光照以达到期望效果
//金属发亮物体 var material = new THREE.MeshPhongMaterial({ color: 0xffff00, specular:0xffff00, //指定该材质的光亮程度及其高光部分的颜色,如果设置成和color属性相同的颜色,则会得到另一个更加类似金属的材质,如果设置成grey灰色,则看起来像塑料 shininess:0 //指定高光部分的亮度,默认值为30 }); //方向光 var light = new THREE.DirectionalLight(0xffffff); light.position.set(-5, 10, 5); scene.add(light);
源码
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>3.js测试六</title> </head> <body onload="init()"> <canvas id="mainCanvas" width="400px" height="300px" ></canvas> </body> <script type="text/javascript" src="js/three.min.js"></script> <!-- Find more information at https://github./mrdoob/three.js/tree/master/examples/fonts --> <script type="text/javascript"> function init() { var renderer = new THREE.WebGLRenderer({ canvas: document.getElementById('mainCanvas') }); renderer.setClearColor(0x000000); var scene = new THREE.Scene(); // camera var camera = new THREE.OrthographicCamera(-2.5, 2.5, 1.875, -1.875, 0.1, 100); camera.position.set(5, 5, 20); camera.lookAt(new THREE.Vector3(1, 0, 0)); scene.add(camera); // var material = new THREE.MeshBasicMaterial({ // color: 0xffff00, // wireframe: true // }); //金属发亮物体 var material = new THREE.MeshPhongMaterial({ color: 0xffff00, specular:0xffff00, //指定该材质的光亮程度及其高光部分的颜色,如果设置成和color属性相同的颜色,则会得到另一个更加类似金属的材质,如果设置成grey灰色,则看起来像塑料 shininess:0 //指定高光部分的亮度,默认值为30 }); //方向光 var light = new THREE.DirectionalLight(0xffffff); light.position.set(-5, 10, 5); scene.add(light); // load font var loader = new THREE.FontLoader(); loader.load('./helvetiker_regular.typeface.json', function(font) { var mesh = new THREE.Mesh(new THREE.TextGeometry('Hello', { font: font, size: 1, height: 1 }), material); scene.add(mesh); // render renderer.render(scene, camera); }); } </script> </html>
2.自定义形状
对于Three.js没有提供的形状,可以提供自定义形状来创建。
由于自定义形状需要手动指定每个顶点位置,以及顶点连接情况,如果该形状非常复杂,程序员的计算量就会比较大。在这种情况下,建议在3ds Max之类的建模软件中创建模型,然后使用Three.js导入到场景中,这样会更高效方便。
自定义形状使用的是Geometry
类,它是其他如CubeGeometry
、SphereGeometry
等几何形状的父类,其构造函数是
THREE.Geometry()
初始化一个几何形状,然后设置顶点位置以及顶点连接情况
源码
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>3.js测试六-二</title> </head> <body onload="init()"> <canvas id="mainCanvas" width="400px" height="300px" ></canvas> </body> <script type="text/javascript" src="js/three.js"></script> <script type="text/javascript"> function init() { var renderer = new THREE.WebGLRenderer({ canvas: document.getElementById('mainCanvas') }); renderer.setClearColor(0x000000); var scene = new THREE.Scene(); // camera var camera = new THREE.OrthographicCamera(-5, 5, 3.75, -3.75, 0.1, 100); camera.position.set(25, 25, 25); camera.lookAt(new THREE.Vector3(0, 0, 0)); scene.add(camera); var material = new THREE.MeshBasicMaterial({ color: 0xffff00, wireframe: true }); // 初始化几何形状 var geometry = new THREE.Geometry(); // 设置顶点位置 // 顶部4顶点 geometry.vertices.push(new THREE.Vector3(-1, 2, -1)); geometry.vertices.push(new THREE.Vector3(1, 2, -1)); geometry.vertices.push(new THREE.Vector3(1, 2, 1)); geometry.vertices.push(new THREE.Vector3(-1, 2, 1)); // 底部4顶点 geometry.vertices.push(new THREE.Vector3(-2, 0, -2)); geometry.vertices.push(new THREE.Vector3(2, 0, -2)); geometry.vertices.push(new THREE.Vector3(2, 0, 2)); geometry.vertices.push(new THREE.Vector3(-2, 0, 2)); // 设置顶点连接情况 // 顶面 geometry.faces.push(new THREE.Face3(0, 1, 3)); geometry.faces.push(new THREE.Face3(1, 2, 3)); // geometry.faces.push(new THREE.Face4(0, 1, 2, 3)); // 底面 geometry.faces.push(new THREE.Face3(4, 5, 6)); geometry.faces.push(new THREE.Face3(5, 6, 7)); // geometry.faces.push(new THREE.Face4(4, 5, 6, 7)); // 侧面 geometry.faces.push(new THREE.Face3(1, 5, 6)); geometry.faces.push(new THREE.Face3(6, 2, 1)); geometry.faces.push(new THREE.Face3(2, 6, 7)); geometry.faces.push(new THREE.Face3(7, 3, 2)); geometry.faces.push(new THREE.Face3(3, 7, 0)); geometry.faces.push(new THREE.Face3(7, 4, 0)); geometry.faces.push(new THREE.Face3(0, 4, 5)); geometry.faces.push(new THREE.Face3(0, 5, 1)); // // 四个顶点组成的面 // geometry.faces.push(new THREE.Face4(0, 1, 5, 4)); // geometry.faces.push(new THREE.Face4(1, 2, 6, 5)); // geometry.faces.push(new THREE.Face4(2, 3, 7, 6)); // geometry.faces.push(new THREE.Face4(3, 0, 4, 7)); var mesh = new THREE.Mesh(geometry, material); scene.add(mesh); // render renderer.render(scene, camera); } </script> </html>
需要注意的是,new THREE.Vector3(-1, 2, -1)
创建一个矢量,作为顶点位置追加到geometry.vertices
数组中。
而由new THREE.Face3(0, 1, 2)
创建一个三个顶点组成的面,追加到geometry.faces
数组中。三个参数分别是三个顶点在geometry.vertices
中的序号。如果需要设置由四个顶点组成的面片,可以类似地使用THREE.Face4
。
//顶面 geometry.faces.push(new THREE.Face4(0, 1, 2, 3)); //底面 geometry.faces.push(new THREE.Face4(4, 5, 6, 7)); //四个侧面 geometry.faces.push(new THREE.Face4(0, 1, 5, 4)); geometry.faces.push(new THREE.Face4(1, 2, 6, 5)); geometry.faces.push(new THREE.Face4(2, 3, 7, 6)); geometry.faces.push(new THREE.Face4(3, 0, 4, 7));
以上就是长沙网络推广为大家整理的Three.js学习之文字形状及自定义形状的全部内容,之前长沙网络推广也整理了几篇关于Three.js的相关文章,有需要的可以通过狼蚁网站SEO优化相关文章的链接查看,希望能帮到学习Three.js的大家。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程