OpenGL ES 3. sistema de coordenadas y transformación de coordenadas

Hola a todos, el siguiente introducirá OpenGL ES 3. sistema de coordenadas y la transformación de coordenadas.

En primer lugar, el sistema de coordenadas, el espacio de coordenadas:

OpenGL se utiliza en un sistema de mano derecha de coordenadas cartesianas.

 

Hay cinco coordinar OpenGL importante espacio:

A: espacio local (espacio local, referido como un objeto o un espacio (objeto espacial)).

b: espacio mundial (World Space).

c: espacio de observación (Ver espacio, de otro modo conocido como visuoespacial (Espacio Eye)).

d: espacio de clip (Clip Espacio).

e: espacio en la pantalla (espacio de la pantalla).

       Con el fin de coordinar la transformación de un sistema de coordenadas a otro sistema de coordenadas, tenemos que utilizar varios matriz de transformación, los más importantes son el modelo (el modelo), observado (Ver), la proyección (proyección) de tres matriz.

       las coordenadas de los vértices del objeto y luego el espacio parcial inicial (espacio local), aquí llamados coordenadas locales (coordenadas local), después se convierte en un mundo de coordenadas (coordenadas universales), medida de coordenadas (Ver coordenadas), coordenadas de recorte (Clip de coordenadas ), y finalmente terminar en forma de coordenadas de pantalla (Corrdinate pantalla) de. El cuadro siguiente ilustra los diversos procesos y transformar lo que debe hacer:

 

En segundo lugar, el ejemplo de operación de matriz:

public class MatrixState {
    private static float[] mProjMatrix = new float[16]; //投影矩阵
    private static float[] mVMatrix = new float[16]; //视图矩阵
    private static float[] currMatrix; //模型矩阵

    private static float[] mMVPMatrix;
    public static void setCamera(
        float cx, float cy, float cz,
        float tx, float ty, float tz,
        float upx, float upy, float upz
    ){
        Matrix.setLookAtM(mVMatrix, 0, cx, cy, cz, tx, ty, tz, upx, upy, upz);
    }
 
    public static void setProjectOrtho(
        float left, float right,
        float bottom, float top,
        float near, float far
    ){
        Matrix.orthoM(mProjMatrix, 0, left, right, bottom, top, near, far);
    }
 
    public static void setProjectFrustum( 
        float left, float right,
        float bottom, float top,
        float near, float far 
    ){
        Matrix.frustumM(mProjMatrix, 0, left, right, bottom, top, near, far);
    }

    public static void translate(float x, float y, float z)
    {
        Matrix.translateM(currMatrix, 0, x, y, z); 
    }

    public static float[] getFinalMatrix() { //计算产生总变换矩阵的方法
        //摄像机矩阵乘以变换矩阵
        Matrix.multiplyMM(mMVPMatrix, 0, mVMatrix, 0, currMatrix, 0);         
        //投影矩阵乘以上一步的结果矩阵
        Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mMVPMatrix,
                          0); 
        return mMVPMatrix;
    }

 
}

 

En tercer lugar, el proceso de transformación de coordenadas es el siguiente:

Correspondiente matriz de transformación modelo es: currMatrix.

Ver transformar la matriz se corresponde: mVMatrix.

matriz de transformación proyectiva es correspondiente: mProjMatrix.

 

Cuatro, shader utilizando el ejemplo:

#version 330

layout(location = 0) in vec3 position;
layout(location = 1) in vec3 color;
layout(location = 2) in vec2 textCoord;

out vec3 VertColor;
out vec2 TextCoord;

uniform mat4 mvpMatrix;

void main()
{
    gl_Position = mvpMatrix * vec4(position, 1.0);
    VertColor = color;
    TextCoord = textCoord;
}
glUniformMatrix4fv(glGetUniformLocation(shader.programId, "mvpMatrix"),
                     1, GL_FALSE, MatrixState.getFinalMatrix()); // 传递总的变换矩阵

 

Por último, damos la bienvenida al intercambio de aprender juntos: Carta de micro: liaosy666; QQ: 2209115372  .

 

 

Publicado 20 artículos originales · elogios ganado 30 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/u010281924/article/details/105300431
Recomendado
Clasificación