动态地改变Opengl中VBO的颜色

时间:2018-01-29 14:53:26

标签: c# opengl shader vbo shading

我正在开发一个tilemapping游戏引擎,我有一个CPU处理的照明,如我的世界不顺利闪电(左侧):

not smooth/smooth

我需要在灯光更新或灯光更新时更改每个瓷砖的颜色。现在,我正在使用它来着色和翻译vbo:

GL.BindTexture(TextureTarget.Texture2D, tile.states[tile.animationstate]);
GL.PushMatrix();
GL.Translate(position.X, position.Y, 0);
GL.Color3(col);
GL.EnableClientState(ArrayCap.VertexArray);
GL.EnableClientState(ArrayCap.TextureCoordArray);
GL.BindBuffer(BufferTarget.ArrayBuffer, tile.vbo);
GL.VertexPointer(2, VertexPointerType.Float, Vertex.SizeInBytes, 0);
GL.TexCoordPointer(2, TexCoordPointerType.Float, Vertex.SizeInBytes, Vector2.SizeInBytes);          
GL.DrawArrays(PrimitiveType.Quads, 0, 4);
GL.BindBuffer(BufferTarget.ArrayBuffer, 0);
GL.PopMatrix();

GL.Color3(相当于glColor3f),游戏性能从1000 fps增加到830 fps。如何动态更改切片的颜色?

地图的每个图块都没有vbo。每个图块图像都有它的vbo和纹理,地图是int [,]。位置中的地图值用于拼贴数组:

Render(map.tiles[map.level[x, y]]);

我已经尝试过使用GL.SubBufferData,但是每次使用4次抽取来渲染磁贴时,fps会降低到74.我不想使用GL.ColorPointer,因为每个都使用了$ curl -v http://localhost:3000/api/users --data "{ 'user_name':'xsa', 'email':'foo@bar.baz' }" 正在绘制的瓷砖。

0 个答案:

没有答案