Здравствуйте, UGN, Вы писали:
UGN>Вопрос (теоретический): как такой подход (отделение логики от представления) применяют в 3D графике.
UGN>Допустим, я хочу сделать бродилку.
//*************************\\
Похвально

//*************************//
UGN>На уровне логики у меня описаны все соответствующие классы, расчитывается их поведение, взаимодействие с окружающим миром.
UGN>Потом, по рассчитанным данным графическая библиотека ( напр. DX ) рисует картинку.
UGN>Вопрос: где считаются размеры объектов, их столкновения и проч?
//*************************\\
А где хочешь!!
//*************************//
UGN>Насколько я знаю, DX сам преобразует координаты (перемещения, повороты), сам и коллизии может посчитать. А зачем?
//*************************\\
А затем чтоб облегчить и ускорить расзаботку приложения.. Если хочешь писать это сам — все в твоих руках! Никто не запрещает тебе самому рассчитывать и повороты, и перемещения и коллизии.
//*************************//
UGN>Ведь это неправильно? Разве это не должно считаться на уровне логики?
Это не должно, это по желанию разработчика...
UGN>Разве не на уровне логики я должен определять, уперся ли мой герой лбом стену, может ли он пойти вперед?
//*************************\\
Опять неверных подход

Ты не должен!!! Ты можешь делать все, чего пожелаешь. )))
//*************************//
UGN>Это будет слишком медленно? Графический процессор оптимизирован под выполнение таких задач?
//*************************\\
Это будет зависеть от того, как ты напишешь логику. А вообще ты прав.. Графический акселератор как раз и акселерирует ))) эти задачи. Т.е. в т.ч. рассчитывает действия с 3Д объектами.
//*************************//
UGN>Как быть, если я хочу отделить код рисования от остального? Если вдруг захочу DX поменять на GL?
//*************************\\
Если хочешь — делай.
//*************************//
UGN>И вообще не понятно, как тогда все должно работать.
UGN>Может кто-нибудь просветить?
//*************************\\
Как работать... Да как придумаешь!! Можешь отдельно писать процедуру ПоворотОбъекта(Object* Obj, INT Angle, char XYZ) и на него ссылаться во всех местах своего движка. А уже в этой процедуре выбирать под какую библиотеку работаешь и соответственные телодвижения делать...
//*************************//