-3

因此,我开始使用特定(3.2)中的新 OpenGL 版本开发游戏。我正在使用着色器和 VBO。

如何实现轮换?(我以前只使用 glRotatef)我宁愿通过程序而不是着色器来做,因为我根本不懂着色器编码。我什至不知道从哪里开始旋转,因为我想不出它会如何工作..

注意:我需要一种简单的2D游戏方法。我想围绕自己旋转三角形(构成四边形)。

用例子详细说明..

编辑:我的顶点着色器

#version 150 core

in vec4 in_Position;
in vec4 in_Color;
in vec2 in_TextureCoord;
in float in_angle;

out vec4 pass_Color;
out vec2 pass_TextureCoord;

void main(void) {
    mat4x4 roll=mat4x4(1.0);
    roll[0][0]=cos(in_angle);
    roll[0][1]=sin(in_angle);
    roll[1][0]=-(sin(in_angle));
    roll[1][1]=cos(in_angle);


    gl_Position = in_Position*roll;

    pass_Color = in_Color;
    pass_TextureCoord = in_TextureCoord;
}
4

1 回答 1

1

如果您只想实现 2d 场景,我个人会推荐 libgdx。但回到主题:旋转只能在着色器中完成。您必须根据线性代数http://en.wikipedia.org/wiki/Rotation_matrix转换顶点。你要做的是实现一个矩阵类和所有的操作,如平移、旋转和缩放,并将这个矩阵提供给着色器。这个矩阵最重要的部分是投影,但我猜你只需要简单的平行投影:https ://en.wikipedia.org/wiki/Parallel_projection

这是一个示例顶点着色器:

  uniform mat4 matrix;
  void main(void) 
      {
          gl_Position = matrix * gl_Vertex;
      }

此着色器通过将所有顶点乘以矩阵来转换所有顶点。接下来你需要一个片段着色器:

void main(void)
    {
        gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
    }

您必须通过 opengl API 编译并运行它。

于 2013-07-21T21:34:36.437 回答