2014-05-23 16 views
21

Im Moment bin ich in der Erstellung SolidWorks-Add-in für den Export von 3D-Modellen im OBJ-Format beschäftigt.SolidWorks zu OBJ exportieren

OBJ geöffnet und sehr einfaches Format

ich gegoogelt habe und fand über die bestehenden Lösungen die folgenden Informationen aus: Es gibt mehrere bezahlten Plugins und kostenlos 1, die „Free OBJ Exporter“

genannt wird Es wurde als Grundlage genommen. Aber es exportiert die Abziehbilder nicht.

Abziehbilder sind Bilder, die Sie auf der Haupt-Textur ziehen (wenn Sie weg von dem Kontext von Solidworks zu bewegen, in 3D-Programmierung es wie ein Zeichen der Kugeln ist, Bluttropfen, etc.)

Export Abziehbilder ist wichtiger Teil des Projekts.

Ich habe alle VBA-Code in C# umgeschrieben.

Und jetzt komme ich mit dem Problem der Exportabziehbilder in Berührung. Dokumentation Solidworks API eher schlecht.

Nach einer Woche in der Dokumentation und ein paar Fragen auf LinkedIn Lesen fand ich folgendes:

IDecal ist inherided Klasse von IRendererMaterial. Daher kann ich eine Liste aller Abziehbilder erhalten und die folgenden Informationen erhalten:

  • YPosition
  • Xposition
  • Breite
  • Höhe

ich auch eine Liste von IFace2 Objekte erhalten können und erhalten FaceDecalProperties. IFaceDecalProperties bietet folgende Informationen:

  • TextureTranslationU
  • TextureTranslationV
  • TextureTranslationX
  • TextureTranslationY
  • TextureUScale
  • TextureVScale

Was es ist, wofür es steht und wie man es benutzt Ich weiß es nicht.

OBJ-Format unterstützt nicht direkt Abziehbilder.

Wie kann ich diese Parameter für die Verkettung Textur und Aufkleber in einer Datei verwenden? Ich möchte es für das Rendering des Abziehbilds im Gesicht machen und das Problem des Z-Kampfes lösen, weil ich keinen Quellcode des Renderers habe.

+1

Ich denke, diese Lehrbuchseite gibt Ihnen die Idee, was u, v, x und y in diesem Verfahren konventionell darstellen. Ich bin damit nicht vertraut, obwohl ich etwas daran interessiert bin zu lernen. https://encrypted.google.com/books?id=4gBUz_IkkSsC&lpg=PA390&ots=mAxE7Fwop1&dq=uvxy%20texture&pg=PA390#v=onepage&q=uvxy%20texture&f=false – minopret

+1

Haben Sie darüber nachgedacht, Ihren Code auf GitHub zu veröffentlichen? Ich möchte gerne einen Beitrag zur Entwicklung eines C# -Makros oder -Plugins leisten, um den gleichen Job zu machen. – sentenza

Antwort

2

Ich bin mir nicht sicher, was TextureTranslationX und TextureTranslationY in diesem Kontext bedeuten, aber TextureTranslationU und TextureTranslationV beziehen sich fast sicher auf die Texturkoordinaten des Modells.

In der Regel werden die Texturkoordinaten (U, V) zwischen [0,1] angegeben und bestimmen, wie ein Bild auf eine Oberfläche abgebildet wird. (U, V) = (0,0) ist typischerweise das oberste Pixel ganz links des Texturbildes.

Wenn Sie also eine Reihe von Eckpunkten wie:

v 0 0 0 
v 1 0 0 
v 0 1 0 
v 1 1 0 

, die einen Platz in (X, Y, Z) Raum definiert, und diese Eckpunkte sind die folgenden Punkte (U, V) Textur-Koordinaten:

Dann wird eine "Textur", mit der wir wirklich Bild meinen, auf das Quadrat angewendet, so dass sein oberstes äußerstes Pixel auf den Eckpunkt (0, 0, 0) des Quadrats angewendet wird.

TectureUScale und TextureVScale beziehen sich wahrscheinlich auf Skalierungsparameter, die nicht rechteckige Texturbilder ermöglichen.

Um dies in OBJ zu übersetzen, konsultieren Sie http://en.wikipedia.org/wiki/Wavefront_.obj_file. Das Format, das ich oben verwendet habe, stimmt mit der Spezifikation des Dateiformats überein.

Sie benötigen außerdem die Texturbild auf eine .tga Datei speichern Sie die Dokumentation nach und dann eine .mtl Datei zu erstellen, die wie folgt aussieht:

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 

Das letzte Stück zu setzen ist:

usemtl [texture1] 

Vor den Eckpunkt- und Texturkoordinatendefinitionen in Ihrer OBJ-Datei.

Ich würde mit etwas sehr einfach beginnen wie ein Quadrat mit einem Schachbrettmuster strukturiert, das die gleiche Breite und Höhe hat.

Verwandte Themen