当前位置: 首页 > news >正文

Three读取pdb文件创建分子结构图实例

基础环境搭建:(TrackballControls)

在这里插入图片描述

modles文件夹下新建pdb文件夹,复制官方文件夹下.pdb文件:

在这里插入图片描述

控制台打印看下pdb文件输出内容:

PDBLoader : A loader for loading a .pdb resource.The Protein Data Bank file format is a textual file describing the three-dimensional structures of molecules.

在这里插入图片描述

读取建立原子点阵:

Buffergeometry:是面片、线或点几何体的有效表述。包括顶点位置,面片索引、法相量、颜色值、UV 坐标和自定义缓存属性值。使用 BufferGeometry 可以有效减少向 GPU 传输上述数据所需的开销。
.getAttribute ( name : String ) : BufferAttribute
返回指定名称的 attribute。

BufferAttribute:这个类用于存储与BufferGeometry相关联的 attribute(例如顶点位置向量,面片索引,法向量,颜色值,UV坐标以及任何自定义 attribute )。 利用 BufferAttribute,可以更高效的向GPU传递数据。
.getX ( index : Integer ) : Number
获取给定索引的矢量的第一维元素 (即 X 值)。
.getY ( index : Integer ) : Number
获取给定索引的矢量的第二维元素 (即 Y 值)。
.getZ ( index : Integer ) : Number
获取给定索引的矢量的第三维元素 (即 Z 值)。

      let colors = pdb.geometryAtoms.getAttribute('color')
      let positions = pdb.geometryAtoms.getAttribute('position')
      const color = new THREE.Color()
      const position = new THREE.Vector3()
      for (let i = 0; i < positions.count; i++) {
           color.r = colors.getX(i)
           color.g = colors.getY(i)
           color.b = colors.getZ(i)
           position.x = positions.getX(i)
           position.y = positions.getY(i)
           position.z = positions.getZ(i)
           const geometry = new THREE.IcosahedronGeometry(0.1, 2)
           const material = new THREE.MeshPhongMaterial({
               color: color
           })
           const atom = new THREE.Mesh(geometry, material)
           atom.position.copy(position)
           scene.add(atom)
      }

在这里插入图片描述

读取建立原子连接:
在这里插入图片描述

分析geometryBond可知道,每三个分量确定一个点,每两个点确定一条纽带。150个分量即25条纽带。而positions.count=50,则geoometryBond.positions数组以三个分量为一点为一组排列。

.lerp ( v : Vector3, alpha : Float ) : this
v - 朝着进行插值的Vector3。
alpha - 插值因数,其范围通常在[0, 1]闭区间。
在该向量与传入的向量v之间的线性插值,alpha是沿着线的长度的百分比 —— alpha = 0 时表示的是当前向量,alpha = 1 时表示的是所传入的向量v。

.lookAt ( vector : Vector3 ) : undefined
旋转物体使其在世界空间中面朝一个点,这一方法不支持其父级被旋转过或者被位移过的物体。

    positions = pdb.geometryBonds.getAttribute('position')
    const start = new THREE.Vector3()
        const end = new THREE.Vector3()
        for (let i = 0; i < positions.count; i += 2) {
            start.x = positions.getX(i)
            start.y = positions.getY(i)
            start.z = positions.getZ(i)
            end.x = positions.getX(i + 1)
            end.y = positions.getY(i + 1)
            end.z = positions.getZ(i + 1)
            const geometry = new THREE.BoxGeometry(0.05, 0.05, 0.05)
            const material = new THREE.MeshPhongMaterial({
                color: 0xffffff
            })
            const bond = new THREE.Mesh(geometry, material)
            bond.position.copy(start)
            bond.position.lerp(end, 0.5)
            bond.scale.z = start.distanceTo(end) * 10
            bond.lookAt(end)//指定x-y面朝向
            scene.add(bond)
        }

在这里插入图片描述

原子添加标签:

CSS2DRenderer:将三维物体和基于HTML的标签相结合的渲染器。在这里,各个DOM元素也被包含到一个CSS2DObject实例中,并被添加到场景图中。

CSS2DRrenderer渲染器设置同WebGLRenderer渲染器设置。注意
labelRenderer.domElement.style.pointerEvents = 'none';//过滤掉上层renderer-div的鼠标响应?
    let atoms = pdb.json.atoms
    for (let i = 0; i < atoms.length; i++) {
        const atom = atoms[i]
        const text = document.createElement('div')
        text.style.color = 'rgb(' + atom[3][0] + ',' + atom[3][1] + ',' + atom[3][2] + ')'
        text.innerText = atom[4]

        const label = new CSS2DObject(text)
        label.position.set(atom[0], atom[1], atom[2])
        scene.add(label)
    }

在这里插入图片描述

相关文章:

  • Spring Data JPA @Query注解
  • 猿创征文|Python快速刷题网站——牛客网 数据分析篇(十四)
  • 【元宇宙】元宇宙的定义、特征、要素及架构
  • 4、“组件协作“模式
  • 刚开始做自媒体,无从下手,有什么好的建议吗?
  • 2022 华为杯研赛F题思路 研究生数学建模
  • Opencv项目实战:12 你这背景太假啦!
  • python解CCF-CSP真题《202209-1 如此编码》
  • 数据分析可视化08 案例 2:历史数据变化趋势图设计
  • Redis-缓存击穿
  • 信息学奥赛一本通:2072:【例2.15】歌手大奖赛
  • 【Linux】进程控制 (万字)
  • ARMv9新特性:虚拟内存系统架构 (VMSA) 的增强功能
  • 【JavaSE】之流程控制与方法
  • SpringCloud——网关1
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • android图片蒙层
  • ECS应用管理最佳实践
  • JS数组方法汇总
  • LeetCode算法系列_0891_子序列宽度之和
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • python大佬养成计划----difflib模块
  • Redis字符串类型内部编码剖析
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • Vue2.0 实现互斥
  • WebSocket使用
  • 不上全站https的网站你们就等着被恶心死吧
  • 关于Flux,Vuex,Redux的思考
  • 简析gRPC client 连接管理
  • 今年的LC3大会没了?
  • 浅谈Golang中select的用法
  • 微服务框架lagom
  • 微信公众号开发小记——5.python微信红包
  • 学习JavaScript数据结构与算法 — 树
  • 智能网联汽车信息安全
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • Nginx实现动静分离
  • python最赚钱的4个方向,你最心动的是哪个?
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • (6)添加vue-cookie
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (论文阅读30/100)Convolutional Pose Machines
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (转) Face-Resources
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)菜鸟学数据库(三)——存储过程
  • (转)为C# Windows服务添加安装程序
  • (转)原始图像数据和PDF中的图像数据
  • (转载)Google Chrome调试JS
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET DataGridView数据绑定说明