以下是普通的C# OpneGL代码:
GL.Viewport(0, 0, glWin.Width, glWin.Height);
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
GL.MatrixMode(MatrixMode.Modelview);
GL.LoadIdentity();
GL.Scale(0.5, 0.5, 0.5);
GL.Rotate(60, 1, 0, 0);
GL.Translate(1, 0, 0);
float[] mat = new float[16];
GL.GetFloat(GetPName.ModelviewMatrix, mat);
GL.GetFloat(GetPName.ProjectionMatrix, mat);
GL.Begin(PrimitiveType.Triangles);
GL.Color3(Color.MidnightBlue);
GL.Vertex2(-1.0f, 1.0f);
GL.Color3(Color.SpringGreen);
GL.Vertex2(0.0f, -1.0f);
GL.Color3(Color.Ivory);
GL.Vertex2(1.0f, 1.0f);
GL.End();
移植到WebGL时,由于只能使用Shader的关系,所以先通过 GetFloat 取得了C#运行时的ModelMatrix值。然后在 js 中直接把该值传入到下面的VertexShader的MVMatrix里面,但是 画出的效果却不相同。
attribute vec3 ModelVertex;
uniform mat4 MVMatrix;
void main(void){
gl_Position = vec4(ModelVertex, 1.0) * MVMatrix;
}
Shader是不是写错了?