Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 45ad58b

Browse files
author
Alexis Ronez
committed
Rephrased and renamed Texture mapping -> Image view and sampler
1 parent 76d0c8c commit 45ad58b

1 file changed

Lines changed: 26 additions & 25 deletions

File tree

fr/06_Texture_mapping/01_Image_view_et_sampler.md renamed to fr/06_Texture_mapping/01_Vue_sur_image_et_sampler.md

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ est nouvelle, et est liée à la manière dont le shader accédera aux texels de
55
## Vue sur une image texture
66

77
Nous avons vu précédemment que les images ne peuvent être accédées qu'à travers une vue. Nous aurons donc besoin de
8-
créer une vue sur notre nouvelle image.
8+
créer une vue sur notre nouvelle image texture.
99

10-
Ajoutez un membre donnée pour stocker la référence à la vue `VkImageView`, puis créez la fonction
11-
`createTextureImageView` pour la créer.
10+
Ajoutez un membre donnée pour stocker la référence à la vue de type `VkImageView`. Ajoutez ensuite la fonction
11+
`createTextureImageView` qui créera cette vue.
1212

1313
```c++
1414
VkImageView textureImageView;
@@ -51,7 +51,7 @@ Appellons `vkCreateImageView` pour finaliser la création de la vue :
5151

5252
```c++
5353
if (vkCreateImageView(device, &viewInfo, nullptr, &textureImageView) != VK_SUCCESS) {
54-
throw std::runtime_error("failed to create texture image view!");
54+
throw std::runtime_error("échec de la création d'une vue sur l'image texture!");
5555
}
5656
```
5757

@@ -73,7 +73,7 @@ VkImageView createImageView(VkImage image, VkFormat format) {
7373

7474
VkImageView imageView;
7575
if (vkCreateImageView(device, &viewInfo, nullptr, &imageView) != VK_SUCCESS) {
76-
throw std::runtime_error("erreur lors de la creation de la vue sur une image!");
76+
throw std::runtime_error("échec de la creation de la vue sur une image!");
7777
}
7878

7979
return imageView;
@@ -115,19 +115,19 @@ void cleanup() {
115115
116116
## Samplers
117117
118-
Il est possible pour les shaders de directement lire les texels de l'image. Ce n'est cependant pas la manière commune
119-
de faire. Les textures sont communément accédées à travers un sampler (ou échantillonneur) qui filtrera et/ou
120-
transformera les données afin de calculer la couleur la plus proche pour le pixel.
118+
Il est possible pour les shaders de directement lire les texels de l'image. Ce n'est cependant pas la technique
119+
communément utilisée. Les textures sont généralement accédées à travers un sampler (ou échantillonneur) qui filtrera
120+
et/ou transformera les données afin de calculer la couleur la plus désirable pour le pixel.
121121
122-
Ces filtres sont utiles pour résoudre des problèmes tels que l'oversampling. Supposez une texture liée à de la
123-
géometrie possédant plus de fragments que la texture n'a de texels. Si le sampler se contentait de prendre le pixel le
124-
plus proche, ue pixellisation apparaît :
122+
Ces filtres sont utiles pour résoudre des problèmes tels que l'oversampling. Imaginez une texture que l'on veut mettre
123+
sur de la géometrie possédant plus de fragments que la texture n'a de texels. Si le sampler se contentait de prendre
124+
le pixel le plus proche, ue pixellisation apparaît :
125125
126126
![](/images/texture_filtering.png)
127127
128128
En combinant les 4 texels les plus proches il est possible d'obtenir un rendu lisse comme présenté sur l'image de
129129
droite. Bien sûr il est possible que votre application cherche plutôt à obtenir le premier résultat (Minecraft), mais
130-
la seconde option est en général préférée. Un objet sampler applique donc automatiquement ce type d'opérations.
130+
la seconde option est en général préférée. Un sampler applique alors automatiquement ce type d'opérations.
131131
132132
L'undersampling est le problème inverse. Cela crée des artéfacts particulièrement visibles dans le cas de textures
133133
répétées vues à un angle aigü :
@@ -136,12 +136,12 @@ répétées vues à un angle aigü :
136136
137137
Comme vous pouvez le voir sur l'image de droite, la texture devient d'autant plus floue que l'angle de vision se réduit.
138138
La solution à ce problème peut aussi être réalisée par le sampler et s'appelle
139-
[anisotropic filtering](https://en.wikipedia.org/wiki/Anisotropic_filtering). Elle est par contre plus consommatrice de
139+
[anisotropic filtering](https://en.wikipedia.org/wiki/Anisotropic_filtering). Elle est par contre plus gourmande en
140140
ressources.
141141
142142
Au delà de ces filtres le sampler peut aussi s'occuper de transformations. Il évalue ce qui doit se passer quand le
143143
fragment shader essaie d'accéder à une partie de l'image qui dépasse sa propre taille. Il se base sur le *addressing
144-
mode* fourni lors de sa configuration. L'image suivante présente des possiblités :
144+
mode* fourni lors de sa configuration. L'image suivante présente les différentes possiblités :
145145
146146
![](/images/texture_addressing.png)
147147
@@ -184,13 +184,13 @@ samplerInfo.addressModeV = VK_SAMPLER_ADDRESS_MODE_REPEAT;
184184
samplerInfo.addressModeW = VK_SAMPLER_ADDRESS_MODE_REPEAT;
185185
```
186186

187-
Le addressing mode peut être configurer pour chaque axe. Les axes disponibles sont indiqués ci-dessus ; notez
187+
Le addressing mode peut être configuré pour chaque axe. Les axes disponibles sont indiqués ci-dessus ; notez
188188
l'utilisation de U, V et W au lieu de X, Y et Z. C'est une convention dans le contexte des textures. Voilà les
189189
différents modes possibles :
190190

191-
* `VK_SAMPLER_ADDRESS_MODE_REPEAT`: répéter le texture
192-
* `VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT`: répète en inversant les coordonnées pour faire un effet mirroir
193-
* `VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE`: prend la couleur du plus proche côté de l'image
191+
* `VK_SAMPLER_ADDRESS_MODE_REPEAT`: répète le texture
192+
* `VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT`: répète en inversant les coordonnées pour réaliser un effet mirroir
193+
* `VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE`: prend la couleur du pixel de bordure le plus proche
194194
* `VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE`: prend la couleur de l'opposé du plus proche côté de l'image
195195
* `VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER`: utilise une couleur fixée
196196

@@ -203,10 +203,10 @@ samplerInfo.anisotropyEnable = VK_TRUE;
203203
samplerInfo.maxAnisotropy = 16;
204204
```
205205

206-
Ces deux membres spécifient l'utilisation de l'anistropic filtering. Il n'y a pas vraiment de raison de ne pas
206+
Ces deux membres paramètrent l'utilisation de l'anistropic filtering. Il n'y a pas vraiment de raison de ne pas
207207
l'utiliser, sauf si vous manquez de performances. Le champ `maxAnistropy` est le nombre maximal de texels utilisés pour
208208
calculer la couleur finale. Une plus petite valeur permet d'augmenter les performances, mais résulte évidemment en une
209-
qualité résuite. Il n'existe à ce jour aucune carte graphique pouvant utiliser plusde 16 texels car la qualité ne
209+
qualité réduite. Il n'existe à ce jour aucune carte graphique pouvant utiliser plus de 16 texels car la qualité ne
210210
change quasiment plus.
211211

212212
```c++
@@ -231,7 +231,7 @@ samplerInfo.compareEnable = VK_FALSE;
231231
samplerInfo.compareOp = VK_COMPARE_OP_ALWAYS;
232232
```
233233

234-
Si une fonction de comparison est activée, les texels seront comparés à une valeur. Le résultat de la comparaison est
234+
Si une fonction de comparaison est activée, les texels seront comparés à une valeur. Le résultat de la comparaison est
235235
ensuite utilisé pour une opération de filtrage. Cette fonctionnalité est principalement utilisée pour réaliser
236236
[un percentage-closer filtering](https://developer.nvidia.com/gpugems/GPUGems/gpugems_chll.html) sur les shadow maps.
237237
Nous verrons cela dans un futur chapitre.
@@ -246,7 +246,7 @@ samplerInfo.maxLod = 0.0f;
246246
Tous ces champs sont liés au mipmapping. Nous y reviendrons dans un [prochain chapitre](/Generating_Mipmaps), mais pour
247247
faire simple, c'est encore un autre type de filtre.
248248

249-
Nous avons maintenant défini le toutes les fonctionalités du sampler. Ajoutez un membre donnée pour stocker la
249+
Nous avons maintenant paraméteré toutes les fonctionalités du sampler. Ajoutez un membre donnée pour stocker la
250250
référence à ce sampler, puis créez-le avec `vkCreateSampler` :
251251

252252
```c++
@@ -259,14 +259,14 @@ void createTextureSampler() {
259259
...
260260

261261
if (vkCreateSampler(device, &samplerInfo, nullptr, &textureSampler) != VK_SUCCESS) {
262-
throw std::runtime_error("erreur lors de la creation d'un sampler!");
262+
throw std::runtime_error("échec de la creation d'un sampler!");
263263
}
264264
}
265265
```
266266

267267
Remarquez que le sampler n'est pas lié à une quelconque `VkImage`. Il ne constitue qu'un objet distinct qui représente
268268
une interface avec les images. Il peut être appliqué à n'importe quelle image 1D, 2D ou 3D. Cela diffère d'anciens APIs,
269-
qui combinaient la texture et le filtrage.
269+
qui combinaient la texture et son filtrage.
270270

271271
Préparons la destruction du sampler à la fin du programme :
272272

@@ -320,7 +320,8 @@ samplerInfo.anisotropyEnable = VK_FALSE;
320320
samplerInfo.maxAnisotropy = 1;
321321
```
322322

323-
Dans le prochain chapitre nous exposerons l'image et le sampler aux shaders pour afficher une texture sur le carrré.
323+
Dans le prochain chapitre nous exposerons l'image et le sampler au fragment shader pour qu'il puisse utiliser la
324+
texture sur le carré.
324325

325326
[C++ code](/code/24_sampler.cpp) /
326327
[Vertex shader](/code/21_shader_ubo.vert) /

0 commit comments

Comments
 (0)