目前我正在使用创建SolidWorks插件来导出OBJ格式的3D模型。
OBJ已打开且格式非常简单
我用谷歌搜索并发现了有关现有解决方案的以下信息:有几个付费插件和一个免费,这被称为“免费OBJ导出器”
以此为基础。但它不会导出贴花。
贴图是您在主要纹理上绘制的图像(如果您远离SolidWorks的上下文,在3D编程中它就像是子弹,血滴等标记)。
出口贴花是该项目的重要组成部分。
我将所有VBA代码重写为C#。
现在我来处理出口贴花的问题。文档Solidworks API相当差。
在阅读文档和LinkedIn上的几个问题一周后,我发现了以下内容:
IDecal
是IRendererMaterial
的遗留类。因此,我可以获得所有贴花的清单,并获得以下信息:
我也可以获取IFace2对象列表并获取FaceDecalProperties
。
IFaceDecalProperties
提供了下一个信息:
TextureTranslationU
TextureTranslationV
TextureTranslationX
TextureTranslationY
TextureUScale
TextureVScale
它是什么,它代表什么以及如何使用它我不知道。
OBJ格式不支持直接贴花。
如何在一个文件中将此参数用于连接纹理和贴花?我想在脸上渲染贴花并解决Z-fighting的问题,因为我没有渲染器的源代码。
答案 0 :(得分:4)
我不确定TextureTranslationX和TextureTranslationY在此上下文中的含义,但TextureTranslationU和TextureTranslationV几乎肯定会引用模型的纹理坐标。
通常,(U,V)纹理坐标在[0,1]之间指定,并确定图像如何映射到曲面上。 (U,V)=(0,0)通常是纹理图像的最左上角的像素。
所以如果你有一组顶点,如:
v 0 0 0
v 1 0 0
v 0 1 0
v 1 1 0
在(X,Y,Z)空间中定义一个正方形,这些顶点具有以下(U,V)纹理坐标:
vt 0 0
vt 1 0
vt 0 1
vt 1 1
然后,我们真正意味着图像的"纹理"将被应用于正方形,使得其最左上方的像素将被应用于正方形的(0,0,0)个顶点。
TectureUScale和TextureVScale可能是指允许非矩形纹理图像的缩放参数。
在将其翻译为OBJ方面,请咨询http://en.wikipedia.org/wiki/Wavefront_.obj_file。我上面使用的格式与文件格式规范一致。
您还需要根据文档将纹理图像保存到.tga文件,然后创建一个类似的.mtl文件:
newmtl texture1
Ka 1.000 1.000 1.000 # Only ambient to keep things simple
Kd 0.000 0.000 0.000 # Disable diffuse component
Ks 0.000 0.000 0.000 # Disable specular component
illum 1 # Only color and ambient are enabled
map_Ka texture.tga # Ambient texture map
最后一部分是:
usemtl [texture1]
在.obj文件中的顶点和纹理坐标定义之前。
我会从一个非常简单的东西开始,就像一个方形纹理,棋盘图案具有相同的宽度和高度。