我正在使用Open TK Framework在C#中编写一个侧面滚动的Jump n'Run游戏。 为了启用侧面滚动效果,我会为我的Vector3的所有X坐标添加一个固定值,它是PrimitiveType.Quad的一部分。我构建多个四边形的所有平台都存储在链表中,以便我可以遍历它。
我的问题是,我应该在所有坐标上添加固定的constat, 这将需要迭代我的平台列表
最好更新对象X组件, 然后使用GL.Translate(x,y,z)?
进行翻译哪种方法在性能方面更好? 我是不是应该把我的相机翻到一边(这也需要在后台调用翻译功能)?
public void Move() {// is applied on a platform object
posX -= 0.015;
A.X -= 0.015; // A-H are Vector3
B.X -= 0.015;
C.X -= 0.015;
D.X -= 0.015;
E.X -= 0.015;
F.X -= 0.015;
G.X -= 0.015;
H.X -= 0.015;
}
this.gameObjects.drawObjects();
//method that iterates through linked list and draws platform objects
或更好只更新posX并使用Translate();方法:
GL.LoadIdentity();
GL.Translate(posX, 0.0f, -3.5f);
答案 0 :(得分:-1)
绝对选择GL.Translate()
选项。这就是它的原因。保持绘图坐标不变并改为更新坐标系。
如果您需要效果,请使用绘图基元创建display list,然后使用GL.Tanslate()
和GL.Rotate()
进行渲染,并使用GL.CallList()
以最简单的形式,您的绘图循环可能如下所示
for (int i=0; i<objects.Count; i++)
{
GL.PushMatrix();
objects[i].Render();
GL.PopMatrix();
}
public void Render()
{
GL.Translate(Position);
GL.Scale(Scale, Scale, Scale);
... draw primitives
}