WEB 3D JS 使用【3Dmol.js】

这篇具有很好参考价值的文章主要介绍了WEB 3D JS 使用【3Dmol.js】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在web使用3d查看器,很多时候我们会优先考虑是不是要用wegGL又或者Three.js

这里分享一个在生物和化学上比较简单的分子3D查看器 3Dmol.js

先看下这句话:

3D view 查看器 default pdb; can be pdb, sdf, xyz, mol2, or cube

如果不是以上的格式,那么嘿嘿嘿,不要担心,如果代码能力足够或者有其他同事 帮忙,自己对相关 专业的数据格式  也比较懂,可自己写代码进行格式转换哦

官网教程地址:https://3dmol.org/doc/tutorial-code.html

先看看官网的内容,如果能看懂可以自己选择集成方式。

如果你想偷个懒,那就看到最后吧。WEB 3D JS 使用【3Dmol.js】

官网教程

创建 3DMol 实例

首先,确保您的 HTML 文档链接到 3Dmol 代码。

<script  src = "http://3Dmol.csb.pitt.edu/build/3Dmol-min.js" "></script>

现在在 HTML 文档中创建一个容器标签来保存可视化。

<div  id = "container-01"  class = "mol-container"> </div>

注意:3Dmol 将采用容器的大小,因此我们需要确保已明确设置此大小(即使用 CSS 或内联style属性)。

<style>
.mol-container {
  width: 60%;
  height: 400px;
  position: relative;
}
</style>

加载网页后,我们可以创建一个新的 3Dmol 实例。

为了确保一切正常,我们将添加一个球体,设置相机,渲染场景,然后添加缩放。

<script>
$(function() {
  let element = $('#container-01');
  let config = { backgroundColor: 'orange' };
  let viewer = $3Dmol.createViewer( element, config );
  viewer.addSphere({ center: {x:0, y:0, z:0}, radius: 10.0, color: 'green' });
  viewer.zoomTo();
  viewer.render();
  viewer.zoom(0.8, 2000);
});
</script>

如果这有效,您应该会在橙色背景前看到一个相当吸引人的绿色球。

WEB 3D JS 使用【3Dmol.js】

是的 没错 我就从官网翻译的,你觉得我在抄袭?

WEB 3D JS 使用【3Dmol.js】

no~ no~ no~ 当然不,我这波啊,这波我在大气层,这玩意实在够老够粗糙,我怕这个东西哪天直接凉了,一点东西都找不到,那多可惜啊。

那我们继续哈,官网里面还给了一个demo,他长这样

        WEB 3D JS 使用【3Dmol.js】

 代码是这样的:

  let viewer = $3Dmol.createViewer( element, config );
  let pdbUri = '/path/to/your/pdb/files/1ycr.pdb';
  jQuery.ajax( pdbUri, { 
    success: function(data) {
      let v = viewer;
      v.addModel( data, "pdb" );                       /* load data */
      v.setStyle({}, {cartoon: {color: 'spectrum'}});  /* style all atoms */
      v.zoomTo();                                      /* set camera */
      v.render();                                      /* render scene */
      v.zoom(1.2, 1000);                               /* slight zoom */
    },
    error: function(hdr, status, err) {
      console.error( "Failed to load PDB " + pdbUri + ": " + err );
    },
  });

我自己做了个HTML将js和3D查看器属性作为一个独立的HTML当成一个查看工具再嵌到前端项目

是的,你没看错,哈哈哈我就是觉得这样易于维护和调整,我还不需要考虑前端是 vue 还是 react 的问题,哪个项目我都引入 html ,用 nginx 给 html 做了个域名指向,这就是我的思路。

比如我还可以通过js从访问地址中处理:

$(function(){
      //https://XXX.com?uuid=XXX
      var search = window.location.search;
      if(search != ""){
          loadView()  
      }
});

这样我就可以把 html 完全封装一个简易的3D查看器

废话不多说,上代码和注释,首先网页头部如下:

<meta http-equiv="Access-Control-Allow-Origin" content="*" />
<meta http-equiv="Content-Security-Policy" 
content="upgrade-insecure-requests">
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://3Dmol.org/build/3Dmol-min.js"></script>
<!-- 方便大家自己本地测试 写一个文件选择器 -->
<input type="file" name="file" value="上传文件" onchange="loadView(this)" />
<!-- 3D view 查看器 -->
<div id="container-01" style="width: 50%;height: 50%;min-height: 10px;"
class='viewer_3Dmoljs' data-backgroundcolor='0xffffff' 
data-style='stick'></div>

欧服抠死~  前面 meta 分别是 跨域 和允许 http 吗,一般我们都会用 https,但如果使用了 负载均衡 那么就会涉及 http转发 等问题喽,自己决定加不加哈  =_= !

哦吼 我还是建议后面你做完了把文件下载下来,万一哪天网址 凉了呢 

嗨 雄蝶(兄弟) 别着急 复制代码,

接下来就需要相对 专业 比较清楚的知识点了,

比如:cartoon surface 这里就不展开了,英语不好就百度翻译一下吧,我经常这么干..........

WEB 3D JS 使用【3Dmol.js】

接下来就是js代码之 pdb : 

function loadView(that){
        var input = that;
        var reader = new FileReader();
        reader.readAsText(input.files[0]);
        reader.onload = function() {
            temp_str = reader.result;
            var data = temp_str
            console.log(data)
            let element = $('#container-01');
            let config = { backgroundColor: 'gray' };
            let viewer = $3Dmol.createViewer(element, config);
            viewer.addModel(data, "pdb").setStyle({}, {"cartoon": { color: '#17ac80'} });
            viewer.addSurface($3Dmol.SurfaceType.VDW, {'opacity':0.5, color: 'white'});
            viewer.zoomTo();
            viewer.render();
            viewer.zoom(1, 2000);
        }
    }

接下来就是js代码之 mol2

function loadView(that){
        var input = that;
        var reader = new FileReader();
        reader.readAsText(input.files[0]);
        reader.onload = function() {
            temp_str = reader.result;
            var data = temp_str
            console.log(data)
            let element = $('#container-01');
            let config = { backgroundColor: 'gray' };
            let viewer = $3Dmol.createViewer(element, config);
            viewer.addModel(data, "mol2").setStyle({},{stick:{color: 'spectrum',radius:0.5}});
            viewer.addModel(data, "mol2").setStyle({}, {sphere: { color: 'spectrum', radius: 0.5}});
            viewer.zoomTo();
            viewer.render();
            viewer.zoom(1, 2000);
        }

    }

其最糟糕的点就是官网的内容少的可怜,当我想要知道用户点了哪个分子的时候,及其痛苦,好在找到了回调方法:

viewer.setClickable({}, true, function(){
                console.log(this)
            });

授人以鱼不如授人以渔

所以我决定告诉大家我在遇到这种问题的方式:

1. 我先在官网找了一下,还是有一点内容的

WEB 3D JS 使用【3Dmol.js】

2. 我很清楚我要找回调函数这一类的,所以我就开始搜索 function 类型的,果然找到了些属性

WEB 3D JS 使用【3Dmol.js】

3. 我欣喜若狂的同事发现更操蛋的是他没有告诉我在

        哪里使用,如何使用?????MMP

4. 幸好我知道他们有 github,同时我又知道 github 可以搜索,所以我就在他们githun仓库

http://​https://github.com/3dmol/3Dmol.js​

        疯狂搜索 callback

WEB 3D JS 使用【3Dmol.js】

5. 只有几条,然后我将目标换成了 clickable ,终于让我在第二页找到了我想要的

WEB 3D JS 使用【3Dmol.js】

我将如何使用和查找的方式告诉大家,方便大家在做系统时有足够的可扩展性,方便大家属性新的属性和使用

开头提到了文件格式的转换,人生苦短我用Python,额 其实我之前是个Java架构师,哈哈哈哈,我是用Java写的,有需要大家留言,我再写一篇如何用Python处理格式转换(其实就是知道文件格式然后一直拼接字符串的逻辑)文章来源地址https://www.toymoban.com/news/detail-418470.html

到了这里,关于WEB 3D JS 使用【3Dmol.js】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WEB 3D技术 three.js 聚光灯

    本文 我们来说说 点光源和聚光灯 点光源 就像一个电灯泡一样 想四周发散光 而聚光灯就像手电筒一样 像一个方向射过去 距离越远范围越大 光越弱 我们先来看一个聚光灯的效果 我们可以编写代码如下 SpotLight 聚光灯 然后通过 position 设置一下光的位置 运行代码如下 目前看

    2024年01月21日
    浏览(50)
  • WEB 3D技术 three.js 3D贺卡(1) 搭建基本项目环境

    好 今天 我也是在网上学的 带着大家一起来做个3D贺卡 首先 我们要创建一个vue3的项目、 先创建一个文件夹 装我们的项目 终端执行 vue create 项目名称 例如 我的名字想叫 greetingCards 就是 因为这个名录 里面是全部都小写的 然后 下面选择 vue3 然后按下回车 等待项目创建完成

    2024年01月19日
    浏览(53)
  • WEB 3D技术 three.js 3D贺卡(3) 点光源灯光动画效果

    经过 上文 WEB 3D技术 three.js 3D贺卡(2) 加入天空与水面效果 我们将水面 和 天空的效果搭建了一下 那么 我们将四周 点光源的效果做一下 首先 我们将 renderer.toneMappingExposure 的值 改为 0.1 让效果看着明显一点 这样 整个界面就会暗下来 然后 我们在任意位置 加入代码 创建一个点

    2024年01月19日
    浏览(53)
  • WEB 3D技术 three.js 3D贺卡(2) 加入天空与水面效果

    上文 WEB 3D技术 three.js 3D贺卡(1) 搭建基本项目环境 我们简单搭了一个贺卡雏形 然后 我们要引入一个hdr的一个天空的效果 所以 我们需要在代码中导入 RGBELoader 这里 大家可以选择下载我的hdr资源 WEB 3D技术 three.js 3D贺卡 天空 hdr资源 下载好之后呢 我们在外面套一个 xhdr 文件夹

    2024年01月18日
    浏览(63)
  • WEB前端3D变换效果以及如何应用js代码

    变换效果3d 过渡属性 动画 首先JavaScript是一个 动态的解释型 编程语言。 所谓动态就是指,代码在运行时变量的数据类型可以发生变化。(静态就想类似c、java、go这种语言他们需要创建变量时就确定变量的数据类型,并且不可随意更改) 所谓的解释型语言,是指代码运行时

    2024年01月23日
    浏览(44)
  • web上构建3d效果 基于three.js的实例

    web页面上提供3D效果,可以为页面提供不少色彩,H5之后canvas 为webgl提供了基础,使得在web页面使用JS也能写出3D的效果,其中three.js作为封装了图形函数 的框架,为入门提供了方便,效果图如下。   以上是官方例子中其中的三个,没接触过的朋友肯定会觉得很神奇,事实上

    2024年02月05日
    浏览(47)
  • web3d-three.js场景设计器-天空包围盒-TWEEN.js

    THREE.JS 实现场景天空包围盒,为了让场景背景更具体,而不是呆板的纯色,可以给厂家添加围绕的包围盒。 这里使用球体来实现,球体中央则是场景 给球体添加天空的渐变色 加入场景 代码如下 function createSky( hemiLight) {   const vertexShader = `varying vec3 vWorldPosition;     void main

    2024年01月23日
    浏览(46)
  • Web3D开发经验分享:基于Three.js的Web3D建模案例

    个人主页: 左本Web3D,更多案例预览请点击==》 在线案例 个人简介:专注Web3D使用ThreeJS实现3D效果技巧和学习案例 💕 💕积跬步以至千里,致敬每个爱学习的你。喜欢的话请三连,有问题请私信或者加微信         随着互联网的快速发展,Web3D技术也越来越成熟,越来越

    2024年02月13日
    浏览(49)
  • 如何用Three.js + Blender打造一个web 3D展览馆

    作者:vivo 互联网前端团队- Wei Xing  运营活动新玩法层出不穷,web 3D炙手可热,本文将一步步带大家了解如何利用Three.js和Blender来打造一个沉浸式web 3D展览馆。 3D展览馆是什么,先来预览下效果: 看起来像个3D冒险类手游,用户可以操纵屏幕中央的虚拟摇杆,以第一人称视角

    2024年02月16日
    浏览(55)
  • php的性能要比node.js高很多吗?

    在当今的编程世界中,PHP和Node.js是两种广泛使用的服务器端编程语言。虽然它们都用于构建高效的网络应用程序,但关于它们性能的争论一直存在。有些人认为PHP的性能要比Node.js高很多,而另一些人则持相反意见。 性能通常指的是计算机程序或系统在特定任务上执行的速度

    2024年01月23日
    浏览(74)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包