0

有没有办法找到场景中三角形的总数?我在文档和类参考中进行了搜索,但找不到任何相关的过程或方法。

4

3 回答 3

0

OpenGL 不会跟踪您可能绘制的任何特定形状。相反,它跟踪顶点之间的连接。绘制三角形时,OpenGL 不一定知道这是一个三角形。因此,您需要实现自己的方法来跟踪您正在绘制的形状,并查询您自己的形状参考。请记住,一般的绘图(2D 或 3D)不是基于直接的形状。可能有非常抽象的形状,甚至没有名字来称呼它们。

于 2015-03-21T18:23:51.000 回答
0

As far as I know there is no way to query the total number of vertices or triangles in the scene in OpenGL ...

于 2015-03-20T07:49:19.853 回答
0

那些说你必须自己跟踪添加的对象的人是对的。但是那些说在 GLScene 中不可能计算三角形的人是错误的。如果您在 TStrings 中跟踪所有添加的 GlFreeForms,您可以使用我为此目的编写的这个小函数来计算 GLScene 三角形:

function CountSceneTriangles(GLScene: TGlScene; SceneObjectList: TStrings): Integer;
var
  I, ITriCount: Integer;
  TempSceneObject: TGLBaseSceneObject;
begin
  ITriCount := 0;

  if (SceneObjectList.Count > 0) then
  begin
    for I := 0 to SceneObjectList.Count-1 do
    begin
      TempSceneObject:= Form1.GLScene1.FindSceneObject(SceneObjectList[I]));
      if (TempSceneObject <> nil) then
      begin
        ITriCount := ITriCount + (TGLFreeForm(TempSceneObject).MeshObjects.TriangleCount);
      end;
    end;
  end;

  result := ITriCount;
end;

只需将您的 TGLScene 组件名称和所有添加的 GLFreeForm 对象的跟踪列表传递给它,如下所示:

procedure TForm1.FormCreate(Sender: TObject);
var
  SObjList: TStrings;
begin
  SObjList := TStrings.Create;
  SObjList.Add('GlFreeForm1'); //examples of tracked TGlFreeForms
  SObjList.Add('GlFreeForm2');
  SObjList.Add('GlFreeForm3');
  Form1.Caption := 'Triangles Count: ' + IntToStr(SObjList(Form1.GlScene1, SObjList));
  SObjList.Free;
end;

如果您需要计算除 TGlFreeForm 之外的其他对象的三角形,您可以根据相同的原理扩展此功能。祝你好运。

于 2015-06-08T23:51:36.323 回答