OpenGL ES 3. système de coordonnées et transformation de coordonnées

Bonjour à tous, le prochain présentera OpenGL ES 3. système de coordonnées et transformation de coordonnées.

Tout d'abord, le système de coordonnées, l'espace de coordonnées:

OpenGL est utilisé dans un système droitière de coordonnées cartésiennes.

 

Il y a un espace de coordonnées OpenGL cinq importantes:

a: espace local (espace local, appelé un objet ou un espace (espace objet)).

b: l'espace mondial (World Space).

c: espace d'observation (Afficher l'espace, autrement connu sous le nom visuospatiale (Space Eye)).

d: espace de clip (espace CLIP).

e: l'espace écran (espace de l'écran).

       Afin de coordonner la transformation d'un système de coordonnées à un autre système de coordonnées, nous avons besoin d'utiliser plusieurs matrice de transformation, les plus importantes sont celles du modèle (le modèle), observé (View), la projection (projection) matrice à trois.

       coordonnées de Vertex de l'objet et l'espace partiel initial (espace local), ici appelées coordonnées locales (coordonnées locales), après il devient un monde de coordonnées (monde Coordinate), coordonnées mesuré (Affichage coord), coordonnées écrêtage (clip de coordonnées ), et se termine enfin sous la forme de coordonnées d'écran (écran de Corrdinate) de. Le tableau ci-dessous illustre les différents processus et de transformer ce qu'il faut faire:

 

En second lieu, l'exemple de fonctionnement de la matrice:

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 troisième lieu, la coordonnée processus de transformation est la suivante:

matrice de transformation de modèle correspondant est: currMatrix.

Voir la matrice de transformation est correspondant: mVMatrix.

matrice de transformation projective est relative: mProjMatrix.

 

Quatre, shaders en utilisant l'exemple:

#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()); // 传递总的变换矩阵

 

Enfin, nous nous félicitons de l'échange d'apprendre ensemble: micro lettre: liaosy666; QQ: 2209115372  .

 

 

Publié 20 articles originaux · louange gagné 30 · vues 10000 +

Je suppose que tu aimes

Origine blog.csdn.net/u010281924/article/details/105300431
conseillé
Classement