GLBasic forum

Other languages => GLBasic - de => Topic started by: Quentin on 2008-Nov-17

Title: X_OBJ... und Texturen
Post by: Quentin on 2008-Nov-17
Eine Sache mit der Texturierung von Objekten ist mir noch nicht so ganz klar. In jedem Beispiel, sei es hier in GLBasic (Samples) oder in OpenGL-Tutorien, werden als Texturkoordinaten immer nur 0 und 1 verwendet. Wenn ich jedoch Objekte unterschiedlicher Größe habe und belege beide Objekte mit der gleichen Textur, so erscheinen die Texturen auch in unterschiedlicher Auflösung, wenn ich als Koordinaten nur 0 und 1 verwende. Wenn ich jedoch die Texturkoordinaten im Verhältnis umrechne (also 1 = 100%, Dreisatz ;), dann erscheint die Textur auf allen Flächen in der gleichen Auflösung, egal wie groß die Fläche ist.

Folgendes Beispiel soll das verdeutlichen:

zunächst werden zwei Quadrate gezeichnet, eines mit 100 Punkten Kantenlänge, eines mit 50. Als Texturkoordinaten verwende ich bei beiden nur 0 und 1.

die zwei Quadrate darunter haben die gleiche Dimension, die Texturkoordinaten für das kleinere Quadrat wurden jedoch im Verhältnis angeaßt. (die verwendete Textur findet sich im Anhang)

Code (glbasic) Select

LOADSPRITE "mauer.png", 0

c = RGB(255, 255, 255)
X_OBJSTART 0
X_OBJADDVERTEX -100, 100, 0, 0, 0, c
X_OBJADDVERTEX -100,   0, 0, 0, 1, c
X_OBJADDVERTEX    0, 100, 0, 1, 0, c
X_OBJADDVERTEX    0,   0, 0, 1, 1, c
X_OBJEND

X_OBJSTART 1
X_OBJADDVERTEX    0,  50, 0, 0, 0, c
X_OBJADDVERTEX    0,   0, 0, 0, 1, c
X_OBJADDVERTEX   50,  50, 0, 1, 0, c
X_OBJADDVERTEX   50,   0, 0, 1, 1, c
X_OBJEND

X_OBJSTART 2
X_OBJADDVERTEX -100,  -10, 0, 0, 0, c
X_OBJADDVERTEX -100, -110, 0, 0, 1, c
X_OBJADDVERTEX    0,  -10, 0, 1, 0, c
X_OBJADDVERTEX    0, -110, 0, 1, 1, c
X_OBJEND

X_OBJSTART 3
X_OBJADDVERTEX   0,   -10, 0, 0, 0, c
X_OBJADDVERTEX   0,   -60, 0, 0, 0.5, c
X_OBJADDVERTEX  50,   -10, 0, 0.5, 0, c
X_OBJADDVERTEX  50,   -60, 0, 0.5, 0.5, c
X_OBJEND

GLOBAL KEY_LEFT  = 203
GLOBAL KEY_RIGHT = 205
GLOBAL KEY_UP    = 200
GLOBAL KEY_DOWN  = 208
GLOBAL KEY_W     = 17
GLOBAL KEY_S     = 31

GLOBAL camx, camy, camz, camdx, camdy, camdz
GLOBAL angle, factor

camy = 0

camdx = 0
camdy = 0
camdz = 0

angle = 90
distance = 300


WHILE TRUE

IF KEY(KEY_LEFT)
DEC angle, 1
ENDIF
IF KEY(KEY_RIGHT)
INC angle, 1
ENDIF

IF KEY(KEY_W) THEN DEC distance, 3
IF KEY(KEY_S) THEN INC distance, 3

IF KEY(KEY_UP) THEN DEC camy, 5
IF KEY(KEY_DOWN) THEN INC camy, 5

camx = COS(angle) * distance
camz = SIN(angle) * distance

X_MAKE3D 1, 1000, 45
X_CAMERA camx, camy, camz, camdx, camdy, camdz
FOR i = 0 TO 3
X_SETTEXTURE 0, -1
X_DRAWOBJ i, 0
NEXT

SHOWSCREEN

WEND


wie man sieht, hat im unteren Beispiel die Textur auf beiden Flächen die gleiche Auflösung. Somit wirken auch unterschiedliche große Stücke der "Mauer" wie aus einem Guß. Im obigen Beispiel dagegen meint man, im rechten Mauerteil wären kleinere Steine verbaut worden.

Meine eigentliche Frage:
Ist das der Weg, wie man das Ziel "gleiche Texturauflösung auf unterschiedlich großen Flächen" erreicht? Oder gibt es da einfachere oder bessere Wege?
Title: Re: X_OBJ... und Texturen
Post by: Schranz0r on 2008-Nov-18
Kannste nur über UV-Mapping erreichen.
Title: Re: X_OBJ... und Texturen
Post by: Kitty Hello on 2008-Nov-18
Na, Du musst halt bei doppeltem Objekt auch doppelte UV Koordinaten verwenden.
z.B:
POLYVECTOR x,y, x,y, col
also -> xy auch als UV verwenden.