2016-07-14 18 views
0

Hier ist die Frage: Was bedeuten die Werte der Texturkoordinaten? Zum Beispiel in meiner OBJ-Datei, Texturkoordinaten aussehen wie diese:Was bedeutet Texturkoordinate in obj Dateien?

vt 0.474178 0.050139 
vt 0.477308 0.050139 
vt 0.480438 0.050139 
vt 0.483568 0.050139 

Die Größe meiner Textur (BMP-Datei) ist 640 * 360. Bedeutet das (0.474178, 0.050139) in der obj-Datei dem Punkt (0.474178 * 640, 0.050139 * 360) in der BMP-Datei? Das heißt, Texturkoordinaten die Punktposition in bmp-Datei anzeigen, indem Sie:

u*width_of_the_bmp, v*height_of_the_bmp 

Und wenn ich falsch bin, wie kann ich die entsprechende Korrelation zwischen vt und bmp Punktposition bekommen? Weil ich die RGB-Werte für jeden Scheitelpunkt erhalten möchte und ich die RGB-Werte für jedes Pixel in der BMP-Datei erhalten kann, wie diese Daten miteinander verknüpft werden, um zu erhalten, was ich will?

+0

Wenn dies wirklich über OpenGL ist, dann ist die Interpolation der UV-Koordinaten optimiert wird automatisch zwischen Vertex- und Fragment-Shader Stufe durchgeführt. Stellen Sie nur sicher, dass Sie die Textur im Fragment-Shader suchen. – BDL

+0

http://StackOverflow.com/a/5532670/4285290 Wert zu lesen. – eldo

Antwort

1

Das ist richtig.

Normalerweise, Texturkoordinate 0,0 ist Pixelkoordinate 0,0, und Texturkoordinate 1,1 ist die gegenüberliegende Ecke. Texturkoordinaten sind größer als 1 um die Textur herum. Wenn Sie also von 0,0 bis 2,0 gehen, gehen Sie zweimal um die Textur herum.

Natürlich könnten einige Programme sie unterschiedlich interpretieren. Es gibt keine Regel, dass es auf diese Weise sein muss, aber es ist normalerweise der Fall.

+0

Vielen Dank! Aber da ist noch eine Frage. Nehmen wir die Pixelpunkte in bmp als Matrix, können wir eine 640 * 360-Matrix erhalten. Wir können uns auf einen Punkt wie (10, 1) in dieser Matrix beziehen, aber (10.5, 1.4) scheint unmöglich. Wenn man jedoch die vt-Koordinaten mit der Höhe/Breite der BMP-Datei multipliziert, ist es schwierig, eine ganze Zahl zu erhalten, so dass das Ergebnis rund sein kann. –

+0

@ lilliam.C Diese werden entweder gerundet oder interpoliert, je nachdem, welchen Texturmodus das Programm verwendet. – immibis