Forth http://www.fforum.winglion.ru/ |
|
Quark: простейшее 3D http://www.fforum.winglion.ru/viewtopic.php?f=23&t=2788 |
Страница 1 из 3 |
Автор: | Hishnik [ Вс дек 25, 2011 17:23 ] |
Заголовок сообщения: | Quark: простейшее 3D |
Итак, чтобы не перегружать изложение кучей кода, начинаем пробовать 3D. Код: 0 VALUE ActiveLibrary : FUNCTION ActiveLibrary SWAP GETPROCADDRESS VALUE ; " opengl32.dll" LOADLIBRARY VALUE OPENGL OPENGL TO ActiveLibrary " glViewport" FUNCTION glViewPort@ : glViewPort glViewPort@ API4 DROP ; " glPointSize" FUNCTION glPointSize@ : glPointSize glPointSize@ API1 DROP ; " glColor3i" FUNCTION glColor3i@ : glColor3i glColor3i@ API3 DROP ; " glColor3ubv" FUNCTION glColor3ubv@ : glColor3ubv glColor3ubv@ API1 DROP ; " glColor4ubv" FUNCTION glColor4ubv@ : glColor4ubv glColor4ubv@ API1 DROP ; " glVertex2dv" FUNCTION glVertex2dv@ : glVertex2dv glVertex2dv@ API1 DROP ; " glVertex3dv" FUNCTION glVertex3dv@ : glVertex3dv glVertex3dv@ API1 DROP ; " glBegin" FUNCTION glBegin@ : glBegin glBegin@ API1 DROP ; " glEnd" FUNCTION glEnd@ : glEnd glEnd@ API0 DROP ; " glEnable" FUNCTION glEnable@ : glEnable glEnable@ API1 DROP ; " glDisable" FUNCTION glDisable@ : glDisable glDisable@ API1 DROP ; " glClear" FUNCTION glClear@ : glClear glClear@ API1 DROP ; " glPushMatrix" FUNCTION glPushMatrix@ : glPushMatrix glPushMatrix@ API0 DROP ; " glPopMatrix" FUNCTION glPopMatrix@ : glPopMatrix glPopMatrix@ API0 DROP ; " glFrustum" FUNCTION glFrustum@ : glFrustum 6 glFrustum@ API DROP ; " glTranslatef" FUNCTION glTranslatef@ : glTranslatef glTranslatef@ API3 DROP ; " glTexImage2D" FUNCTION glTexImage2D@ : glTexImage2D glTexImage2D@ API9 DROP ; " glTexParameteri" FUNCTION glTexParameteri@ : glTexParameteri glTexParameteri@ API3 DROP ; " glTexCoord2dv" FUNCTION glTexCoord2dv@ : glTexCoord2dv glTexCoord2dv@ API1 DROP ; " glTexEnvf" FUNCTION glTexEnvf@ : glTexEnvf glTexEnvf@ API3 DROP ; CREATE Point1 3 FLOATS ALLOT CREATE Point2 3 FLOATS ALLOT : SET3D // POINT, F: X, Y, Z -- DUP 2 -TH F! DUP 1 -TH F! F! ; : MY_SCENE 0 0 500 500 glViewPort GL_DEPTH_TEST glEnable GL_DEPTH_BUFFER_BIT glClear GL_LIGHTING glEnable GL_LIGHT0 glEnable GL_LIGHT1 glEnable GL_COLOR_MATERIAL glEnable GL_LINE_SMOOTH glEnable // вот тут, собственно, и описывается сцена // задаем цвет 0 0x7FFFFFFF 0 glColor3i glPushMatrix // пара точек -0.5 0.0 0.0 Point1 SET3D 0.5 0.0 0.0 Point2 SET3D GL_LINES glBegin Point1 glVertex3dv Point2 glVertex3dv glEnd glPopMatrix ; ' MY_SCENE TO 3D Слово 3D векторное, и выполняется постоянно в процессе прокачки сообщений. Записав туда отрисовку собственной сцены, мы ее и получаем. На очереди повороты... |
Автор: | WingLion [ Вс дек 25, 2011 18:25 ] |
Заголовок сообщения: | Re: Quark: простейшее 3D |
Нужны минимальные комментарии для чайника. А так, понюхал, полизал, на хвост примерил... Даже запустил командой Quark.exe test.frt где в test.frt приведенный пример скопирован Получил зеленую горизонтальную линию на ~1/8 экрана по ширине, а дальше... кхе-кхе... даже нарисовать линию в другом месте не получилось изменением координат точек в исходнике... |
Автор: | вопрос [ Вс дек 25, 2011 18:41 ] |
Заголовок сообщения: | Re: Quark: простейшее 3D |
Цитата: кхе-кхе... даже нарисовать линию в другом месте не получилось изменением координат точек в исходнике... Там границы 1.0 ... -1.0 видимо должны быть |
Автор: | Hishnik [ Вс дек 25, 2011 18:45 ] |
Заголовок сообщения: | Re: Quark: простейшее 3D |
Да, и одна координата перпендикулярно экрану. Размер прямоугольника, к которому относятся координаты -1.0..1.0, задаются через glViewPort. |
Автор: | WingLion [ Вс дек 25, 2011 18:55 ] |
Заголовок сообщения: | Re: Quark: простейшее 3D |
Цвет и положение линии поменять удалось... а нарисовать две линии - проблемс... Видимо, не тем хвостом делаю... Код: -0.5 0.0 0.0 Point1 SET3D 0.5 0.0 0.0 Point2 SET3D -0.5 0.0 0.5 Point3 SET3D 0.5 0.0 -0.5 Point4 SET3D Код: GL_LINES glBegin Point1 glVertex3dv Point2 glVertex3dv glEnd GL_LINES glBegin Point3 glVertex3dv Point4 glVertex3dv glEnd рисует только одну линию, а то и вовсе ничего не рисует |
Автор: | Hishnik [ Вс дек 25, 2011 19:01 ] |
Заголовок сообщения: | Re: Quark: простейшее 3D |
Все правильно, рисуются две линии. Point3 и Point4 объявлены так же? |
Автор: | WingLion [ Вс дек 25, 2011 19:14 ] |
Заголовок сообщения: | Re: Quark: простейшее 3D |
Хищник писал(а): Все правильно, рисуются две линии. Point3 и Point4 объявлены так же? Да, объявлены так же (иначе то оно ошибку бы выдало?) Сейчас буду пробовать еще. Возможно, наглючил где.. (через минуту) И вправду наглючил... линии одна на одну легли... поправил координаты, теперь вижу две линии |
Автор: | WingLion [ Вс дек 25, 2011 19:24 ] |
Заголовок сообщения: | Re: Quark: простейшее 3D |
Собственно, теперь вопрос, как это 3D увидеть? Надо, как минимум, поменять направление взгляда на построенные линии... Нарисовал "параллелепипед" Код: 0.3 0.0 0.3 Point1 SET3D 0.3 0.0 -0.3 Point2 SET3D -0.3 0.0 0.3 Point3 SET3D -0.3 0.0 -0.3 Point4 SET3D 0.3 0.0 0.3 Point5 SET3D 0.3 0.0 -0.3 Point6 SET3D -0.3 0.0 0.3 Point7 SET3D -0.3 0.0 -0.3 Point8 SET3D GL_LINES glBegin Point1 glVertex3dv Point2 glVertex3dv glEnd GL_LINES glBegin Point2 glVertex3dv Point4 glVertex3dv glEnd GL_LINES glBegin Point4 glVertex3dv Point3 glVertex3dv glEnd GL_LINES glBegin Point3 glVertex3dv Point1 glVertex3dv glEnd GL_LINES glBegin Point5 glVertex3dv Point6 glVertex3dv glEnd GL_LINES glBegin Point6 glVertex3dv Point8 glVertex3dv glEnd GL_LINES glBegin Point8 glVertex3dv Point7 glVertex3dv glEnd GL_LINES glBegin Point7 glVertex3dv Point5 glVertex3dv glEnd GL_LINES glBegin Point1 glVertex3dv Point5 glVertex3dv glEnd GL_LINES glBegin Point2 glVertex3dv Point6 glVertex3dv glEnd GL_LINES glBegin Point3 glVertex3dv Point7 glVertex3dv glEnd GL_LINES glBegin Point4 glVertex3dv Point8 glVertex3dv glEnd Выглядит как прямоугольник, пока не сместить 5-8 точки по диагонали |
Автор: | Hishnik [ Вс дек 25, 2011 20:06 ] |
Заголовок сообщения: | Re: Quark: простейшее 3D |
WingLion писал(а): Собственно, теперь вопрос, как это 3D увидеть? Надо, как минимум, поменять направление взгляда на построенные линии... Откуда и вылезает вращение! Итак, куда-нибудь наверх: Код: FLOAT NX FLOAT NY FLOAT NZ : X+ NX F@ 10.0 F+ NX F! NX F@ 360.0 F> IF NX F@ 360.0 F- NX F! THEN ; : X- NX F@ 10.0 F- NX F! NX F@ 0.0 F< IF NX F@ 360.0 F+ NX F! THEN ; : Y+ NY F@ 10.0 F+ NY F! NY F@ 360.0 F> IF NY F@ 360.0 F- NY F! THEN ; : Y- NY F@ 10.0 F- NY F! NY F@ 0.0 F< IF NY F@ 360.0 F+ NY F! THEN ; : Z+ NZ F@ 10.0 F+ NZ F! NZ F@ 360.0 F> IF NZ F@ 360.0 F- NZ F! THEN ; : Z- NZ F@ 10.0 F- NZ F! NZ F@ 0.0 F< IF NZ F@ 360.0 F+ NZ F! THEN ; Внутрь MY_SCENE, после glPushMatrix: Код: NX F@ ROTATEANGLE SF! 1.0 glX SF! 0.0 glY SF! 0.0 glZ SF! 3DROTATE NY F@ ROTATEANGLE SF! 0.0 glX SF! 1.0 glY SF! 0.0 glZ SF! 3DROTATE NZ F@ ROTATEANGLE SF! 0.0 glX SF! 0.0 glY SF! 1.0 glZ SF! 3DROTATE ROTATEANGLE уже есть в движке, для удобства. В самый конец, где было назначение вектора на 3D (хотя это не принципиально, можно и после объявления "вращалок" наверху): Код: ' X+ TO K_UP ' X- TO K_DOWN ' Y+ TO K_LEFT ' Y- TO K_RIGHT ' Z+ TO K_PGUP ' Z- TO K_PGDOWN Все, теперь стрелки и PageUp/PageDown |
Автор: | WingLion [ Вс дек 25, 2011 20:19 ] |
Заголовок сообщения: | Re: Quark: простейшее 3D |
Код: CREATE Point1 3 FLOATS ALLOT CREATE Point2 3 FLOATS ALLOT CREATE Point3 3 FLOATS ALLOT CREATE Point4 3 FLOATS ALLOT CREATE Point5 3 FLOATS ALLOT CREATE Point6 3 FLOATS ALLOT CREATE Point7 3 FLOATS ALLOT CREATE Point8 3 FLOATS ALLOT : SET3D // POINT, F: X, Y, Z -- DUP 2 -TH F! DUP 1 -TH F! F! ; // уже не пара точек : INIT_POINTS 0.3 0.0 0.3 Point1 SET3D 0.3 0.0 -0.3 Point2 SET3D -0.3 0.0 0.3 Point3 SET3D -0.3 0.0 -0.3 Point4 SET3D 0.4 0.0 0.4 Point5 SET3D 0.4 0.0 -0.2 Point6 SET3D -0.2 0.0 0.4 Point7 SET3D -0.2 0.0 -0.2 Point8 SET3D ; : MY_SCENE 0 0 1680 1080 glViewPort GL_DEPTH_TEST glEnable GL_DEPTH_BUFFER_BIT glClear GL_LIGHTING glEnable GL_LIGHT0 glEnable GL_LIGHT1 glEnable GL_COLOR_MATERIAL glEnable GL_LINE_SMOOTH glEnable // вот тут, собственно, и описывается сцена // задаем цвет 0x7FFFFFFF 0x7FFFFFFF 0x7FFFFFFF glColor3i glPushMatrix // рисуем "параллелепипед" (8-вершинный 12-гранник однако) GL_LINES glBegin Point1 glVertex3dv Point2 glVertex3dv glEnd GL_LINES glBegin Point2 glVertex3dv Point4 glVertex3dv glEnd GL_LINES glBegin Point4 glVertex3dv Point3 glVertex3dv glEnd GL_LINES glBegin Point3 glVertex3dv Point1 glVertex3dv glEnd GL_LINES glBegin Point5 glVertex3dv Point6 glVertex3dv glEnd GL_LINES glBegin Point6 glVertex3dv Point8 glVertex3dv glEnd GL_LINES glBegin Point8 glVertex3dv Point7 glVertex3dv glEnd GL_LINES glBegin Point7 glVertex3dv Point5 glVertex3dv glEnd GL_LINES glBegin Point1 glVertex3dv Point5 glVertex3dv glEnd GL_LINES glBegin Point2 glVertex3dv Point6 glVertex3dv glEnd GL_LINES glBegin Point3 glVertex3dv Point7 glVertex3dv glEnd GL_LINES glBegin Point4 glVertex3dv Point8 glVertex3dv glEnd glPopMatrix ; INIT_POINTS ' MY_SCENE TO 3D // смещение координаты точки : SH_3DPOINT // dx,dy,dz,3dpoint -- DUP 2 -TH F+! DUP 1 -TH F+! F+! ; // определяю простейшие действия на кнопки ' BYE TO K_ESC // для быстрого выхода : PIC_LEFT // смещение всей картики влево -0.1 0.0 0.0 Point1 SH_3DPOINT -0.1 0.0 0.0 Point2 SH_3DPOINT -0.1 0.0 0.0 Point3 SH_3DPOINT -0.1 0.0 0.0 Point4 SH_3DPOINT -0.1 0.0 0.0 Point5 SH_3DPOINT -0.1 0.0 0.0 Point6 SH_3DPOINT -0.1 0.0 0.0 Point7 SH_3DPOINT -0.1 0.0 0.0 Point8 SH_3DPOINT ; ' PIC_LEFT TO K_LEFT : PIC_RIGHT // смещение всей картинки вправо 0.1 0.0 0.0 Point1 SH_3DPOINT 0.1 0.0 0.0 Point2 SH_3DPOINT 0.1 0.0 0.0 Point3 SH_3DPOINT 0.1 0.0 0.0 Point4 SH_3DPOINT 0.1 0.0 0.0 Point5 SH_3DPOINT 0.1 0.0 0.0 Point6 SH_3DPOINT 0.1 0.0 0.0 Point7 SH_3DPOINT 0.1 0.0 0.0 Point8 SH_3DPOINT ; ' PIC_RIGHT TO K_RIGHT : PIC_UP // вверх 0.0 0.0 0.1 Point1 SH_3DPOINT 0.0 0.0 0.1 Point2 SH_3DPOINT 0.0 0.0 0.1 Point3 SH_3DPOINT 0.0 0.0 0.1 Point4 SH_3DPOINT 0.0 0.0 0.1 Point5 SH_3DPOINT 0.0 0.0 0.1 Point6 SH_3DPOINT 0.0 0.0 0.1 Point7 SH_3DPOINT 0.0 0.0 0.1 Point8 SH_3DPOINT ; ' PIC_UP TO K_UP : PIC_DOWN // вниз 0.0 0.0 -0.1 Point1 SH_3DPOINT 0.0 0.0 -0.1 Point2 SH_3DPOINT 0.0 0.0 -0.1 Point3 SH_3DPOINT 0.0 0.0 -0.1 Point4 SH_3DPOINT 0.0 0.0 -0.1 Point5 SH_3DPOINT 0.0 0.0 -0.1 Point6 SH_3DPOINT 0.0 0.0 -0.1 Point7 SH_3DPOINT 0.0 0.0 -0.1 Point8 SH_3DPOINT ; ' PIC_DOWN TO K_DOWN такая вот тестовая программка вышла (без начальной шапки) стрелками параллелепипед перемещается по экрану, клавишa ЕSC - выход один минус - отрисовка ...ме-е---е-е-дленная-я-я-я... |
Автор: | Hishnik [ Вс дек 25, 2011 20:38 ] |
Заголовок сообщения: | Re: Quark: простейшее 3D |
WingLion писал(а): один минус - отрисовка ...ме-е---е-е-дленная-я-я-я... Потому что клавиши по таймеру, 18,2 Гц. |
Автор: | WingLion [ Вс дек 25, 2011 20:50 ] |
Заголовок сообщения: | Re: Quark: простейшее 3D |
Хищник писал(а): Потому что клавиши по таймеру, 18,2 Гц. И ускорить никак? |
Автор: | WingLion [ Вс дек 25, 2011 21:02 ] |
Заголовок сообщения: | Re: Quark: простейшее 3D |
Вопросик странный возник... При тестировании вращения возникает ощущение, что крутится оно в четырех измерениях... параллелепипед иногда вырождается в совершенно плоскую фигуру... Вот такой код: Может, напортачил где... Код: CREATE Point1 3 FLOATS ALLOT
CREATE Point2 3 FLOATS ALLOT CREATE Point3 3 FLOATS ALLOT CREATE Point4 3 FLOATS ALLOT CREATE Point5 3 FLOATS ALLOT CREATE Point6 3 FLOATS ALLOT CREATE Point7 3 FLOATS ALLOT CREATE Point8 3 FLOATS ALLOT : SET3D // POINT, F: X, Y, Z -- DUP 2 -TH F! DUP 1 -TH F! F! ; // уже не пара точек : INIT_POINTS 0.3 0.0 0.3 Point1 SET3D 0.3 0.0 -0.3 Point2 SET3D -0.3 0.0 0.3 Point3 SET3D -0.3 0.0 -0.3 Point4 SET3D 0.4 0.0 0.4 Point5 SET3D 0.4 0.0 -0.2 Point6 SET3D -0.2 0.0 0.4 Point7 SET3D -0.2 0.0 -0.2 Point8 SET3D ; FLOAT NX FLOAT NY FLOAT NZ : X+ NX F@ 10.0 F+ NX F! NX F@ 360.0 F> IF NX F@ 360.0 F- NX F! THEN ; : X- NX F@ 10.0 F- NX F! NX F@ 0.0 F< IF NX F@ 360.0 F+ NX F! THEN ; : Y+ NY F@ 10.0 F+ NY F! NY F@ 360.0 F> IF NY F@ 360.0 F- NY F! THEN ; : Y- NY F@ 10.0 F- NY F! NY F@ 0.0 F< IF NY F@ 360.0 F+ NY F! THEN ; : Z+ NZ F@ 10.0 F+ NZ F! NZ F@ 360.0 F> IF NZ F@ 360.0 F- NZ F! THEN ; : Z- NZ F@ 10.0 F- NZ F! NZ F@ 0.0 F< IF NZ F@ 360.0 F+ NZ F! THEN ; : MY_SCENE 0 0 1680 1080 glViewPort GL_DEPTH_TEST glEnable GL_DEPTH_BUFFER_BIT glClear GL_LIGHTING glEnable GL_LIGHT0 glEnable GL_LIGHT1 glEnable GL_COLOR_MATERIAL glEnable GL_LINE_SMOOTH glEnable // вот тут, собственно, и описывается сцена // задаем цвет 0x7FFFFFFF 0x7FFFFFFF 0x7FFFFFFF glColor3i glPushMatrix // для врашения NX F@ ROTATEANGLE SF! 1.0 glX SF! 0.0 glY SF! 0.0 glZ SF! 3DROTATE NY F@ ROTATEANGLE SF! 0.0 glX SF! 1.0 glY SF! 0.0 glZ SF! 3DROTATE NZ F@ ROTATEANGLE SF! 0.0 glX SF! 0.0 glY SF! 1.0 glZ SF! 3DROTATE // рисуем "параллелепипед" (8-вершинный 12-гранник однако) GL_LINES glBegin Point1 glVertex3dv Point2 glVertex3dv glEnd GL_LINES glBegin Point2 glVertex3dv Point4 glVertex3dv glEnd GL_LINES glBegin Point4 glVertex3dv Point3 glVertex3dv glEnd GL_LINES glBegin Point3 glVertex3dv Point1 glVertex3dv glEnd GL_LINES glBegin Point5 glVertex3dv Point6 glVertex3dv glEnd GL_LINES glBegin Point6 glVertex3dv Point8 glVertex3dv glEnd GL_LINES glBegin Point8 glVertex3dv Point7 glVertex3dv glEnd GL_LINES glBegin Point7 glVertex3dv Point5 glVertex3dv glEnd GL_LINES glBegin Point1 glVertex3dv Point5 glVertex3dv glEnd GL_LINES glBegin Point2 glVertex3dv Point6 glVertex3dv glEnd GL_LINES glBegin Point3 glVertex3dv Point7 glVertex3dv glEnd GL_LINES glBegin Point4 glVertex3dv Point8 glVertex3dv glEnd glPopMatrix ; INIT_POINTS ' MY_SCENE TO 3D // смещение координаты точки : SH_3DPOINT // dx,dy,dz,3dpoint -- DUP 2 -TH F+! DUP 1 -TH F+! F+! ; // определяю простейшие действия на кнопки ' BYE TO K_ESC // для быстрого выхода : PIC_LEFT // смещение всей картики влево -0.1 0.0 0.0 Point1 SH_3DPOINT -0.1 0.0 0.0 Point2 SH_3DPOINT -0.1 0.0 0.0 Point3 SH_3DPOINT -0.1 0.0 0.0 Point4 SH_3DPOINT -0.1 0.0 0.0 Point5 SH_3DPOINT -0.1 0.0 0.0 Point6 SH_3DPOINT -0.1 0.0 0.0 Point7 SH_3DPOINT -0.1 0.0 0.0 Point8 SH_3DPOINT ; ' PIC_LEFT TO K_LEFT : PIC_RIGHT // смещение всей картинки вправо 0.1 0.0 0.0 Point1 SH_3DPOINT 0.1 0.0 0.0 Point2 SH_3DPOINT 0.1 0.0 0.0 Point3 SH_3DPOINT 0.1 0.0 0.0 Point4 SH_3DPOINT 0.1 0.0 0.0 Point5 SH_3DPOINT 0.1 0.0 0.0 Point6 SH_3DPOINT 0.1 0.0 0.0 Point7 SH_3DPOINT 0.1 0.0 0.0 Point8 SH_3DPOINT ; ' PIC_RIGHT TO K_RIGHT : PIC_UP // вверх 0.0 0.0 0.1 Point1 SH_3DPOINT 0.0 0.0 0.1 Point2 SH_3DPOINT 0.0 0.0 0.1 Point3 SH_3DPOINT 0.0 0.0 0.1 Point4 SH_3DPOINT 0.0 0.0 0.1 Point5 SH_3DPOINT 0.0 0.0 0.1 Point6 SH_3DPOINT 0.0 0.0 0.1 Point7 SH_3DPOINT 0.0 0.0 0.1 Point8 SH_3DPOINT ; ' PIC_UP TO K_UP : PIC_DOWN // вниз 0.0 0.0 -0.1 Point1 SH_3DPOINT 0.0 0.0 -0.1 Point2 SH_3DPOINT 0.0 0.0 -0.1 Point3 SH_3DPOINT 0.0 0.0 -0.1 Point4 SH_3DPOINT 0.0 0.0 -0.1 Point5 SH_3DPOINT 0.0 0.0 -0.1 Point6 SH_3DPOINT 0.0 0.0 -0.1 Point7 SH_3DPOINT 0.0 0.0 -0.1 Point8 SH_3DPOINT ; ' PIC_DOWN TO K_DOWN ' X+ TO K_SHIFT_UP ' X- TO K_SHIFT_DOWN ' Y+ TO K_SHIFT_LEFT ' Y- TO K_SHIFT_RIGHT ' Z+ TO K_SHIFT_PGUP ' Z- TO K_SHIFT_PGDOWN |
Автор: | VoidVolker [ Вс дек 25, 2011 21:39 ] |
Заголовок сообщения: | Re: Quark: простейшее 3D |
WingLion писал(а): При тестировании вращения возникает ощущение, что крутится оно в четырех измерениях... параллелепипед иногда вырождается в совершенно плоскую фигуру... Это как раз следствия одной из сложностей вращения: поочередное вращение по разным осям может привести к возникновению "шарнирного замка". Более подробно про вращение описано здесь: http://www.rossprogrammproduct.com/tran ... %20FAQ.htm Я использую для вращения матрицы: можно не только вращать, но и задавать пропорции, размеры, отражение и позицию. А еще удобно работать с движением: скорость задается обычным вектором - три координаты по числу осей, а итератор тупо "плюсует" его к текущим координатам объекта, если вызывается через постоянные промежутки времени, или вычисляет изменение координат в зависимости от прошедшего времени с последнего изменения. Аналогично и с ускорением. |
Автор: | Hishnik [ Вс дек 25, 2011 21:50 ] |
Заголовок сообщения: | Re: Quark: простейшее 3D |
Код: NX F@ ROTATEANGLE SF! 1.0 glX SF! 0.0 glY SF! 0.0 glZ SF! 3DROTATE Вот в этом кусочке кода задается вектор, вокруг которого производится вращение. В тестовом примере векторы поочередно устанавливаются вдоль каждой из осей. Можно ставить сразу нужный вектор, задав его координаты. Для OpenGL желательно его отнормировать (длина равна 1.0). Тогда можно будет повернуть в нужное положение за одну операцию вращения. |
Страница 1 из 3 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |