'成像流水线 '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. golang设置默认地区
  2. 使用VMware Server迁移证券公司的Netware服务器
  3. 通用mapper笔记
  4. JVM学习笔记之-对象的实例化,内存布局与访问定位,直接内存(Direct Memory)
  5. java手动注册filter,SpringBoot如何注册Servlet、Filter、Listener的几种方式
  6. 基于Spring框架的Shiro配置
  7. IOS开发UI篇—导航控制器属性和基本使用
  8. Code Review:C#与JAVA的哈希表内部机制的一些区别
  9. Mac OS 10.12 - 如何关闭Rootless机制?
  10. 关于字符编码的一点学习。
  11. .Net转Java自学之路—基础巩固篇二十二(XML)
  12. 林正隆(coolfire)
  13. 京东商城登录逻辑分析,实现程序登录京东商城
  14. Win10系统下进行磁盘分区
  15. 通过图片获取地理位置
  16. Bellman_Ford的负环
  17. 手机如何压缩jpg图片的大小?手把手教你快速压缩jpg格式图片
  18. 报错解决:Reason: Failed to determine a suitable driver class
  19. WinSetupFromUSB制作多系统U盘引导启动
  20. java职业发展路线图_从程序员到CTO的Java技术路线图 JAVA职业规划 JAVA职业发展路线图 系统后台框架图、前端工程师技能图 B2C电子商务基础系统架构解析...

热门文章

  1. 可以两人同步记录的家庭记账类app有哪些?
  2. AWS S3 挂载到EC2
  3. 谁拿了最多奖学金 C++
  4. Mipmap 和 过滤 (看完不理解你打我)
  5. 两次拉格朗日中值证明曲线凹凸性定理_2016514
  6. 电脑任务栏卡住不能用
  7. xcode swift 单元测试 test
  8. 【计算机毕设】Java课程设计
  9. Nodejs教程笔记(五)fs续 读取 写入 管道流
  10. 2022年天梯赛比赛真题,L1基础题,C语言,没有算法的那种