¿Cómo repetir correctamente una textura en un quad en OpenGL?

Estoy dibujando un quad y uniendo una textura a este quad de esta manera:

#define TERRAIN_WIDTH 2000 #define TERRAIN_LENGTH 2000 #define TERRAIN_WIDTH_2 (TERRAIN_WIDTH / 2) #define TERRAIN_LENGTH_2 (TERRAIN_LENGTH / 2) glBindTexture(GL_TEXTURE_2D, gameTextures.terrain); glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex3f(-TERRAIN_WIDTH_2, 0.0f, TERRAIN_LENGTH_2); glTexCoord2f(X, 0); glVertex3f( TERRAIN_WIDTH_2, 0.0f, TERRAIN_LENGTH_2); glTexCoord2f(X, X); glVertex3f( TERRAIN_WIDTH_2, 0.0f, -TERRAIN_LENGTH_2); glTexCoord2f(0, X); glVertex3f(-TERRAIN_WIDTH_2, 0.0f, -TERRAIN_LENGTH_2); glEnd(); glBindTexture(GL_TEXTURE_2D, 0); 

Normalmente, X sería igual a 1 pero esto estirará la textura porque el quad es muy grande. La idea es boost ese valor para que la textura se repita (la textura se generó con GL_REPEAT por supuesto).

Pero, ¿cómo puedo encontrar el mejor valor para X ? Tengo algunas texturas de 512×512 que se ven bien si reemploop X=512 . Luego tengo otra textura de 1024×1024 que se ve bien con X=512 pero no empieza a verse tan bien con un valor mayor / menor. Otra textura es 2048×2048 y ahora necesito bajar a X=256 , de lo contrario no se verá tan bien.

Lo que me confunde aún más es el hecho de que las texturas de 512×512 y 1024×1024 se ven bien con X=512 . Tal como lo veo, cuanto menor sea la resolución de la textura, más veces tendré que repetirla.

¿Cómo debería calcular el valor de X entonces?

Si las texturas de 2048×2048 ven bien con X = 256 , y 1024×1024 se ven bien con X = 512 , entonces es probable que cada vez que el tamaño de la textura se networkinguzca en un factor de 2 , X crezca en un factor de 2 , llevando a la siguiente fórmula:

 X = 256 * 2048 / TextureSize