Opengl es 在OpenGL ES 2.0中实现固定功能管道效率?

Opengl es 在OpenGL ES 2.0中实现固定功能管道效率?,opengl-es,matrix,matrix-multiplication,opengl-es-2.0,Opengl Es,Matrix,Matrix Multiplication,Opengl Es 2.0,我想在openGL 2.0应用程序中使用固定函数方法,如glTranslate()、glRotate()、glScale()。我知道,我需要实现一个矩阵类,并且已经实现了。我现在的问题是关于效率。能够使用以下内容: glLoadIdentity(); glRotatef(2.0f, 0.0f, 0.0f, 1.0f); glScalef(2.0f, 2.0f, 2.0f); 我想,我至少需要做3次矩阵乘法(假设我们有一个投影和一个modelview矩阵,这是针对modelview的)。 第一个

我想在openGL 2.0应用程序中使用固定函数方法,如glTranslate()、glRotate()、glScale()。我知道,我需要实现一个矩阵类,并且已经实现了。我现在的问题是关于效率。能够使用以下内容:

glLoadIdentity();
glRotatef(2.0f, 0.0f, 0.0f, 1.0f);
glScalef(2.0f, 2.0f, 2.0f);
我想,我至少需要做3次矩阵乘法(假设我们有一个投影和一个modelview矩阵,这是针对modelview的)。 第一个是:单位矩阵*旋转矩阵-第二个是:ActualMatrix*ScaleMatrix,最后一个是:projectionMatrix*ActualMatrix(这个Im作为统一值传递给我的着色器)

因此,我的Vertexshader看起来像:

attribute vec4 position;
attribute vec4 color;

varying vec4 colorVarying;

uniform mat4 modelViewProjectionMatrix;

void main()
{
    gl_Position = modelViewProjectionMatrix * position;
    colorVarying = color;
}
在OpenGLES1.1中也是这样吗?看起来,我需要一个矩阵乘法:glRotate,glScale,glTranslate。。。打电话——这对我来说似乎很重要。还是有更好的办法?(可能矩阵乘法更少?)


在此主题上的任何帮助都将不胜感激!感谢您阅读

检查此项:

检查此项:

恒等式、平移、旋转和缩放矩阵不需要完全矩阵乘法才能应用,因为许多项始终为0.0或1.0。如果写出其他矩阵与这些矩阵相乘的逐元素结果,您将看到许多元素的最终值可能只有几个项。两个简单的例子:

  • 给定单位矩阵I和任意矩阵M,I×M=M×I=M
  • 缩放矩阵S中唯一的非零元素是对角线上的四个元素,我们称之为S0、S1、S2和S3。(对于
    glScalef
    之类的东西,S3总是1.0)S×M按Sn缩放M的第n行。M×S可以一列一列地工作。您还可以将单位矩阵视为一个特别无聊的缩放矩阵

生成的平移和旋转的逐元素表达式比这些示例稍微复杂一些,但仍然比完整的矩阵乘法简单得多。(如果旋转轴与X、Y或Z轴完全对齐,旋转也会变得简单得多。)当要求平移、缩放或旋转时,您可能希望直接修改矩阵,而不是构建另一个矩阵并进行乘法。

单位、平移、旋转,缩放矩阵不需要完全的矩阵乘法,因为许多项总是0.0或1.0。如果写出其他矩阵与这些矩阵相乘的逐元素结果,您将看到许多元素的最终值可能只有几个项。两个简单的例子:

  • 给定单位矩阵I和任意矩阵M,I×M=M×I=M
  • 缩放矩阵S中唯一的非零元素是对角线上的四个元素,我们称之为S0、S1、S2和S3。(对于
    glScalef
    之类的东西,S3总是1.0)S×M按Sn缩放M的第n行。M×S可以一列一列地工作。您还可以将单位矩阵视为一个特别无聊的缩放矩阵

生成的平移和旋转的逐元素表达式比这些示例稍微复杂一些,但仍然比完整的矩阵乘法简单得多。(如果旋转轴与X、Y或Z轴完全对齐,旋转也会变得简单得多。)当要求平移、缩放或旋转时,您可能希望直接查看修改矩阵,而不是构造另一个矩阵并进行乘法。

你能给我一些关于如何在没有矩阵乘法的情况下实现gluLookAt的说明吗?你能给我一些关于如何在没有矩阵乘法的情况下实现gluLookAt的说明吗。
attribute vec4 position;
attribute vec4 color;

varying vec4 colorVarying;

uniform mat4 modelViewProjectionMatrix;

void main()
{
    gl_Position = modelViewProjectionMatrix * position;
    colorVarying = color;
}