gpt4 book ai didi

c# - 为什么要使用 glTranslate?

转载 作者:太空宇宙 更新时间:2023-11-03 23:47:10 24 4
gpt4 key购买 nike

当我可以自己进行位置数学运算时,插入/弹出矩阵以平移形状的目的是什么?我可以理解使用前面提到的矩阵来做更困难的操作(例如旋转),但为什么要专门翻译?

public void render()
{
positionX++;

GL.PushMatrix();
GL.Translate(positionX, positionY, 0);

GL.MatrixMode(MatrixMode.Modelview);
GL.LoadIdentity();

GL.Begin(PrimitiveType.Quads);

GL.Vertex2(0, 0);
GL.Vertex2(0 + widthX, 0);
GL.Vertex2(0 + widthX, 0 + widthY);
GL.Vertex2(0, 0 + widthY);

GL.PopMatrix();

GL.End();
}

对比

public void render()
{
positionX++;
GL.MatrixMode(MatrixMode.Modelview);
GL.LoadIdentity();

GL.Begin(PrimitiveType.Quads);

GL.Vertex2(positionX, positionY);
GL.Vertex2(positionX + widthX, positionY);
GL.Vertex2(positionX + widthX, positionY + widthY);
GL.Vertex2(positionX, positionY + widthY);

GL.End();
}

最佳答案

我不认为这是一个愚蠢的问题,尽管随着您更多地使用 OpenGL,答案可能会变得清晰。

使用glTranslate(或类似的方法)进行翻译在您需要不同的转换顺序时肯定会派上用场。仅当平移是您要执行的第一个转换时,更改顶点坐标才有效。例如,如果你想做旋转,然后平移,然后再旋转,你必须使用矩阵。

然而,主要原因是通常您不会在每一帧都将顶点发送到 GPU。这非常慢,事实上,您使用的所有 GL.* 方法现在都已弃用。现在的做法是:

  1. 在开始渲染任何内容之前将所有顶点数据发送到 GPU 一次(请记住它可能是数千个或更多的多边形)。
  2. GPU 会将数据存储在其内部存储器中(这就是为什么您的显卡上有多少 MB/GB 的 RAM)并给您一个 ID(例如 1)。
  3. 渲染帧时,您只需告诉 GPU“绘制您用 id 1 保存的东西”。这是一次 OpenGL 调用 - 请记住,每次 OpenGL 调用都有成本(即时间),因此调用越少,图形处理速度越快。

纹理、着色器和其他东西也是如此。

因此,您通常不会在将顶点数据发送到 GPU 后对其进行修改(从技术上讲,可以修改,但出于性能原因,不建议这样做)。因此,如果您想要进行任何转换,就必须使用矩阵。

最后一点,我要再说一遍,您使用的是已弃用的功能,我认为这对于学习一些基本概念来说还算不错,但我肯定会建议迁移到当前的 OpenGL(或至少是 OpenGL 3)尽快了解着色器、顶点缓冲区、顶点数组和所有新的 Shiny 东西。

TL;DR:是的,你可以自己做。但最好让你的显卡来做,因为它可以更快地完成。事实上,这是拥有专用显卡的主要原因。

关于c# - 为什么要使用 glTranslate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27238632/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com