资料
  • 资料
  • 专题
[23年12月版47章]Three.js可视化企业实战WEBGL课
推荐星级:
类别: 软件/EDA/IP
时间:2023-12-11
大小:3.47KB
阅读数:280
上传用户:学习菜鸟小弟弟
查看他发布的资源
下载次数
0
所需E币
0
ebi
新用户注册即送 300 E币
更多E币赚取方法,请查看
close
资料介绍
Three.js 是一个 3D JavaScript 库,它可以帮助你为网络创造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

@Autowired
private RestTemplate restTemplate;


// 判断faceId不为空,为空直接返回登录失败

// 2. 请求文件服务,获取人脸的base64信息
String fileServerUrlExecute = "http://files.imoocnews.com:8004/fs/readFace64InGridFS?faceId=" + adminFaceId;
ResponseEntity<GraceJSONResult> resultEntity = restTemplate.getForEntity(fileServerUrlExecute, GraceJSONResult.class);
GraceJSONResult graceJSONResult = resultEntity.getBody();
String base64DB = (String)graceJSONResult.getData();
//        System.out.println("restTemplate远程调用获得的内容为:" + base64);


return GraceJSONResult.ok();
com.imooc.admin.controller.FriendLinkMngController.java
@RestController
public class FriendLinkMngController extends BaseController implements FriendLinkMngControllerApi {

    final static Logger logger = LoggerFactory.getLogger(FriendLinkMngController.class);


    @Override
    public GraceJSONResult saveOrUpdateFriendLink(SaveFriendLinkBO saveFriendLinkBO,
                                                  BindingResult result) {

//        System.out.println(saveFriendLinkBO.toString());

        // 判断BindingResult是否保存错误的验证信息,如果有,则直接return
        if (result.hasErrors()) {
            Map<String, String> errorMap = getErrors(result);
            return GraceJSONResult.errorMap(errorMap);
        }

        // 保存到MongoDB
        FriendLinkMO friendLinkMO = new FriendLinkMO();
        BeanUtils.copyProperties(saveFriendLinkBO, friendLinkMO);
        friendLinkMO.setCreateTime(new Date());
        friendLinkMO.setUpdateTime(new Date());
            
        return GraceJSONResult.ok();
    }
}
下面我们用一个简单的例子来梳理一下这个过程。
首先写一个有Canvas元素的页面吧。
@Document(collection = "friend_link")
public class FriendLinkMO {
    /**
     * @Id 自定义Id主键,mongodb的文档id不会自动生成,会使用我们设置的id值
     */
    @Id
    private String id;
    @Field("link_name")
    private String linkName;
    @Field("link_url")
    private String linkUrl;
    @Field("is_delete")
    private Integer isDelete;
    @Field("create_time")
    private Date createTime;
    @Field("update_time")
    private Date updateTime;

    // getter setter ...
}
@Service
public class AppUserMngServiceImpl implements AppUserMngService {

    @Autowired
    public AppUserMapper appUserMapper;

    @Override
    public PagedGridResult queryAllUserList(String nickname, Integer status,
                                            Date startDate, Date endDate,
                                            Integer page, Integer pageSize) {

        Example userExample = new Example(AppUser.class);
        userExample.orderBy("createdTime").desc();
        Example.Criteria criteria = 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);
        return setterPagedGrid(list, page);
    }

}
要唯一确定一个相机的位置与方向,position、up、lookAt三个属性是缺一不可的。
这里我们创建了一个正交投影相机,这里我将视景体大小与屏幕分辨率保持一致只是为了方便,这样坐标系中的一个单位长度就对应屏幕的一个像素了。
我们将相机放在Z轴上,面向坐标原点,相机的上方向为Y轴方向,注意up的方向和lookAt的方向必然是垂直的(类比自己的头就知道了)。
下面添加一个立方体到场景中:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.imooc.article.mapper.ArticleMapperCustom" >

    <update id="updateAppointToPublish">
        UPDATE
          article
        SET
          is_appoint = 0
        WHERE
            publish_time &lt;= NOW()
          and
            is_appoint = 1
    </update>

</mapper>
three.js中的三大要素:场景(scene)、相机(camera)、衬着器(renderer),有了这三样东西,我们才能够运用相机将场景衬着到网页上去。
@Override
public GraceJSONResult queryMyList(String userId, String keyword,
                                   Integer status,
                                   Date startDate, Date endDate,
                                   Integer page, Integer pageSize) {

    if (StringUtils.isBlank(userId)) {
        return GraceJSONResult.errorCustom(ResponseStatusEnum.ARTICLE_QUERY_PARAMS_ERROR);
    }

    if (page == null) {
        page = COMMON_START_PAGE;
    }

    if (pageSize == null) {
        pageSize = COMMON_PAGE_SIZE;
    }

    PagedGridResult gridResult = articleService.queryMyArticleList(userId,
                                                                    keyword,
                                                                    status,
                                                                    startDate,
                                                                    endDate,
                                                                    page,
                                                                    pageSize);
    return GraceJSONResult.ok(gridResult);
}
首先可以在数据库通过写sql脚本实现查询
SELECT
c.id as commentId,
c.father_id as fatherId,
c.article_id as articleId,
c.comment_user_id as commentUserId,
c.comment_user_nickname as commentUserNickname,
c.content as content,
c.create_time as createTime,
f.comment_user_nickname as quoteUserNickname,
f.content as quoteContent
FROM
comments c
LEFT JOIN
comments f
on
c.father_id = f.id
WHERE
c.article_id = '2006117B57WRZGHH'
order by
c.create_time
desc


版权说明:本资料由用户提供并上传,仅用于学习交流;若内容存在侵权,请进行举报,或 联系我们 删除。
相关评论 (下载后评价送E币 我要评论)
没有更多评论了
  • 可能感兴趣
  • 关注本资料的网友还下载了
  • 技术白皮书