uniform-types.html 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. <!DOCTYPE html><html lang="fr"><head>
  2. <meta charset="utf-8">
  3. <title>Types d'uniformes</title>
  4. <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
  5. <meta name="twitter:card" content="summary_large_image">
  6. <meta name="twitter:site" content="@threejs">
  7. <meta name="twitter:title" content="Three.js – Types d'uniformes">
  8. <meta property="og:image" content="https://threejs.org/files/share.png">
  9. <link rel="shortcut icon" href="../../files/favicon_white.ico" media="(prefers-color-scheme: dark)">
  10. <link rel="shortcut icon" href="../../files/favicon.ico" media="(prefers-color-scheme: light)">
  11. <link rel="stylesheet" href="../resources/lesson.css">
  12. <link rel="stylesheet" href="../resources/lang.css">
  13. <script type="importmap">
  14. {
  15. "imports": {
  16. "three": "../../build/three.module.js"
  17. }
  18. }
  19. </script>
  20. </head>
  21. <body>
  22. <div class="container">
  23. <div class="lesson-title">
  24. <h1>Types d'uniformes</h1>
  25. </div>
  26. <div class="lesson">
  27. <div class="lesson-main">
  28. <p>
  29. Chaque uniforme doit avoir une propriété `value`. Le type de la valeur doit
  30. correspondre au type de la variable uniforme dans le code GLSL tel que
  31. spécifié pour les types GLSL primitifs dans le tableau ci-dessous. Les structures et
  32. tableaux d'uniformes sont également pris en charge. Les tableaux GLSL de type primitif
  33. doivent être spécifiés soit comme un tableau des objets THREE correspondants, soit
  34. comme un tableau plat contenant les données de tous les objets. En d'autres termes,
  35. les primitives GLSL dans les tableaux ne doivent pas être représentées par des tableaux. Cette règle
  36. ne s'applique pas de manière transitive. Un tableau de tableaux `vec2`, chacun d'une longueur
  37. de cinq vecteurs, doit être un tableau de tableaux, soit de cinq objets `Vector2`,
  38. soit de dix `number`s.
  39. </p>
  40. <table>
  41. <thead>
  42. <tr>
  43. <th>GLSL type</th>
  44. <th>JavaScript type</th>
  45. </tr>
  46. </thead>
  47. <tbody>
  48. <tr>
  49. <td>int</td>
  50. <td>Number</td>
  51. </tr>
  52. <tr>
  53. <td>uint</td>
  54. <td>Number</td>
  55. </tr>
  56. <tr>
  57. <td>float</td>
  58. <td>Number</td>
  59. </tr>
  60. <tr>
  61. <td>bool</td>
  62. <td>Boolean</td>
  63. </tr>
  64. <tr>
  65. <td>bool</td>
  66. <td>Number</td>
  67. </tr>
  68. <tr>
  69. <td>vec2</td>
  70. <td>Vector2</td>
  71. </tr>
  72. <tr>
  73. <td>vec2</td>
  74. <td>Float32Array (*)</td>
  75. </tr>
  76. <tr>
  77. <td>vec2</td>
  78. <td>Array (*)</td>
  79. </tr>
  80. <tr>
  81. <td>vec3</td>
  82. <td>Vector3</td>
  83. </tr>
  84. <tr>
  85. <td>vec3</td>
  86. <td>Color</td>
  87. </tr>
  88. <tr>
  89. <td>vec3</td>
  90. <td>Float32Array (*)</td>
  91. </tr>
  92. <tr>
  93. <td>vec3</td>
  94. <td>Array (*)</td>
  95. </tr>
  96. <tr>
  97. <td>vec4</td>
  98. <td>Vector4</td>
  99. </tr>
  100. <tr>
  101. <td>vec4</td>
  102. <td>Quaternion</td>
  103. </tr>
  104. <tr>
  105. <td>vec4</td>
  106. <td>Float32Array (*)</td>
  107. </tr>
  108. <tr>
  109. <td>vec4</td>
  110. <td>Array (*)</td>
  111. </tr>
  112. <tr>
  113. <td>mat2</td>
  114. <td>Float32Array (*)</td>
  115. </tr>
  116. <tr>
  117. <td>mat2</td>
  118. <td>Array (*)</td>
  119. </tr>
  120. <tr>
  121. <td>mat3</td>
  122. <td>Matrix3</td>
  123. </tr>
  124. <tr>
  125. <td>mat3</td>
  126. <td>Float32Array (*)</td>
  127. </tr>
  128. <tr>
  129. <td>mat3</td>
  130. <td>Array (*)</td>
  131. </tr>
  132. <tr>
  133. <td>mat4</td>
  134. <td>Matrix4</td>
  135. </tr>
  136. <tr>
  137. <td>mat4</td>
  138. <td>Float32Array (*)</td>
  139. </tr>
  140. <tr>
  141. <td>mat4</td>
  142. <td>Array (*)</td>
  143. </tr>
  144. <tr>
  145. <td>ivec2, bvec2</td>
  146. <td>Float32Array (*)</td>
  147. </tr>
  148. <tr>
  149. <td>ivec2, bvec2</td>
  150. <td>Array (*)</td>
  151. </tr>
  152. <tr>
  153. <td>ivec3, bvec3</td>
  154. <td>Int32Array (*)</td>
  155. </tr>
  156. <tr>
  157. <td>ivec3, bvec3</td>
  158. <td>Array (*)</td>
  159. </tr>
  160. <tr>
  161. <td>ivec4, bvec4</td>
  162. <td>Int32Array (*)</td>
  163. </tr>
  164. <tr>
  165. <td>ivec4, bvec4</td>
  166. <td>Array (*)</td>
  167. </tr>
  168. <tr>
  169. <td>sampler2D</td>
  170. <td>Texture</td>
  171. </tr>
  172. <tr>
  173. <td>samplerCube</td>
  174. <td>CubeTexture</td>
  175. </tr>
  176. </tbody>
  177. </table>
  178. <p>
  179. (*) De même pour un tableau (le plus interne) (dimension) du même type GLSL,
  180. contenant les composants de tous les vecteurs ou matrices du tableau.
  181. </p>
  182. <h2>Uniforms structurés</h2>
  183. <p>
  184. Parfois, vous voulez organiser les uniformes en tant que `structs` dans votre code de shader.
  185. Le style suivant doit être utilisé pour que `three.js` puisse traiter
  186. les données d'uniformes structurées.
  187. </p>
  188. <pre class="prettyprint notranslate lang-js" translate="no">
  189. uniforms = {
  190. data: {
  191. value: {
  192. position: new Vector3(),
  193. direction: new Vector3( 0, 0, 1 )
  194. }
  195. }
  196. };
  197. </pre>
  198. Cette définition peut être mappée sur le code GLSL suivant :
  199. <pre class="prettyprint notranslate lang-js" translate="no">
  200. struct Data {
  201. vec3 position;
  202. vec3 direction;
  203. };
  204. uniform Data data;
  205. </pre>
  206. <h2>Uniforms structurés avec tableaux</h2>
  207. <p>
  208. Il est également possible de gérer des `structs` dans des tableaux. La syntaxe pour ce cas d'utilisation
  209. est la suivante :
  210. </p>
  211. <pre class="prettyprint notranslate lang-js" translate="no">
  212. const entry1 = {
  213. position: new Vector3(),
  214. direction: new Vector3( 0, 0, 1 )
  215. };
  216. const entry2 = {
  217. position: new Vector3( 1, 1, 1 ),
  218. direction: new Vector3( 0, 1, 0 )
  219. };
  220. uniforms = {
  221. data: {
  222. value: [ entry1, entry2 ]
  223. }
  224. };
  225. </pre>
  226. Cette définition peut être mappée sur le code GLSL suivant :
  227. <pre class="prettyprint notranslate lang-js" translate="no">
  228. struct Data {
  229. vec3 position;
  230. vec3 direction;
  231. };
  232. uniform Data data[ 2 ];
  233. </pre>
  234. </div>
  235. </div>
  236. </div>
  237. <script src="../resources/prettify.js"></script>
  238. <script src="../resources/lesson.js"></script>
  239. </body></html>
粤ICP备19079148号