打开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); 

打开TK翻译或更改原语坐标

绝对使用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
}