新手搭建做网站做图兼职网站有哪些
news/
2025/10/6 6:10:59/
文章来源:
新手搭建做网站,做图兼职网站有哪些,电子商务就是网络营销,网络营销外包的优点系列文章
一、逆向工程 Sketchup 逆向工程#xff08;一#xff09;破解.skp文件数据结构 Sketchup 逆向工程#xff08;二#xff09;分析三维模型数据结构 Sketchup 逆向工程#xff08;三#xff09;软件逆向工程从何处入手 Sketchup 逆向工程#xff08;四#xf…系列文章
一、逆向工程 Sketchup 逆向工程一破解.skp文件数据结构 Sketchup 逆向工程二分析三维模型数据结构 Sketchup 逆向工程三软件逆向工程从何处入手 Sketchup 逆向工程四破解的乐趣 钩子 外挂 代码注入
二、OpenGL渲染模型 PythonOpenGL绘制3D模型一Python 和 PyQt环境搭建 PythonOpenGL绘制3D模型二程序框架PyQt5 PythonOpenGL绘制3D模型三程序框架PyQt6 PythonOpenGL绘制3D模型四绘制线段 PythonOpenGL绘制3D模型五绘制三角型 PythonOpenGL绘制3D模型六材质文件载入和贴图映射 PythonOpenGL绘制3D模型七制作3dsmax导出插件 PythonOpenGL 杂谈一
三、成果 疫情期间关在家里实在没事干破解了Sketchup成功做出可以读取并显示.skp文件的程序SuViewer
前言
Sketchup作为目前设计院最为流行的设计软件(非工程制图软件深受设计师的喜爱软件小巧而功能强大有不少为之开发的插件应运而生不过呢关于底层数据结构和工作原理相关的文章少之又少本文意在填补一下这方面的空缺通过逆向软件分析展示软件内部奥秘。本文用到的工具IDA ProImmunity DebuggerVisual 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
# 对应文章PythonOpenGL绘制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(cant 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.xxself.yyself.zz系列文章预告
目标是一个完善的Viewer能够显示Sketchup的.skp文件中的3D模型
Corona渲染器照片级渲染效果
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/929026.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!