Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
|
wiki2:ogl [2015/12/06 16:20] alfred [Lenguaje GLSL] |
wiki2:ogl [2020/05/09 09:25] (actual) |
||
|---|---|---|---|
| Línea 157: | Línea 157: | ||
| </code> | </code> | ||
| ===== Texturas ===== | ===== Texturas ===== | ||
| + | |||
| + | ==== Básico ==== | ||
| Creating textures is very similar to creating vertex buffers : Create a texture, bind it, fill it, and configure it. | Creating textures is very similar to creating vertex buffers : Create a texture, bind it, fill it, and configure it. | ||
| Línea 179: | Línea 181: | ||
| glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); | ||
| </code> | </code> | ||
| + | ==== Animar texturas ==== | ||
| + | === Usando el fragment shader === | ||
| + | * {{:wiki2:ogl:animating.textures.zip|}} | ||
| + | |||
| + | ==== Renderizar sobre textura ==== | ||
| + | |||
| + | Para esto se usa un FBO. Básicamente creas el FBO, reemplazas el buffer donde renderizas por el del FBO creado y dibujas, luego enlazas otra vez el buffer por defecto y en el FBO tienes la textura. | ||
| + | |||
| + | Recuerda indicar el tamaño de píxels, haber creado anteriormente de las texturas que vas a usar en el fbo y tener el shader program activo. | ||
| + | |||
| + | :!: Recuerda que para OpenGL el 0,0 está en la esquina de abajo a la izquierda. Si el sistema que usas cambia, es probable que **la textura fbo aparezca volteada**. | ||
| + | |||
| + | * {{:wiki2:ogl:fbo.zip|}} | ||
| ===== Transformaciones ===== | ===== Transformaciones ===== | ||
| + | ==== Anidar transformaciones (push y pop matrix) ==== | ||
| + | Para anidar transformaciones dentro de otras (al mover, escalar un elemento se mueva y escale igual el que tiene dentro), las figuras hijo aplicarán sus transformaciones a partir de la matriz del modelo de la padre. | ||
| + | |||
| + | Es decir: | ||
| + | <code java> | ||
| + | float[] translateMatrix = new float[16]; | ||
| + | setIdentityM(translateMatrix, 0); | ||
| + | float[] scaleMatrix = new float[16]; | ||
| + | setIdentityM(scaleMatrix, 0); | ||
| + | |||
| + | if (mMatrix == null) { | ||
| + | // Si no tiene padre inicializamos la matriz del modelo a la identidad | ||
| + | setIdentityM(modelMatrix, 0); | ||
| + | } else { | ||
| + | // Si tiene padre usamos su matriz de modelo para aplicar las nuevas transformaciones | ||
| + | for (int i = 0; i < 16; i++) | ||
| + | modelMatrix[i] = mMatrix[i]; | ||
| + | } | ||
| + | |||
| + | // Creamos nuestras transformaciones | ||
| + | translateM(translateMatrix, 0, posX, posY, posZ); | ||
| + | scaleM(scaleMatrix, 0, sizeX, sizeY, sizeZ); | ||
| + | |||
| + | float[] temp = new float[16]; | ||
| + | |||
| + | // Aplicamos las transformaciones sobre la matriz del modelo (anterior o identidad) | ||
| + | multiplyMM(temp, 0, modelMatrix, 0, translateMatrix, 0); | ||
| + | for (int i = 0; i < 16; i++) | ||
| + | modelMatrix[i] = temp[i]; | ||
| + | |||
| + | multiplyMM(temp, 0, modelMatrix, 0, scaleMatrix, 0); | ||
| + | for (int i = 0; i < 16; i++) | ||
| + | modelMatrix[i] = temp[i]; | ||
| + | </code> | ||
| + | * {{:wiki2:ogl:nested.transforms.zip|}} | ||
| ===== Lenguaje GLSL ===== | ===== Lenguaje GLSL ===== | ||
| Línea 300: | Línea 350: | ||
| </code> | </code> | ||
| ===== Shaders en general ===== | ===== Shaders en general ===== | ||
| + | |||
| + | * :!: El optimizador de GLSL borrará todas las variables que no uses. | ||
| ===== Vertex Shader ===== | ===== Vertex Shader ===== | ||
| ==== Cambiar el tamaño de los puntos dibujados ==== | ==== Cambiar el tamaño de los puntos dibujados ==== | ||
| Línea 311: | Línea 363: | ||
| </code> | </code> | ||
| + | ==== Hacer el color algo más oscuro ==== | ||
| + | <code> | ||
| + | gl_FragColor = texture2D(u_TextureUnit, v_TextureCoordinates) * vec4(0.5, 0.5, 0.5, 1); | ||
| + | </code> | ||
| ===== Otros ===== | ===== Otros ===== | ||
| ==== Código ejemplo iOS ==== | ==== Código ejemplo iOS ==== | ||