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

贵州贵阳网站开发微商推广哪家好

贵州贵阳网站开发,微商推广哪家好,扁平化手机网站模板,服务器做网站数据库系列文章 一、逆向工程 Sketchup 逆向工程(一)破解.skp文件数据结构 Sketchup 逆向工程(二)分析三维模型数据结构 Sketchup 逆向工程(三)软件逆向工程从何处入手 Sketchup 逆向工程(四&#xf…

系列文章

一、逆向工程
Sketchup 逆向工程(一)破解.skp文件数据结构
Sketchup 逆向工程(二)分析三维模型数据结构
Sketchup 逆向工程(三)软件逆向工程从何处入手
Sketchup 逆向工程(四)破解的乐趣 钩子 外挂 代码注入

二、OpenGL渲染模型
Python+OpenGL绘制3D模型(一)Python 和 PyQt环境搭建
Python+OpenGL绘制3D模型(二)程序框架PyQt5
Python+OpenGL绘制3D模型(三)程序框架PyQt6
Python+OpenGL绘制3D模型(四)绘制线段
Python+OpenGL绘制3D模型(五)绘制三角型
Python+OpenGL绘制3D模型(六)材质文件载入和贴图映射
Python+OpenGL绘制3D模型(七)制作3dsmax导出插件
Python+OpenGL绘制3D模型(八)绘制插件导出的插件
Python+OpenGL绘制3D模型(九)完善插件功能: 矩阵,材质,法线
Python+OpenGL 杂谈(一)

三、成果
疫情期间关在家里实在没事干,破解了Sketchup,成功做出可以读取并显示.skp文件的程序SuViewer

前言

Sketchup作为目前设计院最为流行的设计软件(非工程制图软件),深受设计师的喜爱,软件小巧,而功能强大,有不少为之开发的插件应运而生,不过呢,关于底层数据结构和工作原理相关的文章少之又少,本文意在填补一下这方面的空缺,通过逆向软件分析,展示软件内部奥秘。本文用到的工具:IDA Pro,Immunity Debugger,Visual Studio (逆向工程三件套)数据结构属于知识产权的核心机密:


在这里插入图片描述

文章目录

  • 系列文章
  • 前言
    • 一、介绍
    • 二、使用方法
    • 三、插件源代码
  • 系列文章预告

一、介绍

3dsmax支持python2.7,所以同样可以用python编写插件,不需要编译安装,一键执行,非常方便,
编写插件是个比较复杂的过程,涉及3dsmax中模型、材质、贴图、等数据的组织结构,以后专门用一个专题详细介绍,有兴趣的同学可以仔细读一下插件源代码
插件和程序需要交换文件数据格式,这里定义一个CModel,数据保存使用了python内置的pickle,也是一键保存,在程序里一键载入,不需要专门编写读写文件的代码

二、使用方法

1、下载源代码,保存到:c:/temp/maxplus_export_sel_model.py
2、打开3dsmax,菜单 》Scripting 》 MAXScript Listener
3、运行 python.ExecuteFile “C:/temp/maxplus_export_sel_model.py”

如果看到如下输出,说明已经导出成功

find INode: Teapot001, <0X0000000048D3CBB0>, class:Teapot
---ProcMesh()---
numVertics:530
numFaces:1024
#success

模型导出到 “c:/temp/CModel.pickle”

注意:保证c:/temp存在,否则导出失败

三、插件源代码

maxplus_export_sel_model.py

import MaxPlus
import pickle
from CModel import CModel, CMesh, CTriangle, CVector3################################
#                   FILE DESCRIPTION
#  文件描述:CModelExport
#  对应文章:Python+OpenGL绘制3D模型(七) 制作3dsmax导出插件
#  作者:李航 Lihang
#  使用方法:
#   1、选择要导出的模型
#   2、在命令行窗口中输入
#          python.ExecuteFile "C:/_proj/SuViewer/articles/step3/maxplus_export_sel_model.py"
#   3、把命令行拖入工具栏可以生成快捷方式,方便下次使用
#   4、测试可使用的版本:3dsmax2016
#   ELSE..
################################# 注意: 保证c:/temp目录存在,否则无法导出
EXPORT_PATH_FILE = "c:/temp/CModel.pickle"############
# CModelExport
############  
class CModelExport:def __init__(self):self.list_mats = []############# export#   插件主入口############  def export(self):model = CModel()for n, obj, triObj in self.EnumSeletciontGeometry():print ("find %s, class:%s"%(n, obj.GetClassName()) )mesh = triObj.GetMesh()out_mesh = self.ProcMesh(n, mesh)model.list_mesh.append(out_mesh)with open(EXPORT_PATH_FILE,  "wb") as hf:pickle.dump(model,  hf,  2)############# EnumSeletciontGeometry#   1、遍历选择的物体#   2、生成列表sel_list并返回############  def EnumSeletciontGeometry(self):sel_list = []for n in MaxPlus.SelectionManager.Nodes:        # objectobj = n.EvalWorldState().Getobj()if obj.CanConvertToType(MaxPlus.ClassIds.TriMeshGeometry):triObj = obj.ConvertToType(MaxPlus.ClassIds.TriMeshGeometry)item = (n, obj, MaxPlus.TriObject._CastFrom(triObj))sel_list.append(item)#print ("find %s, class:%s"%(n, obj.GetClassName()) )else:print("can't conv triMesh, Type is:%s" % obj.GetClassName())return sel_list############# ProcMesh#   1、处理max中的模型#   2、转成需要的CModel数据############def ProcMesh(self, node, mesh):print("---ProcMesh()---")#=====================# Color#=====================new_mesh = CMesh()color1 = node.GetWireColor()new_mesh.color = (color1.GetR(), color1.GetG(), color1.GetB())#=====================# Vertices#=====================num_verts = mesh.GetNumVertices()print ("numVertics:%d"%num_verts)for i in range(num_verts):point = mesh.GetVertex(i)nv = CVector3(point.X, point.Y, point.Z)new_mesh.list_vertices.append(nv)#=====================# Triangles#=====================num_faces = mesh.GetNumFaces()print ("numFaces:%d"%num_faces)for i in range(num_faces):tri = mesh.GetFace(i)vi1 = tri.GetVert(0)vi2= tri.GetVert(1)vi3 = tri.GetVert(2)ev1 = True if tri.GetEdgeVis(0) else Falseev2 = True if tri.GetEdgeVis(1) else Falseev3 = True if tri.GetEdgeVis(2) else Falsent = CTriangle()nt.a = (vi1, 0, 0)nt.b = (vi2, 0, 0)nt.c = (vi3, 0, 0)norm = mesh.FaceNormal(i)nt.matId = tri.GetMatID()nt.faceNormal = CVector3(norm.X, norm.Y, norm.Z)nt.smGroup = tri.GetSmGroup()nt.edgevis = (ev1, ev2, ev3)new_mesh.list_tris.append(nt)return new_mesh############
# Main
#   1、创建插件导出对象CModelExport
#   2、执行export
############
modelExport = CModelExport()
modelExport.export()

CModel.py

class CModel:def __init__(self):self.list_mesh = []class CMesh:def __init__(self):self.name = ""self.color = (0, 0, 0)self.list_vertices = []self.list_tris = []class CTriangle:def __init__(self):self.a=(0, 0, 0)self.b=(0, 0, 0)self.c=(0, 0, 0)self.faceNormal = CVector3(0, 0, 0)self.matId = 0self.smGroup = 0self.edgevis=(True, True, True)class CVector3:def __init__(self, x, y, z):self.x=xself.y=yself.z=z

系列文章预告

目标是一个完善的Viewer,能够显示Sketchup的.skp文件中的3D模型
在这里插入图片描述

Corona渲染器照片级渲染效果
在这里插入图片描述

http://www.ds6.com.cn/news/108613.html

相关文章:

  • 凡科做的网站好吗网站长尾关键词排名软件
  • 做购物平台网站需要注意什么站长工具seo综合查询源码
  • 创建公司网站 优帮云seo兼职接单平台
  • 郑州富士康现状2023网站的优化和推广方案
  • 微网站建设比较全面的是游戏推广公司靠谱吗
  • 政协网站 党的建设网络安全培训最强的机构
  • 如何做直播网站网站网络营销
  • 大同市网站建设互联网关键词优化
  • 制作个简单公司网站要多少钱推广资讯
  • 附近网站建设服务公司拉新app推广平台
  • 网站开发软件排名优化网络软件
  • 做外贸怎么上国外网站整合营销策略
  • 网站如何在百度搜索到短视频精准获客
  • 西宁网站制作费用是多少钱郑州网站制作工具
  • 萝岗门户网站建设微博推广方案
  • 所有的购物平台大全seo优化推广技巧
  • 网站推广由什么样的人来做竞价推广的基本流程
  • 酒类网站建设方案东莞关键词seo优化
  • 安徽网站建设微信开发cpm广告联盟平台
  • 小说网站建设多少钱班级优化大师使用心得
  • 现在网站开发哪个语言好网站平台有哪些
  • 微企业网站模板免费广告网络营销
  • seo搜索铺文章长沙网站seo公司
  • 优秀的网站建设托管投放广告的渠道有哪些
  • 安防公司手机网站企业营销策划公司
  • 佛山网站建设seo优化sem竞价广告
  • 郑州网站建设q.479185700棒搜狗权重查询
  • 可以做商城网站的公司搜索引擎优化原理
  • 万江营销型网站建设seo顾问什么职位
  • 如何做网站优化的内容代写平台