Github:https://github.com/xosg/model-view

Model View

基于 Zero Overhead 原则的草量级 3D 模型渲染组件,在线演示:https://pqo.gitee.io/model-view/demo/

<script src="model-view.js"></script>
<canvas is="model-view" src="path/to/model.bin" width="500" height="500"></canvas>
model-view 大小 内容
model-view.js 5.0 KB 源文件:含注释和空白符
model-view.min.js 3.5 KB 代码丑化工具编译后
model-view.min.js.gz 1.5 KB Gzip 压缩后:http 传输

动机

市面上的 WebGL 库为了支持 3D 模型的各种属性,文件体积异常庞大,动辄 1M 以上,但很多时候用户只需要简单直观地展示一下模型,并不关心图形学中乱七八糟的功能,也就是所谓的“零负担原则”(zero overhead principle),因此本项目诞生,本项目选取了三维模型中最关键的几个属性,其他的一概不支持!因此得以让库文件保持几 KB,用最小的开销渲染尽可能多的信息:本库不支持市面上任何的三维模型格式,取而代之的是自定义的,可直接传入 WebGL 缓冲区的二进制格式。

  • 轻巧组件:渲染所占资源极小;使用了 html 组件化

  • 聚焦透视:自动聚焦到物体的包围盒,并且透视投影

  • 多种材质:支持给三角面分组,每组分配不同的颜色

  • 扁平着色:模拟一束来自视点的平行光线

  • 简单交互:支持鼠标操作,围绕物体旋转缩放

自定义原生格式

二进制格式 类型 长度 作用
json length Uint 32 4 字节 定义了下一块的长度
json JSON 文本 由上一块决定 json 文本 ascii
顶点坐标 数组 由上一块决定 每个顶点由 3 个 float 组成
三角索引 数组 余下的长度 索引的数量由上上块决定

JSON 格式

JSON 字典 类型 作用
position_length 整数 顶点数组的长度,字节
length float 包围球直径 or 包围盒对角线
extensions string 列表 WebGL 的扩展功能
groups 字典列表 三角面的分组
groups -> color vector4 分组的颜色
groups -> indexCount 整数 分组的长度
groups -> componentType WebGL 类型 索引的类型
groups -> offset 整数 分组的偏移值,字节

我的理解,所谓「零成本抽象 zero overhead abstraction」有两个层面的意思。不需要为没有使用到的语言特性付出代价。使用某种语言特性,不会带来运行时的代价。总的来说,这就是一种极度强调运行时性能,把所有解释抽象的工作都放在编译时完成的思路。

知乎

用最少的代码渲染3D模型相关推荐

  1. 初识xr-frame识别追踪渲染3D模型

    初识xr-frame AR识别追踪渲染3D模型 初识xr-frame识别追踪渲染3D模型 1. 云识别配置 2. 小程序开发配置 3. wxml文件 4. ts文件(不完整,请下载sample查看完成 ...

  2. 3d高性能渲染服务器,怎么样用服务器端渲染 3D 模型的同时导出多角度 - 纳金网...

    例如汇宝盆上面有个花瓶的3d模型,用户配置花瓶的各项属性,花瓶的背景颜色,花瓶的花纹,花瓶的图案,花瓶的形状,然后在汇宝盆上面显示各个角度观察的花瓶的图片,花瓶顺y轴旋转的图片(正面,背面,四个侧面) ...

  3. android OpenGL渲染3D模型文件

    码字不易,转载请注明出处喔 https://blog.csdn.net/newchenxf/article/details/121402859 1 前言 大部分OpenGL示例代码,要么播放个视频,要 ...

  4. Android artoolkitx渲染3D模型

    artoolkitx的demo只是简单的渲染了一个方块,想要复杂的3D模型,最好能有动画的,最初想用assimp的,可是太复杂了,我自己还搞不懂,就找其他的,发现了个纯java的3D引擎rajawal ...

  5. C#代码创建3D模型

    Demo 1:创建三角形 示例代码 构建一个只包含单个三角形及纹理坐标的网格 using UnityEngine; using System.Collections;public class Mesh ...

  6. python 渲染3d模型_Python中的3D软件渲染

    我决定尝试在Python中使用Pygame进行实验,这样我就可以通过pixelarray绘制到屏幕上了.我决定按照this article来深入研究3D的数学 简而言之,我已经实现了所有功能.我构建了 ...

  7. 【我的渲染技术进阶之旅】OpenGL ES 使用表面剔除和深度测试解决渲染3D模型的时候,出现背面黑点的问题

    文章目录 一.效果对比 1.1 出问题的效果 1.2 修复后正常的效果 二. 什么是 隐藏面消除(Hidden surface elimination)问题? 三.隐藏面消除问题的解决方案 3.1 油 ...

  8. html3d模型渲染,【SVG】纯clip-path打造的3D模型渲染器

    几天之前, 一个species-in-pieces的网站把我震到了(如下图), 出于一个优秀前端的敏锐嗅觉和原始本能, 我立刻祭出了看家法宝--Chrome开发者工具开始偷窥这个网站. 简单推敲之后, ...

  9. Android增强现实(三)-3D模型展示器

    1.Android增强现实(一)-AR的三种方式(展示篇) 2.Android增强现实(二)-支持拖拽控制进度和伸缩的VrGifView 3.Android增强现实(三)-3D模型展示器 前言 前段时 ...

最新文章

  1. 把虚拟系统接入网络 虚拟系统工作模式
  2. android ListView适配器之SimpleAdapter的用法
  3. CENTOS 内存释放
  4. 步步为营-77-Ajax简介
  5. 边沿触发是什么意思_集基耦合双稳电路,集成化单稳电路,数字逻辑电路,门电路,触发器...
  6. ORACLE查看某个表的索引状态
  7. tomcat查看当前内存
  8. 基于map函数生成星战片头动画
  9. 记一次hw中的上线骚姿势(异速联+用友U8)
  10. ECshop商城开发系列视频教程后盾网VIP课程
  11. Simplest NodeJS server
  12. win32 mysql误删数据恢复_mysql误删数据恢复
  13. 1080p显示器与2k的差别究竟有多大?该如何选择
  14. 2.vulnhub-Xerxes靶机复现
  15. 公有iot私有iot架构_玩洋葱Omega IoT设备在OLED屏幕上显示实时血糖
  16. 3.模板模式_1:什么是模板模式???什么情况适合用模板模式???模板模式如何实现???
  17. 一辈子的尽头,原来就是毕业。
  18. 6-27 实验9_7_设计函数int getVowel(char str[],char vowel[]); (100 分)
  19. IT行业对学历要求如何?
  20. 华为aaa服务器是什么系统,华为aaa认证服务器-portal认证与aaa服务器什么关系

热门文章

  1. 每日学英语20040722
  2. UICollectionView简单使用
  3. 保险入门,我不推荐买保险
  4. 加入爱赏商圈 享专属优惠特权
  5. PowerJob使用
  6. UE4 皮革材质从简单到复杂
  7. 学校计算机报损报废申请表,学校财产登记报损上报制度
  8. 51nod 1238 最小公倍数之和 V3
  9. 图像处理 低频滤波器 笔记
  10. 回首神仙地,还道人间好