'成像流水线 'ModuleS —— ... —— ModuleV —— ELM_Show ModuleV 'ModuleS —— PXE_MTXTram3D DM() —— ModuleD —— FIT —— ModuleD —— PXE_MTXTram3D VM() —— ModuleV —— ELM_Show ModuleV '一个典型的成像步骤: '[矩阵准备] '生成D矩阵(负责可视角度、零点偏移变换,任何一个要素发生改变均需重新生成。) 'MTX_3DMixD pubD_Mx, pubD_My, pubD_Mz, pubD_Rx, pubD_Ry, pubD_Rz, pubD_Mtx_Mx, pubD_Mtx_Mr '生成V矩阵(视口比例、视口中心变换,任何一个要素发生改变均需重新生成。) 'MTX_3DMixV pubV_Vx, pubV_Vy, pubV_Vz, pubV_Sc, pubV_Mtx_Mx, pubV_Mtx_Mr '[模型变换] 'S层源模型通过“D矩阵”变换为D层动态模型 'PXE_MTXTram3D pubS_Pix_x, pubS_Pix_y, pubS_Pix_z, pubD_Mtx_Mx, pubD_Mtx_Mr, pubD_Pix_x, pubD_Pix_y, pubD_Pix_z 'D层动态模型通过透视过滤器变换 'FIT_PSV pubD_Pix_x, pubD_Pix_y, pubD_Pix_z, pubF_Va, pubF_Vd, pubD_Pix_x, pubD_Pix_y, pubD_Pix_z, pubD_Pix_s 'D层动态模型通过“V矩阵”变换为V层映射模型 'PXE_MTXTram3D pubD_Pix_x, pubD_Pix_y, pubD_Pix_z, pubV_Mtx_Mx, pubV_Mtx_Mr, pubV_Pix_x, pubV_Pix_y, pubV_Pix_z 'V层映射模型显示到粒子元素 'ELM_Show pubElm, pubV_Pix_x, pubV_Pix_y, pubV_Pix_z, pubD_Pix_s, pubS_Pix_cr, pubS_Pix_cg, pubS_Pix_cb, pubLg, pubWeb_FontSize 'Script 3D ELM部分:粒子生成及成像函数 Sub ELM_Show(pEl(), pVx(), pVy(), pVz(), pVs(), pSr(), pSg(), pSb(), pLg(), pFs) '粒子元素呈现 'pEl() 粒子对象数组 'pVx(), pVy(), pVz() V层坐标数组 'pVs() V层透视比例数组 'pSr(), pSg(), pSb() S层颜色数组(RGB) 'pLg() 颜色亮度数组 'pFs 粒子基准尺寸 tEn = UBound(pEl) For tEi = 0 To tEn With pubElm(tEi).style .left = pVx(tEi) .top = pVy(tEi) .zindex = pVz(tEi) + 100 .backgroundcolor = rgb(pSr(tEi) * pLg(tEi), pSg(tEi) * pLg(tEi), pSb(tEi) * pLg(tEi)) .width = pVs(tEi) * pFs & "px" .height = .width End With Next End Sub Function ELM_Create(pEn) '粒子元素创建(DIV元素) 'pEn 粒子数量 '返回 粒子元素数组 ReDim tElms(pEn) For tEi = 0 To pEn With document Set tElms(tEi) = .createElement("DIV") .body.insertAdjacentElement "beForeEnd", tElms(tEi) End With With tElms(tEi) .style.position = "absolute" .style.backgroundcolor = rgb(255,255,255) .style.fontsize = 0 .style.width = 10 .style.height = 10 End With Next ELM_Create = tElms End Function 'Script 3D FIT部分:3D非线过滤器 Sub FIT_PSV(iPx, iPy, iPz, iVa, iVd, oPx, oPy, oPz, oPs) '透视过滤器(简易算法) 'iPx, iPy, iPz 输入坐标数组 'iVa 透视角(暂时无效) 'iVd 透视距(这个值要大于模型的Z轴范围) 'oPx, oPy, oPz 输出坐标数组 'oPs 输出坐标透视比例 tPe = UBound(iPx) For tPi = 0 To tPe tZ = iPz(tPi) + iVd oPs(tPi) = tZ / iVd oPx(tPi) = iPx(tPi) * oPs(tPi) oPy(tPi) = iPy(tPi) * oPs(tPi) oPz(tPi) = iPz(tPi) Next End Sub 'Script 3D PXE部分:像素变换 Sub PXE_MTXTram3D(pPx(), pPy(), pPz(), pM(), pMr(), oPx(), oPy(), oPz()) '根据矩阵对坐标数组作变换 'pPx(), pPy(), pPz() 输入坐标数组 'pM(), pMr 矩阵 'oPx(), oPy(), oPz() 输出坐标数组 tPe = UBound(pPx) For tPi = 0 To tPe oPx(tPi) = pPx(tPi) * pM(0) + pPy(tPi) * pM(1) + pPz(tPi) * pM(2) + pM(3) oPy(tPi) = pPx(tPi) * pM(4) + pPy(tPi) * pM(5) + pPz(tPi) * pM(6) + pM(7) oPz(tPi) = pPx(tPi) * pM(8) + pPy(tPi) * pM(9) + pPz(tPi) * pM(10) + pM(11) Next End Sub 'Script 3D MIT部分:3D变换矩阵函数 Sub MTX_3DMixD(iMx, iMy, iMz, iRx, iRy, iRz, oMx, oMr) '3D联合变换D层 'D层:以原点为基准,对原始模型偏移、旋转变换。 'iMx, iMy, iMz 基准偏移值(变换前偏移量) 'iRx, iRy, iRz x, y, z轴旋转角度 'oMx, oMr 输出矩阵及矩阵宽 MTX_3DPixMove tMtx_MV, oMr, iMx, iMy, iMz '获得模型iMx,iMy,iMz偏移矩阵tMtx_MV MTX_3DPixRotZ tMtx_RTz, oMr, iRz '获得iRz角z轴旋转矩阵tMtx_RTz(原点) MTX_3DPixRotX tMtx_RTx, oMr, iRx '获得iRx角x轴旋转矩阵tMtx_RTx(原点) MTX_3DPixRotY tMtx_RTy, oMr, iRy '获得iRy角y轴旋转矩阵tMtx_RTy(原点) MTX_Multi tMtx_MV, oMr, tMtx_RTz, oMr, tMx, oMr '矩阵乘:oMx = tMtx_MV×tMtx_RTz oMx = tMx MTX_Multi oMx, oMr, tMtx_RTx, oMr, tMx, oMr '矩阵乘:oMx = oMx×tMtx_RTx oMx = tMx MTX_Multi oMx, oMr, tMtx_RTy, oMr, tMx, oMr '矩阵乘:oMx = oMx×tMtx_RTy oMx = tMx End Sub Sub MTX_3DMixV(iVx, iVy, iVz, iSc, oMx, oMr) '3D联合变换V层 'V层:视野缩放及视觉中心偏移。 'iVx, iVy, iVz 视觉中心点(变换后偏移量) 'iSc 缩放比例 'oMx, oMr 输出矩阵及矩阵宽 MTX_3DPixMulti tMtx_SC, oMr, iSc '根据iSc产生tMtx_SC缩放矩阵 MTX_3DPixMove tMtx_VM, oMr, iVx, iVy, iVz '根据iVx, iVy, iVz产生tMtx_VM视野偏移矩阵 MTX_Multi tMtx_SC, oMr, tMtx_VM, oMr, tMx, oMr '矩阵乘oMx = tMtx_SC×tMtx_VM oMx = tMx End Sub Sub MTX_3DPixMulti(oM(), oMr, iSc) '3D比例变换矩阵 'Mr=4, Me=15 '[ iSc, 0, 0, 0] '[ 0, iSc, 0, 0] '[ 0, 0, iSc, 0] '[ 0, 0, 0, 1] oMr = 4 ReDim oM(15) oM = Array(iSc, 0, 0, 0, 0, iSc, 0, 0, 0, 0, iSc, 0, 0, 0, 0, 1) End Sub Sub MTX_3DPixMove(oM(), oMr, iMx, iMy, iMz) '3D增量变换矩阵 'Mr=4, Me=15 '[ 1, 0, 0, iMx] '[ 0, 1, 0, iMy] '[ 0, 0, 1, iMz] '[ 0, 0, 0, 1] oMr = 4 ReDim oM(15) oM = Array(1, 0, 0, iMx, 0, 1, 0, iMy, 0, 0, 1, iMz, 0, 0, 0, 1) End Sub Sub MTX_3DPixRotZ(oM(), oMr, iA) 'Z轴旋转矩阵(对于XY平面的旋转变换) 'Mr=4, Me=15 '[ cos(a),-sin(a), 0, 0] '[ sin(a), cos(a), 0, 0] '[ 0, 0, 1, 0] '[ 0, 0, 0, 1] oMr = 4 ReDim oM(15) tR = Radian(iA) : tSin = sin(tR) : tCos = cos(tR) oM = Array(tCos, -tSin, 0, 0, tSin, tCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1) End Sub Sub MTX_3DPixRotY(oM(), oMr, iA) 'Y轴旋转矩阵(对于XZ平面的旋转变换) 'Mr=4, Me=15 '[ cos(a), 0, sin(a), 0] '[ 0, 1, 0, 0] '[-sin(a), 0, cos(a), 0] '[ 0, 0, 0, 1] oMr = 4 ReDim oM(15) tR = Radian(iA) : tSin = sin(tR) : tCos = cos(tR) oM = Array(tCos, 0, tSin, 0, 0, 1, 0, 0, -tSin, 0, tCos, 0, 0, 0, 0, 1) End Sub Sub MTX_3DPixRotX(oM(), oMr, iA) 'X轴旋转矩阵(对于ZY平面的旋转变换) 'Mr=4, Me=15 '[ 1, 0, 0, 0] '[ 0, cos(a), sin(a), 0] '[ 0,-sin(a), cos(a), 0] '[ 0, 0, 0, 1] oMr = 4 tR = Radian(iA) tR = Radian(iA) : tSin = sin(tR) : tCos = cos(tR) oM = Array(1, 0, 0, 0, 0, tCos, tSin, 0, 0, -tSin, tCos, 0, 0, 0, 0, 1) End Sub Sub MTX_Multi(iMa(), iMar, iMb(), iMbr, oMc(), oMcr) '矩阵乘法 'iMa(), iMb() 输入矩阵iMa()×iMb() 'iMar, Mbr 输入矩阵列数 'oMc() 输出结果矩阵 'oMcr 输出结果矩阵列数 tN = (iMar = ((UBound(iMb) / iMbr) + 1)) And (iMar - 1) If CBool(tN) Then tM = Ubound(iMa) / iMar tP = iMbr - 1 oMcr = tP + 1 ReDim oMc(oMcr * (tM + 1) - 1) For tMi = 0 To tM For tPi = 0 To tP For tNi = 0 To tN '算法概念注释:C(Mi, Pi) = C(Mi, Pi) + A(Mi, Ni) * B(Ni, Pi) tMv = MTX_VGet(oMc, oMcr, tMi, tPi) + MTX_VGet(iMa, iMar, tMi, tNi) * MTX_VGet(iMb, iMbr, tNi, tPi) MTX_VSet oMc, oMcr, tMi, tPi, tMv Next Next Next End If End Sub '矩阵格式读写函数。 '注释:矩阵格式以一维数组保存。变换公式为M(X,Y) = N(Y * Mr + X),Mr为矩阵列宽。 '格式:[0,0][0,1]...[0,n];[1,0][1,1]...[1,n];...;[n,0][n,1]...[n,n] '3D矩阵格式 'Mr=4, Me=15 'x'=x[0,0]+y[0,1]+z[0,2]+[0,3] 'y'=x[1,0]+y[1,1]+z[1,2]+[1,3] 'z'=x[2,0]+y[2,1]+z[2,2]+[2,3] 'c'=x[3,0]+y[3,1]+z[3,2]+[3,3] Sub MTX_VSet(pM(), pMr, pX, pY, pMv) '矩阵置值 'pM() 矩阵 'pMr 矩阵列宽 'pX 矩阵列 'pY 矩阵行 'pMv 矩阵元素设置值 tMi = pY * pMr + pX pM(tMi) = pMv End Sub Function MTX_VGet(pM(), pMr, pX, pY) '矩阵取值 'pM() 矩阵 'pMr 矩阵列宽 'pX 矩阵列 'pY 矩阵行 '返回 矩阵元素值 tMi = pY * pMr + pX MTX_VGet = pM(tMi) End Function Function Radian(pA) '角度转弧度 'pA 角度 '返回 弧度 'R = A * Pi / 180 = A * 71 / 4068 '(Pi取355/113) Radian = pA * 71 / 4068 End Function

Script3D引擎核心注释版相关推荐

  1. MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-01

    MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-01 1. MySQL体系结构和存储引擎 1.1 定义数据库和实例 数据库database: 物理操作系统文件或其他形式文件类型的集合. 当使 ...

  2. python 重写断言_历时四年,Dropbox 用 Rust 重写同步引擎核心代码

    开源 GO 语言工具库.研究 iOS 和 Android 的 C++ 跨平台开发,花费五年时间从云平台向数据中心反向迁移-Dropbox 从未停止对技术的"折腾".如今,这家公司又 ...

  3. 从GitHub火到了博客,共计1658页的《Java岗面试核心MCA版》,拿走不谢

    2019年我凭借一份<Java面试核心知识点>成功拿下了阿里.字节.小米等大厂的offer,两年的时间,为了完成我给自己立的flag(拿下一线互联网企业offer大满贯),即使在职也一直在 ...

  4. 使用PyTorch构建GAN生成对抗网络源码(详细步骤讲解+注释版)02 人脸识别 上

    文章目录 1 数据集描述 2 GPU设置 3 设置Dataset类 4 设置辨别器类 5 辅助函数与辅助类 1 数据集描述 此项目使用的是著名的celebA(CelebFaces Attribute) ...

  5. 商品期货策略 之 Python 精简多品种 MACD 趋势策略框架(注释版)

    Python 精简多品种 MACD 趋势策略框架(注释版) Python超级精简的多品种MACD趋势策略框架, 代码超级精简, 注释超级详细啰嗦. >_<! 需要引用 python版CTP ...

  6. 从 GitHub 火到 CSDN 共计 1658 页的 Java 岗面试核心 PDF 版,拿走不谢

    2019 年 10 月 16 日,我凭借一份<Java 面试核心知识点>成功拿下了阿里.字节.小米等大厂的 offer,两年的时间,为了完成我给自己立的 flag(拿下一线互联网企业 of ...

  7. MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-02

    MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-02 6. 锁 ​ 人们认为行级锁总会增加开销.实际上,只有当实现本身会增加开销时,行级锁才会增加开销.InnoDB 存储引擎不需要锁升级,因 ...

  8. 'IOKING' TCP Transmission Server Engine ('云猴'©TCP通讯服务器引擎)(预告版)

    关键词: IOKING IOCP TCP  Transmission Server Engine Lock Free Interlocked 云猴完成端口TCP通讯服务器引擎 无锁 原子锁(函数) ' ...

  9. spring 注释_Spring核心注释

    spring 注释 介绍: org.springframework.beans.factory.annotation和org.springframework.context.annotation包中存 ...

最新文章

  1. JavaEE开发之Spring中的依赖注入与AOP编程
  2. 深圳.Net俱乐部2.26活动资源下载之——从SmartClient到ClickOnce
  3. 一道关于回文的笔试题
  4. python全栈开发 * 14 知识点汇总 * 180530
  5. oracle erp 库存相关,oracle erp库存模块表(INV)
  6. 向顺序容器vector、string、deque、list、forward_list中插入\删除元素时迭代器、引用、指针的变化
  7. mysql5.6允许远程服务器访问数据库
  8. 所有的shadow map的名称
  9. Http\Https\Socket
  10. crt脚本怎么添加等待时间_如何在重启或启动时执行命令或脚本 | Linux 中国
  11. window mysql 同步复制_Window环境下配置MySQL 5.6的主从复制、备份恢复
  12. Android 文件管理器 Android文件管理器源代码
  13. 换服务器原网站数据会丢失吗,ecs服务器更换操作系统后原服务器数据还在吗?...
  14. 处女座的约会(思维)
  15. HaaS EDU场景式应用学习 - 光照信息屏
  16. 定投计算器和年化利率计算器
  17. 微软面试案例分析,绝!
  18. 基础测绘1:10000成果检验需注意的问题
  19. iOS 抽奖程序 可指定版
  20. 数字图像处理中的车牌识别

热门文章

  1. Apple Final Cut Pro 10.4.8
  2. 掌财社:前端接口怎么实现canvas动态图形效果?方法详情!
  3. 一毕业就被抢光的​高薪专业,竟然是这些!
  4. TensorRT+yolov5:yolov5添加小目标检测层2--TensorRT部署
  5. arcgis中hgt格式的dem数据tiff转换
  6. MapReduce求两个人的共同好友算法
  7. [经验分享] 分享一波超级良心、好用的趣味网站!
  8. mysql找不到my.ini的解决方法
  9. 爬虫项目——Scrapy爬取Boss直聘
  10. Red Hat Linux 基础命令大全