[最新47章]Three.js可视化企业实战WEBGL课(23年12月升级版)

maudnwiugbn · · 921 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
[最新47章]Three.js可视化企业实战WEBGL课(23年12月升级版) 网盘地址:https://pan.baidu.com/s/1JUzSfbQ95949f7LBDoyRDQ 提取码:mog6 腾讯微云下载地址:https://share.weiyun.com/Sa6MSzwS 密码:n99b5x 今天给大家讲讲关于Three.js可视化相关的内容,从0基础到企业项目实战,内容一共47章,其中包含Three.js开发入门、three.js环境搭建、WebGPU与WGSL入门与原理、blender基础进阶、Cesium入门等,结合大量实战案例,比如全景看房与科技展馆案例、智慧城市案例、Cesium智慧广州项目实战案例、海景酒店日夜交替全景展示、AI寻路避障自动导航案例、可视化物理模拟仿真、WEB端打造开放虚拟世界、程序化节点材质打造逼真科技展馆案例等等,还有在这个月新研究出来的3D动画系统详解,本文章必将干货满满,希望大家会喜欢。 那么,首先,我们先讲讲什么是Three.js、什么是webgl?对他们的概念做一个简单的了解。 three.js,一个WebGL引擎,基于JavaScript,可直接运行GPU驱动游戏与图形驱动应用于浏览器。其库提供的特性与API以绘制3D场景于浏览器。 WebGL(全写Web Graphics Library)是一种3D绘图协议,这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的一个JavaScript绑定,WebGL可以为HTML5 Canvas提供硬件3D加速。 1.1 属性 最常见的方法是通过缓冲区和属性。 如下代码创建缓冲区, var buf = gl.createBuffer(); 将数据放入这些缓冲区: gl.bindBuffer(gl.ARRAY_BUFFER, buf); gl.bufferData(gl.ARRAY_BUFFER, someData, gl.STATIC_DRAW); 然后,给定一个着色器程序,让你在初始化时查找其属性的位置 var positionLoc = gl.getAttribLocation(someShaderProgram, "a_position"); 并在渲染时告诉 WebGL 如何将数据从这些缓冲区中拉出并放入属性中 // turn on getting data out of a buffer for this attribute gl.enableVertexAttribArray(positionLoc); var numComponents = 3; // (x, y, z) var type = gl.FLOAT; // 32bit floating point values var normalize = false; // leave the values as they are var offset = 0; // start at the beginning of the buffer var stride = 0; // how many bytes to move to the next vertex // 0 = use the correct stride for type and numComponents gl.vertexAttribPointer(positionLoc, numComponents, type, normalize, stride, offset); 自定义异常类继承的父类,我没有选择Exception。因为Exception类型的异常,我们必须要手动显式处理,要么上抛,要么捕获。我希望我定义的异常采用既可以采用显式处理,也可以隐式处理,所以我选择继承RuntimeException这个父类。RuntimeException类型的异常可以被虚拟机隐式处理,这样就省去了我们很多手动处理异常的麻烦。 创建com.example.emos.wx.exception包 创建EmosException类 package com.example.emos.wx.exception; import lombok.Data; @Data public class EmosException extends RuntimeException{ private String msg; private int code = 500; public EmosException(String msg) { super(msg); this.msg = msg; } public EmosException(String msg, Throwable e) { super(msg, e); this.msg = msg; } public EmosException(String msg, int code) { super(msg); this.msg = msg; this.code = code; } public EmosException(String msg, int code, Throwable e) { super(msg, e); this.msg = msg; this.code = code; } } 编写demo.vue文件 <template> <view> <view>{{username}}</view> <view v-for="one in tel">{{one}}</view> <view v-if="age>=18"> <button @tap="signUp">我要报名</button> </view> <view> <input type="text" v-model="address" placeholder="输入地址" /> </view> <view>输入的内容:{{address}}</view> </view> </template> <script> export default { data() { return { username: "Scott", tel: [13312345678, 15912345678], age: 18, address: "" }; }, methods:{ signUp: function() { uni.showToast({ title: "点击了报名按钮" }) } } } </script> <style> </style> 编写login.vue文件 <template> <view> <image src="../../static/logo-1.png" mode="widthFix" class="logo"></image> <view class="logo-title">EMOS企业在线办公系统</view> <view class="logo-subtitle">Ver 2050.2</view> <button class="login-btn" open-type="getUserInfo" @tap="login()">登陆系统</button> <view class="register-container"> 没有账号? <text class="register" @tap="toRegister()">立即注册</text> </view> </view> </template> <script> export default { data() { return {}; }, methods: { } }; </script> <style lang="less"> @import url('login.less'); </style> 我们声明Shiro过滤器拦截路径的时候,为登陆和注册路径下的请求,设置了放行,所以验证与授权并没有生效。等我们将来写具体的业务类型的Web方法,添加相关的Shiro注解,这时候OAuth2Filter中的其他方法就得以运行了。 Map<String,String> filterMap=new LinkedHashMap<>(); filterMap.put("/webjars/**", "anon"); filterMap.put("/druid/**", "anon"); filterMap.put("/app/**", "anon"); filterMap.put("/sys/login", "anon"); filterMap.put("/swagger/**", "anon"); filterMap.put("/v2/api-docs", "anon"); filterMap.put("/swagger-ui.html", "anon"); filterMap.put("/swagger-resources/**", "anon"); filterMap.put("/captcha.jpg", "anon"); filterMap.put("/user/register", "anon"); filterMap.put("/user/login", "anon"); filterMap.put("/test/**", "anon"); filterMap.put("/**", "oauth2"); 在com.example.emos.wx.service.impl包中,创建CheckinServiceImpl实现类 @Service @Scope("prototype") @Slf4j public class CheckinServiceImpl implements CheckinService { @Autowired private SystemConstants systemConstants; @Autowired private TbHolidaysDao holidaysDao; @Autowired private TbWorkdayDao workdayDao; @Autowired private TbCheckinDao checkinDao; @Override public String validCanCheckIn(int userId, String date) { boolean bool_1 = holidaysDao.searchTodayIsHolidays() != null ? true : false; boolean bool_2 = workdayDao.searchTodayIsWorkday() != null ? true : false; String type = "工作日"; if (DateUtil.date().isWeekend()) { type = "节假日"; } if (bool_1) { type = "节假日"; } else if (bool_2) { type = "工作日"; } if (type.equals("节假日")) { return "节假日不需要考勤"; } else { DateTime now = DateUtil.date(); String start = DateUtil.today() + " " + systemConstants.attendanceStartTime; String end = DateUtil.today() + " " + systemConstants.attendanceEndTime; DateTime attendanceStart = DateUtil.parse(start); DateTime attendanceEnd = DateUtil.parse(end); if (now.isBefore(attendanceStart)) { return "没有到上班考勤开始时间"; } else if (now.isAfter(attendanceEnd)) { return "超过了上班考勤结束时间"; } else { HashMap map = new HashMap(); map.put("userId", userId); map.put("date", date); map.put("start", start); map.put("end", end); boolean bool = checkinDao.haveCheckin(map) != null ? true : false; return bool ? "今日已经考勤,不用重复考勤" : "可以考勤"; } } } }
921 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传