Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

20.08.2007, 15:34

Blender uv coords exportieren

hi,
ich habe ein problem beim exportieren der texturkoordinaten in blender.
Ich kann die Koordinaten der Vertizes zwar problemlos auslesen, aber bei den texturkoordinaten gibt es probleme. wenn ich testweise versuche die ersten so in der konsole auszugeben:

C-/C++-Quelltext

1
2
3
cube1 = bpy.data.objects["Cube"]
mesh1 = cube1.getData(mesh=1)
mesh1.verts[0].uvco

bekomme ich immer eine fehlermeldung dass das mesh keine "sticky coordinates" hat, obwohl ich eine textur verwende.
was mache ich da falsch?

Ich verwende version 2.44

danke im voraus
wabachota

sgaffga

Frischling

Beiträge: 6

Wohnort: Krefeld

  • Private Nachricht senden

2

20.08.2007, 19:52

Hi!

Nimm mal das "mesh=1" aus dem getData raus - bei mir gehts dann. Ich
denke aber, dass du dir besser die Texturkoordinaten aus den Faces holen
solltest - denn in Blender werden die U/V-Koordinaten den Faces zugewiesen
und da sich bekanntlich mehrere Flächen einen Vertex teilen wären die
Koordinaten am Vertex dann nicht mehr eindeutig.

Grüße
Stefan

3

21.08.2007, 08:29

vielen dank :)

Also, wenn ich das mesh=1 weglasse wird uvco zwar ausgegeben, steht aber bei allen vertizes auf 0.

wenn ich versuche .uv aus den faces auszulesen

C-/C++-Quelltext

1
mesh.faces[0].uv

bekomme ich immer den fehler das dass mesh keine texturkoordinaten hat,
egal ob ich vorher getData mit mesh=1 verwendet hab oder nicht.
vielleicht habe ich die textur auch nur falsch gesetzt, ich hab die textur zum material auf image gestellt und eine bmp geladen.
... ich probiers nochmal mit tga, aber version 2.44 müsste bmp doch fehlerfrei annehmen oder?

edit:
mit tga ist es auch nicht anders.
was soll ich machen?

sgaffga

Frischling

Beiträge: 6

Wohnort: Krefeld

  • Private Nachricht senden

4

21.08.2007, 08:47

Hast du denn auch den u/v-Editor verwendet um die Textur auf dein Objekt zu legen?
Ich bin mit grad nicht sicher ob Blender auch dann u/v-Koordinaten speichert wenn man
z.B. das automatische spherical mapping von Materialien einstellt.

Du musst wissen, dass Blender ja zum einen ein Renderer ist, zum anderen selbst
eine Gameengine beinhaltet (die soweit ich weiß fast nie benutzt wird). Die Materialien
und die damit verknüpften Texturen sind für den Renderer da. Für die Gameengine gibt
es hingegen die Möglichkeit den Flächen u/v Koordinaten zuzuweisen - die Gameengine
schert sich nämlich kaum um die übrigen Materialeigenschaften.

Ich gehe immer so vor: Erst das Model erstellen, dann vom Object mode in den UV-FaceSelect Mode
wechseln. Mit "a" alle Faces markieren. Dann teile ich das
Fenster in zwei Hälften und im rechten Bereich stelle ich die Ansicht auf den
UV-ImageEditor. Im UV-ImageEditor lade ich die Textur oder erstelle eine neue (ganz praktisch ist das UV-Testgrid).
Dann die Maus wieder rüber in die 3D-Ansicht und mit "u" öffnet ich das Menu für den
Unwrap-Vorgang. Sobald dann einer von denen gelaufen ist hat man halbwegs brauchbare
u/v Koordinaten an den Faces... Natürlich ist hier jetzt noch viel zu tun bis die Textur so
richtig passt.

Grüße
Stefan

5

21.08.2007, 09:00

Oo Hab ich nicht gemacht.
werd ich ausprobieren, danke.

mfg
wabachota

6

24.08.2007, 18:35

ein problem ist noch aufgetreten.
und zwar beim versuch die uv coords mit folgendem stück script zu exportieren:

C-/C++-Quelltext

1
2
3
4
5
6
7
for face in mesh.faces:
                out.write('t')
                
                for vert in face.v:
                        out.write( ' %fE' % (mesh.faces[face.index].uv[vert.index][0]) )
            out.write( ' %fE' % (mesh.faces[face.index].uv[vert.index][1]) )
                out.write('\n')

bekomme ich immer die fehlermeldung "tuple index out of range"
woran liegt das? die anderen Schleifen für indizes und vertizes sind
übrigens genauso aufgebaut und verursachen keine fehler.
ich habe mal probiert [face.index -1] zu verwenden, aber ohne erfolg.

sgaffga

Frischling

Beiträge: 6

Wohnort: Krefeld

  • Private Nachricht senden

7

24.08.2007, 22:23

Hi!

Versuch mal folgendes - das funktioniert bei mir:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
import Blender
from Blender import Scene

scene = Scene.GetCurrent()
obj = scenegetActiveObject()
mesh = obj.getData()

for face in mesh.faces:
    for coords in face.uv:
        print( coords[0] )
        print( coords[1] )
        print('\n')


Ich nehme an, dass folgendes der Fehler in deinem Code ist: Du holst
dir aus dem Face die Liste aller Vertex-Indices und benutzt diese
dann für das Array in die UV-Liste - das passt natürlich nicht.
In einem Face ist ein UV-Array - dieses Array ist genauso gross wie
die Anzahl an Eckpunkten des Faces. Jeder dieser Einträge ist wiederum
ein Array - diesmal aber mit fix 2 Elemente: U und V Koordinate.

Grüße
Stefan

8

25.08.2007, 09:38

hm, müsste doch gehen:

C-/C++-Quelltext

1
2
mesh.faces[face.index].uv[vert.index][0]
                1              2      3

bei 1 hol ich mir das aktuelle face aus dem vertex, davon jeweils alle uv bei 2 für jeden vertex ein uv paar und bei 3 hol ich mir immer 0 und 1 aus dem array. Oder darf ich die iteratoren aus den übergeordneten schleifen nicht in den geschachtelten verwenden?

sgaffga

Frischling

Beiträge: 6

Wohnort: Krefeld

  • Private Nachricht senden

9

25.08.2007, 16:14

Nein - es geht nicht, weil "vert.index" nicht der Index des Vertex im Face - sondern der Index im gesamten Model ist - d.h. bei einem Würfel von 0 bis 7. Das "uv"-Array im Face geht aber bei Dreiecken nur von 0 bis 2.

Grüße
Stefan

Werbeanzeige