首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GLScene三角形计数

GLScene三角形计数
EN

Stack Overflow用户
提问于 2015-03-19 22:50:55
回答 3查看 280关注 0票数 0

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

EN

回答 3

Stack Overflow用户

发布于 2015-03-20 15:49:20

据我所知,在OpenGL中没有办法查询场景中的顶点或三角形的总数。

票数 0
EN

Stack Overflow用户

发布于 2015-03-22 02:23:51

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

票数 0
EN

Stack Overflow用户

发布于 2015-06-09 07:51:36

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

代码语言:javascript
复制
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对象的跟踪列表即可:

代码语言:javascript
复制
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以外的其他对象的三角形数,则可以基于相同的原则扩展此函数。祝好运。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29147759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档