Comment la coordonnée R (float) choisir quelle partie d'une texture 3D à utiliser? (OpenGL)

StackOverflow https://stackoverflow.com/questions/4001649

  •  25-09-2019
  •  | 
  •  

Question

Je tente d'utiliser des textures 3D pour texturer mon terrain généré au hasard. Je veux être en mesure d'avoir beaucoup de différentes textures de terrain qui se mélangent entre les différentes zones. Je ne peux pas sembler comprendre quelle partie de la texture de la coordonnée R ramassera. Si je mets à 0,0 puis il donne un mélange de la texture d'avant et après 1,0 0,0. Il semble avoir quelques points où il est pas du tout mélange. Comment la coordonnée R (float) travailler avec la profondeur de la texture 3D? (Profondeur IE. Divisée par quelque chose, multiplié par quelque chose, etc.)

Un exemple de ce que je dois comprendre cela pour: J'ai une texture 3D qui est une image 128x512. La première 128x256 est la texture de l'herbe. La 2ème moitié est la texture de la saleté. Je traite la texture comme si elle est 4 128x128 tuiles, de sorte que la profondeur est 4. Qu'est-ce que les mathématiques dois-je faire pour trouver le flotteur coordonnée R pour une texture de l'herbe solide? Qu'est-ce que les mathématiques dois-je faire pour trouver le flotteur début / fin coordonnées R pour le mélange de la saleté à l'herbe?

Toute aide est appréciée!

Était-ce utile?

La solution

Vous compris que l'échantillon à partir d'une couche 0, vous devez utiliser r = 1 / (depth * 2). En général, pour obtenir la couche N, vous utiliseriez r = (N + 1/2) / depth

Ce résultat est le même pour les 2 premières coordonnées, par le chemin. Si vous voulez avoir un triangle qui a exactement la valeur de la première texel de votre texture 2 / d, alors vous devez passer les coordonnées (0.5/width, 0.5/height) à chacun des sommets.

Mais, mais ... ce que vous essayez de faire est ce que la texture des tableaux ont été inventées pour (fonction de l'ère DX10). textures 3D sont un mauvais ajustement pour un certain nombre de raisons, le plus gros problème étant que mip-mapping ne fonctionne pas comme vous voulez qu'il (mipmap entre les niveaux 2D indépendamment de la troisième dimension).

Mip-mapping est critique pour réduire les artefacts de repliement de spectre (en particulier sur le terrain, où il couvre toute la gamme de profondeur). Lorsque vous commencez à tourner sur mip-mapping sur vos calques, vous verrez que la couche de matériau différent commencera le mélange indépendamment de votre coordonnées de texture lorsque le terrain est plus loin. C'est ce que mipmapping est après tout ... votre texture 128x128x4 devient 64x64x2, 32x32x1, 16x16x1 que vous les utilisez sur des géométries qui sont plus loin. Lorsque vous atteignez le bas niveau 32x32x1, vous avez seulement 1 couche à gauche, qui va probablement être un mélange fade de votre saleté et l'herbe. Encore une fois, pas ce que vous voulez.

En revanche, les tableaux de texture donneront 128x128 [4], 64x64 [4], 32x32 [4], 16x16 [4], où vous conservez les 4 couches que vous souhaitez sélectionner les différents matériaux quel que soit mipmapping.

Autres conseils

J'ai réalisé que je faisais quelque chose de mal avec mon code qui me fait penser qu'il ne recevait pas simplement la texture entourant R, quand il est en réalité. Ainsi, la première texture est à 1,0 / (profondeur * 2).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top