Учебно-методический сайт
Василия Щербакова
 

3D визуализация

В продукте Acsocad имеются объекты для визуализации процессов с использованием технологии OpenGL.
Для использования 3D графики на схеме размещается элемент 3D-Объект. Нужные объекты выбираются в меню "Импорт 3D". Также имеется возможность создания собственного 3D-объекта путем импорта из файла, написанного на языке Си.

Все объекты условно подразделяются на 3 категории:

1. Плоские объекты представляют собой, в основном, 2d объекты, отрисовка которых осуществляется в 3d режиме. Такие объекты не имеют собственных координат и предназначены для работы в режиме дисплея - графической индикации состояния системы.

2. 3D-объекты представляют собой полноценные 3D-модели, которые обязательно имеют 3 координаты положения (x, y, z) и 3 координаты поворота в градусах (rx, ry, rz). Кроме указанных 6 входов в зависимости от типа объекта подаются соответствующие сигналы, например, угол поворота вала двигателя.

3. Элементы окружающей среды являются вспомогательными и используются для формирования 3D-сцены.

Разработка 3D-объекта в продукте Acsocad.

Собственные файлы должны иметь расширение *.acs3dc и написаны на языке Си.
Файл должен содержать функцию ACSGL, в которую передается:
state - состояние: 0 - при инициализации, 1 - при обычной прорисовке, 2 - при завершении
Un - число доступных подключенных входов объекта
S - шаг моделирования
N - текущее число снятых точек
t - текущее время моделирования
u[i] - текущее значение i-го входа (u[0] - первый вход, u[1] - второй вход, ...)
dN - число точек в хранилище
dT[0...dN-1] - массив времени моделирования в хранилище
dU[i][0...dN-1] - массив значения i-го входа в хранилище
userdata - пользовательская переменная (при инициализации в неё может быть выделена память)

Шаблон файла acs3dc
void ACSGL(char state, long Un, double S, long N, double t, double* u, long dN, double* dT, double** dU, void** userdata, double* cam_scale, double* cam_rx, double* cam_ry, double* cam_rz, double* cam_px, double* cam_py, double* cam_pz){

if(state==0){} // Выполняется при инициализации
if(state==2){return;} // Выполняется при выходе
// далее производится требуемое рисование

}

Пример файла acs3dc: поверхность
void ACSGL(char state, long Un, double S, long N, double t, double* u, long dN, double* dT, double** dU, void** userdata, double* cam_scale, double* cam_rx, double* cam_ry, double* cam_rz, double* cam_px, double* cam_py, double* cam_pz){
if(state==0){} // Выполняется при инициализации
if(state==2){return;} // Выполняется при выходе
glPushMatrix();
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glTranslated(-5,-0.5,-5);
glBegin(GL_POLYGON);
glColor3d(0.3,0.5,0.3);
glVertex3d(0,0,0);
glColor3d(0.3,0.7,0.3);
glVertex3d(0,0,10);
glColor3d(0.3,0.9,0.3);
glVertex3d(10,0,10);
glColor3d(0.3,0.7,0.3);
glVertex3d(10,0,0);
glEnd();
glPopMatrix();
}

 
Рейтинг@Mail.ru
Все материалы сайта принадлежат лично Василию Щербакову.
Допускается использование материалов в некоммерческих или учебных целях с указанием ссылки на этот сайт.