Herramientas de usuario

Herramientas del sitio


wiki2:ogl

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
wiki2:ogl [2015/12/05 15:43]
alfred [VBO (Vertex Buffer Objects)]
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 =====
 +
 +==== 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 297: 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 308: 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 ====
wiki2/ogl.1449330217.txt.gz · Última modificación: 2020/05/09 09:25 (editor externo)