打开TK翻译或更改基元坐标

时间:2014-05-09 12:45:33

标签: c# opengl vector opentk

我正在使用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); 

1 个答案:

答案 0 :(得分:-1)

绝对选择GL.Translate()选项。这就是它的原因。保持绘图坐标不变并改为更新坐标系。

如果您需要效果,请使用绘图基元创建display list,然后使用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
}