Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Babylon.js:实例的呈现顺序

Babylon.js:实例的呈现顺序
EN

Stack Overflow用户
提问于 2019-06-14 00:14:19
回答 2查看 1.1K关注 0票数 1

目前,我正在尝试Babylon.js,因为到目前为止,我只使用过Threejs,并且已经向我推荐了几次Babylon.js。

我开发了一个基于转弯的策略游戏,在这个游戏中,玩家的游戏场是由不同材质(白色、黑色、棕色)的个体组成的。

使用Threejs,我将不同字段与相同的材料合并到一个对象中,以将绘制调用减少到3。我在Babylon.js文档中看到,使用实例非常简单。这就是为什么我以这种方式实现gamefield的原因:

  1. 用glb/glb格式的搅拌器输出的现场网格的负载。克隆3次,应用3种不同的材料
代码语言:javascript
运行
AI代码解释
复制
import { SceneLoader, StandardMaterial, Color3, Vector3 } from 'babylonjs';
import 'babylonjs-loaders';

...

SceneLoader.ImportMesh('', 'models/', 'field.glb, scene, group => {
    group.forEach((mesh, i) => {
        if (mesh.name !== '__root__') {
            let brown = mesh.clone('FIELD_BROWN');
            let brownMaterial = new StandardMaterial("brownField", scene);
            brownMaterial.diffuseColor = new Color3.FromHexString("#824529");
            brown.material = brownMaterial;
            brown.isVisible = false;

            let black = mesh.clone('FIELD_BLACK');
            let blackMaterial = new StandardMaterial("blackField", scene);
            blackMaterial.diffuseColor = new Color3.FromHexString("#3E211B");
            black.material = blackMaterial;
            black.isVisible = false;

            mesh.name = 'FIELD_WHITE';
            let whiteMaterial = new StandardMaterial("whiteField", scene);
            whiteMaterial.diffuseColor = new Color3.FromHexString("#F8DBAF");
            mesh.material = whiteMaterial;
            mesh.isVisible = false;
        } else {
            mesh.isVisible = false;
        }
    });
});
  1. 在另一个函数中构建游戏场
代码语言:javascript
运行
AI代码解释
复制
import { Vector3, Color3 } from 'babylonjs';

...

playerField.grid.forEach((cell, i) => {
    let pivot;            

    if (cell.type === BoardCellTypes.BROWN) {
        pivot = this.scene.getMeshByName('FIELD_BROWN');
    } else if (cell.type === BoardCellTypes.BLACK) {
        pivot = this.scene.getMeshByName('FIELD_BLACK');
    } else {
        pivot = this.scene.getMeshByName('FIELD_WHITE');
    }

    let field = pivot.createInstance(cell.row + ':' + cell.col);
    field.position = fieldPosition.add(new Vector3(cell.row * this.fieldSize, 3, cell.col * this.fieldSize));
});

由此产生的场景如下:

当我调整窗户的尺寸时,所有的棕色和黑色的田野都消失了。

我还在我的控制台(256次)中看到了这个警告:

WebGL-0x7fe20b9b3400GL错误:GL_INVALID_OPERATION : glDrawElementsInstancedANGLE:尝试访问属性4中的范围外顶点

我是使用了错误的概念,还是使用了错误的Babylon.js思维模式?我认为这可能是渲染程序的一个问题,但我对警告和消失的字段感到非常困惑。谢谢你的任何帮助!

EN

回答 2

Stack Overflow用户

发布于 2019-06-14 22:23:44

通过删除clone方法并多次导入网格,我解决了这个问题:

代码语言:javascript
运行
AI代码解释
复制
SceneLoader.ImportMesh('', 'models/', 'field.glb, scene, group => {
    group.forEach((mesh, i) => {
        if (mesh.name !== '__root__') {
            mesh.name = 'FIELD_BROWN';
            let brownMaterial = new StandardMaterial("brownField", scene);
            brownMaterial.diffuseColor = new Color3.FromHexString("#824529");
            mesh.material = brownMaterial;
            mesh.isVisible = false;
        }
});

SceneLoader.ImportMesh('', 'models/', 'field.glb, scene, group => {
    group.forEach((mesh, i) => {
        if (mesh.name !== '__root__') {
            mesh.name = 'FIELD_BLACK';
            let blackMaterial = new StandardMaterial("blackField", scene);
            blackMaterial.diffuseColor = new Color3.FromHexString("#3E211B");
            mesh.material = blackMaterial;
            mesh.isVisible = false;
        }
});

...

这对我有效,它消除了警告和奇怪的行为。但我不明白为什么。所以我要接受这个答案,这解释了用Babylon.js克隆的副作用

票数 0
EN

Stack Overflow用户

发布于 2019-08-06 23:36:28

事实是,在调整大小后,只有最后一个网格是可见的。似乎您需要在克隆网格上调用makeGeometryUnique。此方法为网格创建一个非共享的特定几何图形。

类似问题- https://forum.babylonjs.com/t/creating-instances-of-clones-of-a-mesh/536

操场链接- https://playground.babylonjs.com/#QXZ4KH#3

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56594109

复制
相关文章
jQuery限制复选框checkbox的选中次数
<div class="one"> <input type="checkbox" name="checkbox" value="A"> </div> <div class="two"> <input type="checkbox" name="checkbox" value="B"> </div> <div class="three"> <input type="checkbox" name="
明知山
2020/09/03
2.4K0
动态生成表格、隐藏表格、选中删除任意行、jquery、输入验证
我建两个相似的表是为了,给后台使用人员显示所操作的数据,同时方便把开发人员真正要操作的数据传到对应Action中,隐藏开发人员传参用的表。
微风-- 轻许--
2022/04/13
2.8K0
动态生成表格、隐藏表格、选中删除任意行、jquery、输入验证
使用 jQuery 统计用户选中的复选框的个数
微信公众号平台每个用户最多可以设置三个标签,所以在管理员给用户设置标签的时候需要统计用户的标签,下面就是使用使用 jQuery 统计用户选中的复选框的个数的方法:
Denis
2023/04/15
1.5K0
input checkbox复选框点击获取当前选中状态jquery
function checkAll(id) { //用is判断 // let checkStatus=$(id).is(':checked'); // console.log(checkStatus) //用prop方法(用attr获取不到) let checkStatus=$(id).prop("checked"); console.log(checkStatus) } html: <input type="checkbox" value="" id=
蓓蕾心晴
2018/07/06
2.5K0
jquery循环获取所有复选框,包括选中的,未选中的「建议收藏」
此处小编的是freemarker代码,不过html代码一样的,有了复选框后,要保证每个复选框的name是一致的。这样下面才能遍历
全栈程序员站长
2022/08/05
3.1K0
checkbox选中和不选中 jqu_jquery checkbox 选中不选中
jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架)。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。
全栈程序员站长
2022/09/07
3K0
PyQt5 技巧篇-复选框绑定行内容,全选、清空、展示选中的内容功能实现演示,设置复选框选中,检查复选框选中状态
我设置两个有序序列,分别存储对应的复选框和行内容。 我的行内容是用的label标签。
小蓝枣
2020/09/22
3.7K0
PyQt5 技巧篇-复选框绑定行内容,全选、清空、展示选中的内容功能实现演示,设置复选框选中,检查复选框选中状态
jquery.validate添加只能输入英文的验证
代码如下: // 只能输入英文 jQuery.validator.addMethod("english", function(value, element) { var chrnum = /^([a-zA-Z]+)$/; return this.optional(element) || (chrnum.test(value)); }, "只能输入字母");
飞奔去旅行
2019/06/13
2.1K0
jquery获取checkbox是否选中
在使用jquery的过程中,发现了一个比较特别的属性,那就是 input标签的 checkbox的 是否选中状态
执笔记忆的空白
2020/12/25
2.9K0
html复选框选中与未选中触发事件的方法
今天,当制作一个不需要from表单的复选框来提交数据的小函数时,需要在复选框被选中或未选中的情况下修改一些后台数据。我想到了用js代码来监控复选框的状态,并将实时数据发送到后台。关于js代码如何监控checkbox的状态,可以参考下面的例子。
Power
2023/05/25
5.2K0
html复选框选中与未选中触发事件的方法
jQuery对输入框进行验证,只允许输入字母和数字
使用jQuery来对这两个输入框进行验证,确保只允许输入字母和数字,不允许输入中文字符。 以下是相应的示例代码:
王小婷
2023/09/19
4330
React技巧之检查复选框是否选中
原文链接:https://bobbyhadz.com/blog/react-check-if-checkbox-is-checked[1]
chuckQu
2022/08/19
1.5K0
React技巧之检查复选框是否选中
Jquery 判断 checked 是否选中
如果要判断Js中的 checked 是否选中,首先取决于你 引用 的 Jquery 的版本。
White feathe
2021/12/08
2.8K0
jquery关于checkbox选中和不选中的问题
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/148481.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/07
2K0
jquery操作select(取值,设置选中)
本文由 小马哥 创作,采用 知识共享署名4.0 国际许可协议进行许可 本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
IT小马哥
2023/04/07
3.9K0
checkbox选中和不选中 jqu_jquery怎么设置checkbox不选中?
1、设置不选中:$(“#my-checkbox”).prop(“checked”,false);
全栈程序员站长
2022/09/14
3.8K0
用jquery实现表单验证_jquery验证插件
功能强大的 jQuery 表单验证插件,适用于日常的 E-mail、电话号码、网址等验证及 Ajax 验证,除自身拥有丰富的验证规则外,还可以添加自定义的验证规则。
全栈程序员站长
2022/11/09
4.5K0
jquery 选中某一行
jquery 选中某一行 html: <div class="chatBox-list" ref="chatBoxlist"> <div class="chat-list-people"> <div><img src="img/icon01.png" alt="头像"/></div> <div class="chat-name"> <p>小明</p>
Dream城堡
2018/09/10
1.3K0
jquery操作select(取值,设置选中)
每一次操作select的时候,总是要出来翻一下资料,不如自己总结一下,以后就翻这里了。
全栈程序员站长
2022/07/11
3.5K0
点击加载更多

相似问题

Javascript :如果选中复选框,则必须填充验证输入

12

仅选中jquery复选框

40

jQuery验证-选中复选框时检查输入值

10

仅当选中复选框时才使用jquery验证字段

21

Yup -选中仅验证1复选框

250
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档