TA159

Notas, resueltos y trabajos practicos de la materia Sistemas Gráficos
Index Commits Files Refs Submodules README LICENSE
clases/2024-04-05-clase.md (3246B)
   1 # Clase 05-04-24
   2 
   3 \tableofcontents
   4 
   5 ## Formatos Soportados por Three.js
   6 
   7 * glTF
   8 * FBX
   9 * OBJ
  10 * COLLADA (DAE)
  11 * STL
  12 
  13 Siendo el más importante y eficiente `glTF`
  14 
  15 * Dos versiones 1.0 y 2.0, siendo la primera obsoleta
  16 
  17 ## GLTF
  18 
  19 Los archivos `.gltf` son modelos 3D en formato JSON.
  20 
  21 Los archivos `.glb` son la version binaria de los archivos `gltf`
  22 
  23 ## Loaders
  24 
  25 ```js
  26 import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader';
  27 ```
  28 
  29 ```js
  30 loader.load( 'models/helmet/DamagedHelmet.gltf',
  31             onModelLoaded,
  32             onProgress,
  33             onLoadError);
  34 ```
  35 
  36 ```js
  37 function onModelLoaded(gltf) {
  38     console.log('Model loaded', gltf);
  39     gltf.scene;
  40     scene.add(gltf.scene);
  41 }
  42 ```
  43 
  44 ```js
  45 function onProgress(event) {
  46     console.log((event.loaded / event.total) * 100 + '% loaded');
  47 }
  48 ```
  49 
  50 * CallBacks vs. Promises
  51 
  52 ## Formate USDZ
  53 
  54 Formato alternativo adoptado por Apple y desarrollado en conjunto por Pixar
  55 
  56 Object promise
  57 
  58 ## Eventos del Teclado
  59 
  60 Primero hay definir un callback para cuando se produzca un evento sobre un
  61 objeto html en particular mientras la ventana del navegador este en foco
  62 
  63 ```js
  64 Document.addEventListener('keydown', keyHandler)
  65 ```
  66 
  67 ```js
  68 function keyHandler(event) {
  69     if (event.key == 'c' && event.ctrlKey && event.shiftKey) {
  70         console.log("Ctrl+Shift+c");
  71     }
  72 }
  73 ```
  74 
  75 ### Controles
  76 
  77 #### FlyControl
  78 
  79 #### OrbitControl
  80 
  81 #### TrackballControl
  82 
  83 ### User Interface
  84 
  85 #### uil
  86 
  87 [uil](https://github.com/lo-th/uil)
  88 
  89 ### dat GUI
  90 
  91 [dat.GUI](https://github.com/dataarts/dat.gui)
  92 
  93 ```js
  94 let gui = new dat.GUI();
  95 gui.add(params, 'cantidadTotal', 0, 10).step(1);
  96 ```
  97 
  98 ## Matriz de Normales
  99 
 100 * El comportamiento deseado al trasladar y escalar un objeto, es que las
 101   normales conserven su dirección
 102 * El comportamiento deseado al rotar un objeto es que las normales cambien su
 103   dirección
 104 * Casos particulares incluyen escalado con diferente magnitud en sus componentes
 105 
 106 ## Shaders
 107 
 108 ### Uniforms
 109 
 110 Las `uniforms` son variables globales que comparten todas las unidades de
 111 procesamiento de la GPU
 112 
 113 ```js
 114 // Se definen los uniforms que se usarán en los shaders
 115 uniforms: {
 116     modelMatrix: { value: new THREE.Matrix4() },
 117     viewMatrix: { value: new THREE.Matrix4() },
 118     projectionMatrix: { value: new THREE.Matrix4() },
 119 },
 120 ```
 121 
 122 ### Varyings
 123 
 124 Las `varyings` son variables globales que el Vertex Shader comparte con el
 125 Fragment Shader
 126 
 127 ### Vertex Shader
 128 
 129 ```c
 130 precision highp float;
 131 
 132 attribute vec3 position;
 133 attribute vec2 uv;
 134 
 135 uniform mat4 modelMatrix;
 136 uniform mat4 viewMatrix;
 137 uniform mat4 projectionMatrix;
 138 varying vec2 vUv;
 139 
 140 void main() {
 141     vec3 pos = position;    
 142 
 143     gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(pos, 1.0);
 144     vUv = uv;
 145 }
 146 ```
 147 
 148 ### Fragment Shader
 149 
 150 ```c
 151 precision highp float;
 152 varying vec2 vUv;
 153 
 154 void main() {
 155     // Se pinta el fragmento con las coordenadas de textura
 156     gl_FragColor = vec4(vUv, 0.0, 1.0);
 157 }
 158 ```
 159 
 160 #### Normal a una Superficie deformada
 161 
 162 * Versión de WebGl 2.0 (OpenGL 3.0) proporciona el calculo de las derivadas
 163 * Se calcula el vector gradiente
 164 
 165 ```c
 166 vec3 x=dFdx(vViewPos);
 167 vec3 y=dFdy(vViewPos);
 168 ```
 169 
 170 ```c
 171 // Normal de la superficie surge de la normalización del producto cruz de los
 172 // vectores gradiente
 173 vec3 normal=normalize(cross(x,y));
 174 ```