Прогресс в офисных технологиях остановился, и это произошло потому, что пользователь, способный написать примитивненькую программку не может:
Объеты могут быть нарисованы мышью самостоятельно, скачены из интернета, получены как результат вычислений или как выходные данные с оборудования. В любом случае нам нужен:
Пользователю будет достаточно вызвать одну функцию, назовем ее 'printg', в которой указать какие 3D-объекты из базы данных должны возникнуть на экране. Эта функция, будучи вызванной первый раз, автоматически перенаправляет все мышиные команды перемещения объектов и движения камеры в СУБД, а все полученные от СУБД сообщения об обновлении координат объектов автоматически перенаправляет в Оконную Систему. Эту же функцию можно использовать, чтобы отправить приказ изменить координаты на языке запросов (изменение мгновенно отражается на экране). И эта функция может быть вызвана на любом языке программирования.
Это прорыв в офисных технологиях. Все ранее известные 3D-интерфейсы (3DMLW, 3DXML, COLLADA / OpenGL, DirectX) разработаны с расчетом на некие когнитивные способности, которыми, как показывают эксперименты, средний человек на самом деле не обладает. Tрудности, связанных с использованием 3D-объектов, возникает из-за низкого качества интерфейса, а не из-за сложности трехмерной задачи. Предлагаю назвать новый интерфейс 'управляемой сценой' и вмонтировать его в стандартные операционные системы, дабы позволить пользователю наконец-то выполнить работу и сделать его более продуктивным, и как результат - более счастливым.
Что касается реализации, полагаю, что:
Вариант #1 самый плохой - Java наиболее трудный язык для пользователей. Язык игровых и CAD приложений (вариант #2) промежуточен по трудности. Вариант #3 самый лучший - интервьюирование пользователей показывает, что вставка точек, треугольников оператором 'INSERT' и изменение координат точек оператором 'UPDATE' наиболее легки для них (!); а перенос данных из СУБД в СУБД - хоженый, обозримый, привычный процесс.
Автор изложил вариант #3 в pdf-документе (с.209-271). 3D-конструкция представлена в нем как иерархия точек, треугольников, фигур (групп треугольников), групп фигур, групп групп, и т.д. Записи, содержащие эти объекты, должны быть связаны внешним ключем. Для того, чтобы извлечь все треугольники фигуры или группы, нужно оператором 'SELECT' выбрать не только запись, являющуюся данной фигурой или группой, но и все записи, расположенные ниже нее в иерархии - вплоть до тех, которые представляют 3D-точки. Для этого таблицы этих записей перечисляются через точку - 'select * from group3.group2.group1.triangle.point' - как это и принято в классических объектно-ориентированных языках [2]. Названия таблиц значения не имеют, т.к. всегда точки предполагаются расположенными на самом нижнем уровне иерархии каждой ветви дерева, треугольники - на один уровень выше, а записи остальных уровней не визуализируются [3]. Перед преобразованием в формат X11 невидимые треугольники будут удалены из результата запроса, а частично видимые будут обрезаны до их видимых частей. Итого любая программа отображает содержимое базы данных на экране функцией 'printg("select * from group3.group2.group1.triangle.point")'.
Аналогично в операторе 'UPDATE' также можно указать всю иерархию записей от фигуры или группы до 3D-точки - 'update group3.group2.group1.triangle.point set ...'. Итого любая программа изменяет положение объекта в базе данных и на экране функцией 'printg("update group3.group2.group1.triangle.point set ...")' [4].
[1] или в формате Microsoft Window System, если движок работает в 'Microsoft Windows'
[3] как отсекать ненужные ветви дерева, подробно рассказано на с.12-16, 21-22, 34-46, 53-55, 58-68 pdf-документа
[4] процедуры сдвига, растяжения и вращения предлагаю поставлять не как хранимые в базе данных, а как встроенные в SQL, например сдвиг на 5 единиц по каждой координате выглядел бы как 'update group3.group2.group1.triangle.point shift (5,5,5)' - подробно о новых операторах 'update' и о триггерах для них рассказано на с.218, 232-233 pdf-документа. Эти же триггеры могут быть вызваны мышью, т.е. посылкой X11 данных, о чем рассказано на с.235
P.Scarponcini. SQL Multimedia and Application Packages - Part 3: Spatial. Bentley Transportation, 2000-03-26. http://www.wiscorp.com/sqlspat.zip
Тюрин Дмитрий, dmitryturin@yandex.ru