首页 文章 精选 留言 我的

精选列表

搜索[3d游戏],共10000篇文章
优秀的个人博客,低调大师

3D酷炫立体图现已加入 pyecharts 豪华晚餐

1. datazoom 中增加了将组件效果显示在 y 坐标轴中的功能。 本来是这样的 现在还可以这样 2. 增加了对 Pandas 和 Numpy 数据的简单处理。解决直接传入 Pandas 和 Numpy 数据类型出错的问题。 如果使用的是 Numpy 或者 Pandas,直接将数据放入 add() 方法也可能会出现问题,因为 add() 方法接受的是两个 list 列表。最后所有的配置项都是要经过 JSON 序列化的,像 int64 这种类型的数据在这个过程是会报错的。 在这里提供了 pdcast(pddata) 和 npcast(npdata) 两个方法,用于这两个库数据类型的处理。 pdcast(),接受的参数可以为 Series 或者 DataFrame 类型。 @staticmethod pdcast(pddata)用于处理 Pan

优秀的个人博客,低调大师

基于WebGL架构的3D可视化平台—三维设备管理(ThingJS实现楼宇设备管理3D可视化)

国内高层建筑不断兴建,它的特点是高度高、层数多、体量大。面积可达几万平方米到几十万平方米。这些建筑都是一个个庞然大物,高高的耸立在地面上,这是它的外观,而随之带来的内部的建筑设备也是大量的。为了提高设备利用率,合理地使用能源,加强对建筑设备状态的监视等,自然地就提出了楼宇自动化控制系统。下面我们将用ThingJS平台来模拟一个设备管理系统。 第一步,利用CampusBuilder搭建模拟场景。CampusBuilder的模型库有各种各样的模型,使我们搭建出的场景更逼真。使用CampusBuilde创建层级,之后再给层级加外立面就出现了当前的效果。详情移步:CampusBuilder3D场景制作工具 先看结果:演示地址 第二步,创建Equipment类,这里创建。switchControl方法主要一个完成一个计时器的功能来模拟设备警报。 class Equipment extends THING.Thing { constructor(app, name, obj, url) { super(app); this.name = name; this.obj = obj; this.url = url; this.interval = null; this.localPosition = [Math.floor(Math.random() * 7), 2.9, Math.floor(Math.random() * 7)]; } createSelf() { app.create({ type: 'Equipment', name: this.name, url: this.url, parent: this.obj, localPosition: this.localPosition, angle: 0 }); } switchControl(ev) { var flag; var equipment = app.query(this.name)[0]; app.level.change(equipment); if (ev) { this.interval = setInterval(function () { if (flag) { equipment.style.color = '#FF0000'; flag = false; } else { flag = true; equipment.style.color = ''; } }, 500); console.log(this.interval + "查看是否创建了定时器"); } else { console.log(this.interval); clearInterval(this.interval); if (equipment.style.color == '#FF0000') equipment.style.color = ''; } } } THING.factory.registerClass('Equipment', Equipment); 第三步,创建摄像机面板,烟感报警面板以及控制设备的开关,这里简单调整一下面板位置之后会增加两个创建设备的按钮。 //创建主面板 var panel1 = new THING.widget.Panel({ titleText: '摄像机列表', closeIcon: false, // 是否有关闭按钮 dragable: true, retractable: true, opacity: 0.9, hasTitle: true, }); panel1.position = [80, 0]; var panel2 = new THING.widget.Panel({ titleText: '烟感报警列表', closeIcon: false, // 是否有关闭按钮 dragable: true, retractable: true, opacity: 0.9, hasTitle: true, }); panel2.position = [80, 320]; // 创建任意对象 var dataObj1 = { open1: false, open2: false, open3: false, open4: false, } var dataObj2 = { open5: false, open6: false, open7: false, open8: false, }; // 动态绑定物体 var open1 = panel1.addBoolean(dataObj1, 'open1').caption('设备01'); var open2 = panel1.addBoolean(dataObj1, 'open2').caption('设备02'); var open3 = panel1.addBoolean(dataObj1, 'open3').caption('设备03'); var open4 = panel1.addBoolean(dataObj1, 'open4').caption('设备04'); var open5 = panel2.addBoolean(dataObj2, 'open5').caption('设备01'); var open6 = panel2.addBoolean(dataObj2, 'open6').caption('设备02'); var open7 = panel2.addBoolean(dataObj2, 'open7').caption('设备03'); var open8 = panel2.addBoolean(dataObj2, 'open8').caption('设备04'); 第四步,开启场景层级切换,创建摄像机和烟感报警器各四个,创建一个数字标识index和保存equipment对象的数组equipmentGroup。 //创建equipment对象数组,以及数组标识 var equipmentGroup = []; var index = 0; app.on('load', function (ev) { app.level.change(ev.campus); for (var i = 0; i < 8; i++) { var type = null; if (i < 4) { type = 'http://model.3dmomoda.cn/models/62A8A75C75044E6AB3D8463FA0CB67AF/0/gltf/'; } else { type = 'http://model.3dmomoda.cn/models/641A9B800DE5431E8C84DC290F8EFDE6/0/gltf/'; } var equipment = new Equipment(app, 'equipment' + index++, app.query('floor' + (Math.floor(Math.random() * 5) + 1))[0], type); equipment.createSelf(); equipmentGroup.push(equipment); } }); 第五步,为每个设备对应的创建控制开关。 open1.on('change', function (ev) { equipmentGroup[0].switchControl(ev); }); open2.on('change', function (ev) { equipmentGroup[1].switchControl(ev); }); open3.on('change', function (ev) { equipmentGroup[2].switchControl(ev); }); open4.on('change', function (ev) { equipmentGroup[3].switchControl(ev); }); open5.on('change', function (ev) { equipmentGroup[4].switchControl(ev); }); open6.on('change', function (ev) { equipmentGroup[5].switchControl(ev); }); open7.on('change', function (ev) { equipmentGroup[6].switchControl(ev); }); open8.on('change', function (ev) { equipmentGroup[7].switchControl(ev); }); 最后一步,创建两个按钮来控制创建设备。 new THING.widget.Button('创建烟感报警', function () { var type = 'http://model.3dmomoda.cn/models/641A9B800DE5431E8C84DC290F8EFDE6/0/gltf/'; var equipment = new Equipment(app, 'equipment' + index++, app.query('floor' + (Math.floor(Math.random() * 5) + 1))[0], type,); equipment.createSelf(); equipmentGroup.push(equipment); app.level.change(app.query(equipment.name)[0]); }); new THING.widget.Button('创建摄像头', function () { var type = 'http://model.3dmomoda.cn/models/62A8A75C75044E6AB3D8463FA0CB67AF/0/gltf/'; var equipment = new Equipment(app, 'equipment' + index++, app.query('floor' + (Math.floor(Math.random() * 5) + 1))[0], type,); equipment.createSelf(); equipmentGroup.push(equipment); app.level.change(app.query(equipment.name)[0]); }); 在编写过程还是走了不少弯路的,最主要的就是计时器的卸载问题,最初的版本写来写去发现不能控制警报的关闭,后来才 发现计时器没有卸载,警报不但不会关闭而且闪动的频率越来越快。更改之后创建了Equipment这个类来控制所有设备,通过创建这个类的对象给他赋id,父物体,模型地址。这里控制器在开关被触发的时候创建一个新的计时器并赋给的这个对象,再次触发时清除这个计时器,警报的动画就关闭了。演示地址 最后附上完整代码: /** * 说明:创建App,url为场景地址(可选) */ var app = new THING.App({ url: "http://www.thingjs.com/./uploads/wechat/oLX7p05lsWJZUIxnIWsNXAzJ40X8/scene/CampusBuilder20181126134710", // 场景地址 "skyBox": "BlueSky" }); //创建主面板 var panel1 = new THING.widget.Panel({ titleText: '设备列表', closeIcon: false, // 是否有关闭按钮 dragable: true, retractable: true, opacity: 0.9, hasTitle: true, titleImage: 'https://www.thingjs.com/static/images/example/icon.png' }); panel1.position = [80, 0]; var panel2 = new THING.widget.Panel({ titleText: '设备列表', closeIcon: false, // 是否有关闭按钮 dragable: true, retractable: true, opacity: 0.9, hasTitle: true, titleImage: 'https://www.thingjs.com/static/images/example/icon.png' }); panel2.position = [80, 320]; // 创建任意对象 var dataObj1 = { open1: false, open2: false, open3: false, open4: false, } var dataObj2 = { open5: false, open6: false, open7: false, open8: false, }; // 动态绑定物体 var open1 = panel1.addBoolean(dataObj1, 'open1').caption('设备01'); var open2 = panel1.addBoolean(dataObj1, 'open2').caption('设备02'); var open3 = panel1.addBoolean(dataObj1, 'open3').caption('设备03'); var open4 = panel1.addBoolean(dataObj1, 'open4').caption('设备04'); var open5 = panel2.addBoolean(dataObj2, 'open5').caption('设备01'); var open6 = panel2.addBoolean(dataObj2, 'open6').caption('设备02'); var open7 = panel2.addBoolean(dataObj2, 'open7').caption('设备03'); var open8 = panel2.addBoolean(dataObj2, 'open8').caption('设备04'); new THING.widget.Button('创建烟感报警', function () { var type = 'http://model.3dmomoda.cn/models/641A9B800DE5431E8C84DC290F8EFDE6/0/gltf/'; var equipment = new Equipment(app, 'equipment' + index++, app.query('floor' + (Math.floor(Math.random() * 5) + 1))[0], type,); equipment.createSelf(); equipmentGroup.push(equipment); app.level.change(app.query(equipment.name)[0]); }); new THING.widget.Button('创建摄像头', function () { var type = 'http://model.3dmomoda.cn/models/62A8A75C75044E6AB3D8463FA0CB67AF/0/gltf/'; var equipment = new Equipment(app, 'equipment' + index++, app.query('floor' + (Math.floor(Math.random() * 5) + 1))[0], type,); equipment.createSelf(); equipmentGroup.push(equipment); app.level.change(app.query(equipment.name)[0]); }); //创建equipment对象数组,以及数组标识 var equipmentGroup = []; var index = 0; app.on('load', function (ev) { app.level.change(ev.campus); for (var i = 0; i < 8; i++) { var type = null; if (i < 4) { type = 'http://model.3dmomoda.cn/models/62A8A75C75044E6AB3D8463FA0CB67AF/0/gltf/'; } else { type = 'http://model.3dmomoda.cn/models/641A9B800DE5431E8C84DC290F8EFDE6/0/gltf/'; } var equipment = new Equipment(app, 'equipment' + index++, app.query('floor' + (Math.floor(Math.random() * 5) + 1))[0], type); equipment.createSelf(); equipmentGroup.push(equipment); } open1.on('change', function (ev) { equipmentGroup[0].switchControl(ev); }); open2.on('change', function (ev) { equipmentGroup[1].switchControl(ev); }); open3.on('change', function (ev) { equipmentGroup[2].switchControl(ev); }); open4.on('change', function (ev) { equipmentGroup[3].switchControl(ev); }); open5.on('change', function (ev) { equipmentGroup[4].switchControl(ev); }); open6.on('change', function (ev) { equipmentGroup[5].switchControl(ev); }); open7.on('change', function (ev) { equipmentGroup[6].switchControl(ev); }); open8.on('change', function (ev) { equipmentGroup[7].switchControl(ev); }); }); class Equipment extends THING.Thing { constructor(app, name, obj, url) { super(app); this.name = name; this.obj = obj; this.url = url; this.interval = null; } createSelf() { app.create({ type: 'Equipment', name: this.name, url: this.url, parent: this.obj, localPosition: [Math.floor(Math.random() * 7), 2.9, Math.floor(Math.random() * 7)], angle: 0 }); } switchControl(ev) { var flag; var equipment = app.query(this.name)[0]; app.level.change(equipment); if (ev) { this.interval = setInterval(function () { if (flag) { equipment.style.color = '#FF0000'; flag = false; } else { flag = true; equipment.style.color = ''; } }, 500); console.log(this.interval + "查看是否创建了定时器"); } else { console.log(this.interval); clearInterval(this.interval); if (equipment.style.color == '#FF0000') equipment.style.color = ''; } } } THING.factory.registerClass('Equipment', Equipment);

优秀的个人博客,低调大师

跨平台游戏引擎 Axmol-2.11.0 发布

Axmol 2.11.0 版本是一个以错误修复和功能改进为主的次要 LTS 长期支持版本,发布时间: 2025 年 12 月 19 日 🙏感谢所有对 axmol 项目的贡献者,包括财务赞助者:@scorewarrior(公司)、@peterkharitonov、@duong、@thienphuoc、@bingsoo、@asnagni 以及 历史赞助者 仓库地址 GitHub (官方): https://github.com/axmolengine/axmol Gitee (镜像): https://gitee.com/simdsoft/axmol AtomGit (镜像): https://atomgit.com/gh_mirrors/ax/axmol Bug 修复 修复 iOS 在活跃电话通话期间音频停止阻塞的问题,作者 @halx99 #2950 修复 WebSocket 关闭代码字节序问题 #2889,作者 @halx99 修复 Xcode 14.2 兼容性链接问题,作者 @halx99 修复 build-docs.ps1 在构建 2.10.x 时失败的问题,作者 @halx99 修复 AX_USE_ALSOFT 定义问题,作者 @halx99 #2912 修复在定义 AX_CORE_PROFILE 时的编译错误,作者 @crazyhappygame #2910 修复 luabinding 生成器因缺少 clang-ver.ps1 而无法工作的错误,作者 @halx99 修复独立 Axmol 应用无法找到 NuGet 程序的问题 #2926,作者 @halx99 修复多个粒子系统相关的 Bug,作者 @WUCJ638 #2935 改进 允许在 Linux 上重写 FileUtils::getWritablePath(),作者 @j-jorge #2906 CI:停止生成 Axmol BS 包,作者 @halx99 CI:放宽单元测试中的 map-diff CHECK 条件以避免不稳定的 CI 失败,作者 @halx99 CI:改进 macOS 运行器和构建命令,作者 @halx99 新增 Node::getHashOfName(),作者 @j-jorge #2907 锁定 axslcc 版本为 1.9.6 用于 Axmol 2.x,作者 @halx99 在 FontFreeType 中进行一些小的性能优化,作者 @j-jorge 当 TextureCache 加载线程销毁时删除挂起的 AsyncStruct,作者 @j-jorge #2911 SDK & 工具更新 cmake: 4.2.0 => 4.2.1 jdk: 17.0.15 => 17.0.17 webview2: 1.0.3595.46 => 1.0.3650.58 第三方库更新 c-ares: 1.34.5 => 1.34.6 jpeg-turbo: 3.1.2 => 3.1.3 libpng: 1.6.50 => 1.6.53 luajit: 2.1-68354f4 => 2.1-7152e15 发布文件 MD5 校验值 axmol-2.11.0.zip: b7b0fa888f2abec327ee6b54133eae90 下载 GitHub 中国大陆用户可尝试复制链接使用迅雷下载 axmol-2.11.0.zip 百度网盘 axmol-2.11.0.zip SourceForge Axmol-2.11.0

优秀的个人博客,低调大师

跨平台游戏引擎 Axmol-2.10.0 发布

Axmol 2.10.0 版本是一个以错误修复和功能改进为主的次要 LTS 长期支持版本,发布时间: 2025 年 11 月 27 日 🙏感谢所有对 axmol 项目的贡献者,包括财务赞助者:@scorewarrior(公司)、@peterkharitonov、@duong、@thienphuoc、@bingsoo、@asnagni 以及 历史赞助者 🙏我们衷心感谢 @scorewarrior(公司) 的鼎力支持——他们自2025年10月日起,在 GitHub Sponsors 追加了每月 $2,000 的赞助金额,并在此之前已通过 Open Source Collective 持续每月赞助 $3,000。你们的慷慨帮助 Axmol 项目不断繁荣与成长。 仓库地址 GitHub (官方): https://github.com/axmolengine/axmol Gitee (镜像): https://gitee.com/simdsoft/axmol 相较于 2.9.1 的重大变化 改进 SDF 光晕效果渲染,由 @halx99 在 #2849 提交 在 iOS/macOS 上将默认音频后端从 OpenAL.framework 切换为 openal-soft,由 @halx99 在 #2868 提交 新增接口 Application::applicationWillQuit,由 @halx99 在 #2870 提交 弃用 FontFreeType::setShareDistanceFieldEnabled,由 @halx99 在 #2856 提交, 请改用 FontFreeType::setGlobalSDFEnabled Bug 修复 修复 testFormatForPvr3TCSupport 中 ASTC 格式返回 false 的问题,由 @lucycycy 在 #2855 提交 修复在使用 OpenAL-Soft 时 iOS/macOS 平台生成 xcarchive 的问题,由 @rh101 在 #2883 提交 [Linux] 修复缺失共享 OpenAL 库的问题,由 @rh101 在 #2885 提交 在 isAbsolutePathInternal 中增加路径长度检查,防止越界访问,由 @tkzcfc 在 #2891 提交 修复 cpp-tests 内存泄漏,由 @halx99 提交 修复在禁用 ImGui 时 cpp-tests 编译失败的问题,由 @halx99 提交 改进 改进 DrawNodeTest,由 @aismann 在 #2859 提交 在 IFileStream.h 中添加 errno 和 stdint 引入,由 @halx99 在 #2875 提交 允许在 EventTouch 中设置事件代码和触点,由 @j-jorge 和 @halx99 在 #2890 提交 改进标签效果测试,由 @halx99 提交 改进 SDF 文本渲染着色器,由 @halx99 提交 增强 Visual Studio 2026 支持,由 @halx99 提交 更新绑定模板文件,由 @halx99 提交 SDK & 工具更新 cmake: 4.1.1 => 4.2.0(VS2026 支持所需) gradle: 9.2.0 => 9.2.1 webview2: 1.0.3537.50 => 1.0.3595.46 第三方库更新 curl: 8.16.0 => 8.17.0 luajit: 2.1-871db2c => 2.1-68354f4 社区动态 Axmol 开箱即用支持 Visual Studio 2026 构建。 请确保已安装 CMake 4.2.0+。 在 2025 年 11 月,Axmol 在 dev(v3) 分支中引入了 实验性的 Direct3D12 和 Vulkan RHI 支持, 这是迈向现代跨 API 渲染后端的第一步。 发布文件 MD5 校验值 axmol-2.10.0.zip: 7d526d416efff2b8ba55111495a9a0ff 下载 GitHub 中国大陆用户可尝试复制链接使用迅雷下载 axmol-2.10.0.zip 百度网盘 axmol-2.10.0.zip SourceForge Axmol-2.10.0

优秀的个人博客,低调大师

跨平台游戏引擎 Axmol-2.9.1 发布

Axmol 2.9.1 版本是一个以错误修复和功能改进为主的次要 LTS 长期支持版本,发布时间: 2025 年 11 月 2 日 🙏感谢所有对 axmol 项目的贡献者,包括财务赞助者:@scorewarrior(公司)、@peterkharitonov、@duong、@thienphuoc、@bingsoo、@asnagni、@paulocoutinhox 以及 历史赞助者 🙏我们衷心感谢 @scorewarrior(公司) 的鼎力支持——他们在 GitHub Sponsors 追加了每月 $2,000 的赞助金额,并在此之前已通过 Open Source Collective 持续每月赞助 $3,000。你们的慷慨帮助 Axmol 项目不断繁荣与成长。 仓库地址 GitHub (官方): https://github.com/axmolengine/axmol Gitee (镜像): https://gitee.com/simdsoft/axmol 相较于 2.9.0 的重要变更 改进 SDF 文本描边渲染,由 @halx99 提交 #2843 Bug 修复 修复同时启用描边和阴影时的 SDF 文本渲染问题,由 @halx99 提交,参见 issue: #2844 修复 extension::GUI ScrollView 内存泄漏问题,由 @j-jorge 提交 #2821 修复 FairyGUI 椭圆/圆形 “Line Size” 问题,由 @aismann 提交 #2825 修复 ui::Text 在 Overflow::SHRINK 模式下,当文本被缩短时未能恢复原始字体大小的问题,由 @tkzcfc 提交 #2831 修复 FastTMXLayer::reset 在图层变为空时绘制计数错误的问题,由 @lucycycy 提交 #2839 改进 改进 AutoPolygon::findFirstNoneTransparentPixel() 方法,由 @aismann 提交 #2810 新增 Scroll View v2 测试用例,由 @NgVThangBz 提交 #2820 增加 PVRv3 ASTC 支持并改进 PVR 格式检测,由 @lucycycy 提交 #2832 同步 Constants.lua 中的像素格式枚举,由 @halx99 提交 改进距离场描边着色器,由 @halx99 提交 SDK 与工具更新 gradle: 9.1.0 => 9.2.0 webview2: 1.0.3485.44 => 1.0.3537.50 第三方库更新 oboe: 1.9.3 => 1.10.0 openssl: 3.0.17 => 3.0.18 rapidjson: 1.1.0-815e6e7 => 1.1.0-24b5e7a 发布文件 MD5 校验值 axmol-2.9.1.zip: 7d526d416efff2b8ba55111495a9a0ff axmol-bs-2.9.1.zip: 8199bbe57c5cc1f2747f001466848aae 下载 GitHub 中国大陆用户可尝试复制链接使用迅雷下载 axmol-2.9.1.zip axmol-bs-2.9.1.zip 百度网盘 axmol-2.9.1.zip axmol-bs-2.9.1.zip SourceForge Axmol-2.9.1

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册