2015-01-12 4 views
2

Я работаю над API-интерфейсом 3D-движка здесь (движок рендеринга, а не игровой движок как таковой) и пытается правильно получить имена классов.В чем разница между «сущностью» и «игровым объектом»?

В моей системе у меня есть суп из таких компонентов, как «камера», «трансформировать», «огни», «материал» и т. Д., Включая другой тип компонента, который я назвал «объектом».

Каждый «объект» имеет одну ссылку на каждый из других типов компонентов, т.е. ссылку на «камеру», ссылку на «материал» и т. д.

Довольно стандартный материал.

Мой вопрос: должен ли он называться «объект» или «сущность» или что-то еще?

Может ли кто-нибудь, возможно, указать мне на каноническую литературу по этим понятиям? Кажется, это вопрос личного вкуса для многих людей, но для максимального понимания документов, которые я хотел бы получить, эта тонкость прибита.

+1

Я не думаю, что есть литература в этой области, которая не представляет личного вкуса ее автора.Вопрос в том, каков ваш «объект» и почему он содержит ссылку на эти компоненты - я бы ожидал некоторую форму наследования здесь. Если эти объекты являются частью графика сцены, возможно, «узел» прав, чтобы подчеркнуть это. Если они просто программируют «помощники», группировать эти компоненты в один список «объект» или что-то еще, связанное с программированием, лучше. «Сущность» как абстрактная «вещь, которая существует» может быть не так, поскольку «материал» больше похож на атрибут объекта. – Thomas

+0

Aha right - так что «объект» подразумевал бы ООП. «Материал» можно рассматривать как «аспект» или атрибут «сущности». Думаю, я просто хочу понять, что влияет на умы людей, это помогает. – xeolabs

+0

«Объект» не будет строго подразумевать oop, поскольку он может также ссылаться на объект реального мира - но я думаю, что в этом случае большинство людей думает о oop, если они его слышат. Опять же, с «аспектом» или «атрибутом» контекст имеет значение. Хотя аспект кажется более разговорным или абстрактным для меня, атрибут - это нечто, что можно услышать в контексте описания «материалов» и т. Д. Все зависит от настройки, в которой вы думаете. Если речь идет о шейдерах, некоторые люди могут воспринимать «атрибут» как особый shader variable в GLSL, поэтому, если вы хотите сосредоточиться на GLSL, вам может понадобиться что-то другое, но в остальном это нормально. – Thomas

ответ

3

Я видел несколько движков javascript для webgl. Терминология для каждого была различной.

Различие между «сущностью» и «игровым объектом»?

Обычно объект - это то, что вы можете воспринимать с помощью зрение и/или прикосновения. Хотя сущность может восприниматься только с шестым чувством или совсем не (две камеры в сцене не могут воспринимать друг друга). Каждый объект является сущностью, но не каждый объект представлен объектом.

В программировании Камера, огни, модели, сцена, все они нуждаются в положении, вращении и масштабе. Также многое зависит от того, что здесь происходит еще одно важное слово: Узел.

В иерархии ООП Узел является первым. Он имеет ровно один родитель, кроме первого узла, который не имеет ни одного, и ноль или более детей. Объект расширяет узел. Он имеет положение, поворот, масштаб + родитель, дети. Каждое преобразование повлияет на всех детей. Объект расширяет объект. Объект может иметь дополнительные различные свойства, такие как набор сеток, (каждый объект состоит из одной или нескольких сетки, каждая из которых имеет материал).

Советы:

Иногда бесполезно иметь 3 различных объектов в иерархии ООП. Большинство двигателей объединяют их в один объект или два, а разные компоненты могут исключать свойства в конструкторе. Например, глобальный свет не нуждается в положении, вращении или масштабе. Направленный свет не нуждается в положении и масштабе, но требует вращения. Но расширение всей иерархии ООП только из-за двух компонентов не стоит.

В playcanvas его название - Entity. В трех словах это имя Object3D. Имя может быть также GraphNode или Node, так как оно находится в cocos2d (который является 2d-движком).

У меня нет литературы, но я согласен с Томасом в этом: старайтесь избегать таких слов, как Object, Node, потому что это сбивает с толку. Я думаю, что лучшим именем для объединения этого является Entity, но это не имеет ничего общего с тем, что более или менее, или описанием самого слова. Самое главное, что вы и другие находите в замешательстве.

+0

BTW Эта часть похожа на суперважную «Каждый объект состоит из одной или нескольких сеток, каждая из которых имеет материал», потому что если вы когда-либо работаете с блендером или другой студией, вы должны знать, что экспортированная модель имеет иерархию мешей, а иногда и больше. Вам нужно будет выбрать, с какими моделями ваш двигатель может работать (совместим). –

+0

В общем случае в ООП каждый объект (экземпляр класса) может иметь несколько родителей через множественное наследование, поэтому узел здесь не очень хорош из-за ООП. Однако я согласен, что узел хорош, потому что похоже, что вы строите граф сцены, а «точки соединения» в теории графов называются узлами. Кроме того, в графе сцены каждый узел должен иметь только один родитель, поскольку его позиция должна быть закреплена последовательностью преобразований до корня. Опять же, говоря в терминах графа, узел может иметь несколько родителей = внутренние края в целом. – Thomas

Смежные вопросы