模型矩阵变换 OpenGL ES 2.0

拉波

我在渲染器的 onDrawFrame 中编写了此代码:

[...]
setIdentityM(modelMatrix, 0);
translateM(modelMatrix, 0, 40f, 0f, 25f);
rotateM(modelMatrix, 0, 90f, 1f, 0f, 0f);
scaleM(modelMatrix, 0, 6f, 6f, 6f);

multiplyMM(MVPmatrix, 0, viewProjectionMatrix, 0, modelMatrix, 0);
myHouse1coords = myHouse1.getWorldCoords(modelMatrix); //myHouse1coords is an array
[...]

我使用此代码来追踪我在“房子”上应用的转换:

[...]   
private final static float[] COORDINATES = { //x, y, z, r, g, b
        0f, 0f, 0f, 1f, 0f, 0f, //bottom
        2f, 0f, 0f, 0f, 1f, 0f, //dx
        0f, 1f, 0f, 0f, 0f, 1f, //sx
        2f, 1f, 0f, 1f, 1f, 1f //top
};
    public float[] getWorldCoords(float[] matrix)
{
    int i = 0;
    float[] coordinates1 = new float[4];
    float[] coordinates2 = new float[4];
    float[] coordinates3 = new float[4];
    float[] coordinates4 = new float[4];

    do {
        coordinates1[i] = COORDINATES[i];
        i++;
    } while (i < 3);
    i = 0;
    coordinates1[3] = 0f;

    do {
        coordinates2[i] = COORDINATES[i + 6];
        i++;
    } while (i < 3);
    i = 0;
    coordinates2[3] = 0f;

    do {
        coordinates3[i] = COORDINATES[i + 12];
        i++;
    } while (i < 3);
    i = 0;
    coordinates3[3] = 0f;

    do {
        coordinates4[i] = COORDINATES[i + 18];
        i++;
    } while (i < 3);
    coordinates4[3] = 0f;

    float[] finalCoordinates1 = new float[4];
    float[] finalCoordinates2 = new float[4];
    float[] finalCoordinates3 = new float[4];
    float[] finalCoordinates4 = new float[4];

    multiplyMV(finalCoordinates1, 0, matrix, 0, coordinates1, 0);
    multiplyMV(finalCoordinates2, 0, matrix, 0, coordinates2, 0);
    multiplyMV(finalCoordinates3, 0, matrix, 0, coordinates3, 0);
    multiplyMV(finalCoordinates4, 0, matrix, 0, coordinates4, 0);


    float[] coordinates = new float[16];
    i = 0;
    int j = 0;

    do {
        coordinates[i] = finalCoordinates1[j];
        i++;
        j++;
    } while (j < 4);
    j = 0;

    do {
        coordinates[i] = finalCoordinates2[j];
        i++;
        j++;
    } while (j < 4);
    j = 0;

    do {
        coordinates[i] = finalCoordinates3[j];
        i++;
        j++;
    } while (j < 4);
    j = 0;

    do {
        coordinates[i] = finalCoordinates4[j];
        i++;
        j++;
    } while (j < 4);

    Log.d("DRAGTESTRENDERER", "coords[4]" + coordinates[4]);
    return coordinates;
}

[...]

问题是,当我在 logcat 中运行此代码时,结果为 12.0,就好像我只在我的房子上应用了比例转换,但我不明白为什么,因为我之前翻译和旋转了它。

拉波

问题是我将坐标向量的第 4 个元素(w 分量)设置为 0f 而不是 1f。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

OpenGL ES 2D矩阵设置

来自分类Dev

Android OpenGL ES2。0VBO无法渲染

来自分类Dev

Opengl ES 2.0:模型矩阵与每个顶点的计算

来自分类Dev

OpenGL变换矩阵顺序向后

来自分类Dev

关于OpenGL ES 2的问题

来自分类Dev

如何使用OpenGL ES绘制具有不同变换矩阵的多个三角形?

来自分类Dev

获取Opengl的子弹物理变换矩阵

来自分类Dev

OpenGL模型,视图,投影矩阵

来自分类Dev

变换模型矩阵

来自分类Dev

使用方向向量和变换矩阵的OpenGL对象旋转

来自分类Dev

在iOS中的openGL 2中旋转模型

来自分类Dev

在OpenGL中存储模型矩阵的最佳位置?

来自分类Dev

Android openGL ES2rotateMM翻转角度

来自分类Dev

如何在OpenGL ES 2中正确缩放

来自分类Dev

Kevin Brothaler OpenGL ES 2教程代码是否错误?

来自分类Dev

OpenGL ES2 Alpha测试问题

来自分类Dev

Android OpenGL ES 2-混合似乎总是可加的

来自分类Dev

OpenGL ES 2.0 2D(Marmalade SDK)

来自分类Dev

Android上的OpenGL ES 2:如何使用VBO

来自分类Dev

OpenGL ES 2.0 Texture2D索引

来自分类Dev

无法使RGB纹理显示在OpenGL ES2中

来自分类Dev

Android Opengl ES2,颜色代替纹理中的位图

来自分类Dev

旋转了Android OpenGL ES 2纹理象限

来自分类Dev

多个OpenGL ES 2 Android渲染器

来自分类Dev

在opengl es 2中如何释放纹理(ios硬崩溃)

来自分类Dev

OpenGL ES 2.0 2D(Marmalade SDK)

来自分类Dev

Android OpenGL ES 2-混合似乎总是可加的

来自分类Dev

如何在OpenGL ES 2中处理多个对象

来自分类Dev

OpenGL ES 2D绘图性能估计