所需E币: 0
时间: 2023-12-11 14:51
大小: 3.47KB
Three.js是一个3DJavaScript库,它可以帮助你为网络创造3D体验,而且非常容易使用。如果你想让你的网站更加炫酷,那么Three.js一定是你的好帮手。Three.js是一个在MIT许可下的JavaScript库,它在WebGL之上运行。这个库的目标就是简化处理3D内容的过程。只需要几行代码,你就可以获得一个动画3D场景,而且你无需了解复杂的着色器和矩阵。要在屏幕上展示3D图形,思路大体上都是这样的:1、构建一个三维空间Three中称之为场景(Scene)2、选择一个观察点,并确定观察方向/角度等Three中称之为相机(Camera)3、在场景中添加供观察的物体Three中的物体有很多种,包括Mesh,Line,Points等,它们都继承自Object3D类4、将观察到的场景渲染到屏幕上的指定区域Three中使用Renderer完成这一工作不同服务之间的通信可以采用restTemplate来进行通信调用,当然使用httpClient来构建也是可以的。com.imooc.api.config.CloudConfig.java@AutowiredprivateRestTemplaterestTemplate;//判断faceId不为空,为空直接返回登录失败//2.请求文件服务,获取人脸的base64信息StringfileServerUrlExecute="http://files.imoocnews.com:8004/fs/readFace64InGridFS?faceId="+adminFaceId;ResponseEntity<GraceJSONResult>resultEntity=restTemplate.getForEntity(fileServerUrlExecute,GraceJSONResult.class);GraceJSONResultgraceJSONResult=resultEntity.getBody();Stringbase64DB=(String)graceJSONResult.getData();// System.out.println("restTemplate远程调用获得的内容为:"+base64);returnGraceJSONResult.ok();com.imooc.admin.controller.FriendLinkMngController.java@RestControllerpublicclassFriendLinkMngControllerextendsBaseControllerimplementsFriendLinkMngControllerApi{ finalstaticLoggerlogger=LoggerFactory.getLogger(FriendLinkMngController.class); @Override publicGraceJSONResultsaveOrUpdateFriendLink(SaveFriendLinkBOsaveFriendLinkBO, BindingResultresult){// System.out.println(saveFriendLinkBO.toString()); //判断BindingResult是否保存错误的验证信息,如果有,则直接return if(result.hasErrors()){ Map<String,String>errorMap=getErrors(result); returnGraceJSONResult.errorMap(errorMap); } //保存到MongoDB FriendLinkMOfriendLinkMO=newFriendLinkMO(); BeanUtils.copyProperties(saveFriendLinkBO,friendLinkMO); friendLinkMO.setCreateTime(newDate()); friendLinkMO.setUpdateTime(newDate()); returnGraceJSONResult.ok(); }}下面我们用一个简单的例子来梳理一下这个过程。首先写一个有Canvas元素的页面吧。@Document(collection="friend_link")publicclassFriendLinkMO{ /** *@Id自定义Id主键,mongodb的文档id不会自动生成,会使用我们设置的id值 */ @Id privateStringid; @Field("link_name") privateStringlinkName; @Field("link_url") privateStringlinkUrl; @Field("is_delete") privateIntegerisDelete; @Field("create_time") privateDatecreateTime; @Field("update_time") privateDateupdateTime; //gettersetter...}@ServicepublicclassAppUserMngServiceImplimplementsAppUserMngService{ @Autowired publicAppUserMapperappUserMapper; @Override publicPagedGridResultqueryAllUserList(Stringnickname,Integerstatus, DatestartDate,DateendDate, Integerpage,IntegerpageSize){ ExampleuserExample=newExample(AppUser.class); userExample.orderBy("createdTime").desc(); Example.Criteriacriteria=userExample.createCriteria(); if(StringUtils.isNotBlank(nickname)){ criteria.andLike("nickname","%"+nickname+"%"); } if(UserStatus.isUserStatusValid(status)){ criteria.andEqualTo("activeStatus",status); } if(startDate!=null){ criteria.andGreaterThanOrEqualTo("createdTime",startDate); } if(endDate!=null){ criteria.andLessThanOrEqualTo("createdTime",endDate); } PageHelper.startPage(page,pageSize); List<AppUser>list=appUserMapper.selectByExample(userExample); returnsetterPagedGrid(list,page); }}要唯一确定一个相机的位置与方向,position、up、lookAt三个属性是缺一不可的。这里我们创建了一个正交投影相机,这里我将视景体大小与屏幕分辨率保持一致只是为了方便,这样坐标系中的一个单位长度就对应屏幕的一个像素了。我们将相机放在Z轴上,面向坐标原点,相机的上方向为Y轴方向,注意up的方向和lookAt的方向必然是垂直的(类比自己的头就知道了)。下面添加一个立方体到场景中:<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.imooc.article.mapper.ArticleMapperCustom"> <updateid="updateAppointToPublish"> UPDATE article SET is_appoint=0 WHERE publish_time<=NOW() and is_appoint=1 </update></mapper>three.js中的三大要素:场景(scene)、相机(camera)、衬着器(renderer),有了这三样东西,我们才能够运用相机将场景衬着到网页上去。@OverridepublicGraceJSONResultqueryMyList(StringuserId,Stringkeyword, Integerstatus, DatestartDate,DateendDate, Integerpage,IntegerpageSize){ if(StringUtils.isBlank(userId)){ returnGraceJSONResult.errorCustom(ResponseStatusEnum.ARTICLE_QUERY_PARAMS_ERROR); } if(page==null){ page=COMMON_START_PAGE; } if(pageSize==null){ pageSize=COMMON_PAGE_SIZE; } PagedGridResultgridResult=articleService.queryMyArticleList(userId, keyword, status, startDate, endDate, page, pageSize); returnGraceJSONResult.ok(gridResult);}首先可以在数据库通过写sql脚本实现查询SELECTc.idascommentId,c.father_idasfatherId,c.article_idasarticleId,c.comment_user_idascommentUserId,c.comment_user_nicknameascommentUserNickname,c.contentascontent,c.create_timeascreateTime,f.comment_user_nicknameasquoteUserNickname,f.contentasquoteContentFROMcommentscLEFTJOINcommentsfonc.father_id=f.idWHEREc.article_id='2006117B57WRZGHH'orderbyc.create_timedesc