F-MAP писал(а):
В этом согласиться трудно, экран же пока плоский, все решаемо.. как с видеокартой взаимодействуют, OpenGL мог не на всех работать (ранее тестировал, сейчас наверно уже все поддерживают), с GDI проблем небыло
Работа с трехмерной графикой отличается очень существенно. Двумерная графика, с помощью которой и рисуются элемент интерфейса Windows, основана на обычном двумерном массиве пикселей. Потребности работы с ним давно закрыты с точки зрения аппаратуры. Другое дело, что библиотеки Windows ставят точки не просто так, а дополнительно проверяют, что рисуемый элемент не закрыт каким-то другим окном. В этом кроется небольшая проблема - например, "базовый" объект TCanvas, который как раз и позволяет закрасить любой свой пиксель в любой цвет, делает это достаточно медленно, если речь идет именно о пикселях, а не более сложных фигурах. Поэтому для закраски больших фрагментов экрана даже в 2D пользуются более сложными инструментами, дающими доступ непосредственно к видеопамяти.
Трехмерная графика устроена совершенно иначе. Разумеется, мы видим не физически трехмерное изображение, а его проекцию на экран. Однако даже для того, чтобы нарисовать такую проекцию, необходимо выполнить много математической работы. Например, если мы смотрим на куб с обратной стороны, то и рисовать надо обратную сторону, а не лицевую. В итоге описание трехмерного изображения сводится к описанию
сцены. В нем указывается, какие точки находятся в трехмерном пространстве, какие фигуры они образуют, и какие текстуры наложены на эти фигуры. Далее необходимо указать, с какой точки и в каком направлении мы на это все смотрим, и видеокарта самостоятельно определит положение каждой описанной фигуры. Дополнительно будут использованы эффекты освещения, тумана, наложены фильтры, убирающие "ступеньки" на линиях и т.д. - все автоматически. Именно поэтому современная видеокарта стоит весьма приличные деньги. Ее производительность и характеристики напрямую содержат информацию - сколько параллельно работающих графических ядер есть внутри и сколько треугольников в секунду способен обработать GPU. При этом речь идет о миллионах треугольников.
Разумеется, программисту гораздо удобнее описывать именно сцену, а не думать каждый раз, как пересчитывать координаты. Для этого и существуют библиотеки, работающие с трехмерной графикой. Для игровых приложений в Windows это DirectX, и конкретно DirectDraw и Direct3D. Однако это подходит больше для игр, к тому же рассчитано именно на Windows. Более универсальная и математически строгая библиотека - OpenGL. В настоящее время трудно найти видеокарту, которая не поддерживает обе эти библиотеки. Поддержка, правда, обеспечивается драйверами от производителей, но без драйверов видеокарта живет обычно до первой установки серьезной игрушки, которая обнаружит отсутствие драйверов и заставит их поставить.