Delphi 场景三角形计数

Delphi 场景三角形计数,delphi,3d,glscene,Delphi,3d,Glscene,有没有办法找到场景中三角形的总数?我在文档和类引用中进行了搜索,但找不到任何与此相关的过程或方法。据我所知,在OpenGL中无法查询场景中顶点或三角形的总数…OpenGL不跟踪您可能绘制的任何特定形状。相反,它跟踪顶点之间的连接。绘制三角形时,OpenGL不一定知道这是三角形。因此,您需要实现自己的方法来跟踪正在绘制的形状,并查询自己的形状引用。请记住,通常的绘图(2D或3D)不是基于直接的形状。可能有一些非常抽象的形状甚至连名字都没有。那些说你必须自己跟踪添加的对象的人是对的。但那个些说在场景

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

据我所知,在OpenGL中无法查询场景中顶点或三角形的总数…

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

那些说你必须自己跟踪添加的对象的人是对的。但那个些说在场景中不可能计算三角形的人是错的。如果跟踪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;

如果需要为TGlFreeForm以外的其他对象计算三角形,可以根据相同的原则扩展此函数。祝你好运。

如果我没记错的话,你不需要自己跟踪形状吗?我可以计算场景中的形状(对象),但不知道每个对象中有多少个三角形。你必须自己跟踪哪个对象是哪个形状。
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;