PLOY3D引擎系列教程——创建场景3D对象

PLOY3D引擎系列教程——创建场景3D对象

大多数情况下,我们使用引擎编辑器创建资源包、创建模型预制件以及搭建复杂的场景,然后在运行端加载资源包、实例化预制件或者直接加载完整场景。后续教程会介绍资源包的使用,本章详细介绍如果通过API一步步创建场景3D对象。具体包括创建贴图Texture2D,创建材质Material,创建网格Mesh,创建网格渲染器组件Mesh Renderer,创建物理碰撞组件Collider,创建3D对象等。

PLOY3D演示程序截图
提示:PLOY3D引擎是卜云 PLOYCLOUD推出的基于WebGPU、WebGL2.0、WebAssembly和TypeScript开发的原生Web3D、AR和VR引擎。获取引擎SDK和样例代码请访问gitee以及查阅api文档 。更多引擎和引擎编辑器演示视频请关注抖音号。文章可转载,谢谢!

系列目录



一、创建场景3D对象

所有代码添加在WebApp.InitScene方法中。

大概流程可分为以下步骤:

  1. 加载图片创建贴图;
  2. 基于贴图和材质属性值创建材质;
  3. 创建网格;
  4. 创建空3D对象并初始化变换组件;
  5. 为对象添加网格变换组件(绑定网格、设置材质);
  6. 为对象添加物理碰撞组件;

二、步骤

1.添加水平面网格对象

添加水平面网格对象,有助于我们确认其它对象的空间位置。

const horiObj = await Engine.scenes.CreateHorizontalGrid(100, 100);

// 为水平面网格对象添加碰撞组件,使其能接住空中落下的对象
const horiCollider = await Engine.resources.CreateCollider({
    type: "rigid",
    parent: null,
    parent_: horiObj,
    rigid: {
        shapeType: "box",
        mass: 0,
        extents: [50, 0.01, 50],
        position: [0, 0, 0]
    }
});

2.添加变换组件控制器

添加变换组件控制器,添加后可以点击选中对象,然后进行平移、旋转、缩放操作。

await Engine.scenes.CreateTransformCtrl();

3.创建立方块网格

仅创建1个网格,所有对象共享该网格。

// 立方块大小
const cubeSize = 0.4;

// 立方块网格
const cubeMesh = await Engine.resources.CreateMesh({
    operator: "box",
    box: {
        width: cubeSize,
        height: cubeSize,
        depth: cubeSize,
        widthSegments: 1,
        heightSegments: 1,
        depthSegments: 1
    }
});

4.实现立方块创建方法

实现一个共享方法,在不同的位置创建不同颜色的3D对象。

async function cubeCreate(index: number, pos: number[], color: number[]) {
    // 使用内建标准着色器创建材质
    const cubeMat = await Engine.resources.CreateMaterial("standard", 0);
    // 设置材质基础色
    cubeMat.view.baseColor = color;

    // 创建3D对象
    const cubeObj = await Engine.resources.CreateObject("Cube:" + index);

    // 设置3D对象坐标
    cubeObj.localPosition = new Engine.Vector3(pos);

    // 为3D对象添加网格渲染器,使用共享的网格和新场景的材质
    const cubeMR = await Engine.resources.CreateMeshRenderer({
        master: cubeObj,
        mesh: cubeMesh,
        materials: [
            {
                group: 0,
                material: cubeMat
            }
        ]
    });

    // 为3D对象添加物理碰撞组件
    const cubeCollider = await Engine.resources.CreateCollider({
        type: "rigid",
        parent: null,
        parent_: cubeObj,
        rigid: {
            shapeType: "box",
            mass: 1,
            extents: [cubeSize * 0.5, cubeSize * 0.5, cubeSize * 0.5],
            position: pos
        }
    });

    return cubeObj;
}

5.在场景中堆砌125个立方块3D对象

使用随机颜色创建对象,创建完成后开启场景的物理演算。

for (let y = 0; y < 5; y++) {
    for (let z = 0; z < 5; z++) {
        for (let x = 0; x < 5; x++) {
            await cubeCreate(index++, [x * cubeSize - 1.0, y * cubeSize + 3.0, z * cubeSize - 1.0], [Math.random() * 0.5 + 0.5, Math.random() * 0.5 + 0.5, Math.random() * 0.5 + 0.5]);
        }
    }
}

// 开启场景物理模拟
Engine.scenes.phySimul = true;

总结

以上即为PLOY3D通过API创建场景3D对象的完成流程,相关方法的详细参数和说明请查阅API文档。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值