IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Three.js案例从1到2(3)让调入模型按比例缩放,复制,漫天飞舞 -> 正文阅读

[JavaScript知识库]Three.js案例从1到2(3)让调入模型按比例缩放,复制,漫天飞舞

下一步应该是碰撞检测

1. 调入模型的时候发现元器件模型直接用3D库的wrl文件不行,需要在KICAD里转换一下,这个问题后续处理,这样处理成板子就会带一个边框。?

2. 为方便调试,加入了一个control的选择菜单

1)定义菜单选项

const components = [
    'BatteryHolder',
    'BUTTON1',
    'Buzzer1',
    'CAP1',
    'Crystal1',
    'Diode1',
    'ESP-WROOM-02',
    'LED1',
    'LED4SEG',
    'RES2',
    'SW1'
    
];

2)定义GUI控件并加入处理逻辑,重新选择的时候,清除原有已调入的对象

function createGui(){


const gui = new GUI();
gui.add( params, 'asset', components ).onChange( function ( value ) {

    if ( vrmlScene ) {

        vrmlScene.traverse( function ( object ) {

            if ( object.material ) object.material.dispose();
            if ( object.material && object.material.map ) object.material.map.dispose();
            if ( object.geometry ) object.geometry.dispose();

        } );

        scene.remove( vrmlScene );

    }

    loadAsset( value );

});

}

3)菜单选择后调入指定对象模型


function loadAsset( asset ) {
var newloader=new VRMLLoader();
    newloader.load( './models/component/' + asset + '.wrl', function ( object ) {

    vrmlScene = object;
    scene.add( object );
   
} );

}

?3. 调入模型后的大小,方位处理

大小,调用scale.set方法

object.scale.set(10,10,10);

复制

var object1=object.clone();

设置位置坐标

object1.position.set(100,100,100);

设置角度

obj.rotation.z = a + Math.PI / 2;

4. 把模型设计成容易组合的group

定义个components群组的全局变量

var components = new THREE.Group();

这里有点意思的是,还用到了递归调用,直到列表中最后一个元件,才把group加入到scene

// 创建元件组
function createComponents(){
    
//    while(count<Components.length)
//    {
    var newloader=new VRMLLoader();
    
    newloader.load( './models/component/'+Components[count]+'.wrl', function(obj) 
 {
    var stepAngle = Math.PI * 2 / Components.length;
    var a = stepAngle * count;
        var h = 150 + Math.random() * 200;
        obj.position.y = Math.sin(a) * h;
        obj.position.x = Math.cos(a) * h;
        obj.position.z = -200 - Math.random() * 200;
        obj.rotation.z = a + Math.PI / 2;
        var s = 1 + Math.random() * 2;
        obj.scale.set(5, 5, 5);
  
  components.add(obj);
  console.log("component No: ",count);
  count++;
  if(count<Components.length){
      createComponents();}

  else scene.add(components);
  
  
 
},

5. 形成转动飞舞的效果

在animate() 里加入坐标变换

components.rotation.z += .01;

?效果出来了

?

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-11 22:04:44  更:2022-03-11 22:07:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:07:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码