打开TK翻译或更改原语坐标
本文关键字:原语 坐标 TK 翻译 打开 | 更新日期: 2023-09-27 18:02:44
我正在使用开放TK框架在c#中编写一个横向滚动跳跃和运行游戏。为了启用侧滚动效果,我将为我的Vector3的所有X坐标添加一个固定值,这是PrimitiveType.Quad的一部分。我所有的平台,我建立了多个四方存储在一个链表中,这样我就可以遍历它。
我的问题是,我应该添加一个固定的常量到所有坐标,这需要迭代我的平台列表
或
是否更适合更新对象的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);
绝对使用GL.Translate()
选项。这就是它存在的原因。保持绘制坐标不变,并更新坐标系统。
如果你想要性能,然后用绘图原语创建一个显示列表,然后用GL.Tanslate()
和GL.Rotate()
渲染,用GL.CallList()
调用列表
编辑1
在最简单的形式中,你的绘图循环可能看起来像这样
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
}