Форум: "Игры";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];
ВнизRotate in OpenGL Найти похожие ветки
← →
Creep (2004-11-06 19:09) [0]Помогите пожалуйста с поворотом в OpenGL. Чтобы квадрат,многоугольник и т.д крутились вокруг своей оси (я ипользую glRotate), а не вокруг центра окна.
← →
марсианин © (2004-11-06 20:51) [1]когда делаешь glRotate - все поворачивается вокруг текущего ценра координат. его надо сначала просто сдвинуть
glPushMatrix();
glTranslate() //в точку, где д.б центр квадрата
glRotate() // вращаем
Рисуем квадрат с центром в (0,0,0)
glPopMatrix();
← →
Creep (2004-11-06 22:08) [2]Тогда просто полудается квадрат остается на месте. А мы двигаем систему кординат.
И еще как определять столкновения одново квадрата с другим по OpenGL"ски.
← →
Creep (2004-11-06 22:17) [3]По кординате Z сравнивать не надо.
И еще как обращаться к этим "квадратам". Например просто в Delphi Form1.Image1.left, а в OpenGl Как?
← →
Колбасьев © (2004-11-06 22:31) [4]Помоему, по указателю на участок памяти, содержащий квадрат.
И в обще в OpenGL и DirectX про всякие удобные вещи типа
> Form1.Image1.left,
нужно сразу забыть, если только ты не напишешь их сам :-)
← →
Creep (2004-11-06 23:14) [5]А как этот указатель выловить
← →
Колбасьев © (2004-11-06 23:47) [6]Я не спец по OpenGL. Точно не помню: там либо указатель либо массив вершин. Это у OpenGL"шников распросить надо.
← →
марсианин © (2004-11-07 00:39) [7]
> Тогда просто полудается квадрат остается на месте. А мы
> двигаем систему кординат.
не понял.. квадрату вообще параллельно. он просто есть. а это наши проблемы как построить систему координат.
> И еще как обращаться к этим "квадратам". Например просто
> в Delphi Form1.Image1.left, а в OpenGl Как?
тебе нужно получить новые координаты вершин квадрата после всех сдвигов/поворотов?
> Помоему, по указателю на участок памяти, содержащий квадрат
можно выловить указатель на текущую матрицу преобразований. никаких точек опенгл не запоминает
← →
Shulkin (2004-11-07 03:56) [8]to марсианин : "никаких точек опенгл не запоминает". А что нам
мешает запомнить их самим? Просто пишем процедуру вроде этой :
Procedure DrawCube ( x,y,z,Size : GLfloat) ;
begin
glBegin (GL_QUADS);
glVertex3f ( X+Size , Y+Size , Z+Size ) ;
glVertex3f ( X-Size , Y+Size , Z+Size ) ;
glVertex3f ( X-Size , Y-Size , Z+Size ) ;
glVertex3f ( X+Size , Y-Size , Z+Size ) ;
glEnd ;
glBegin (GL_QUADS);
glVertex3f ( X+Size , Y+Size , Z-Size ) ;
glVertex3f ( X+Size , Y-Size , Z-Size ) ;
glVertex3f ( X-Size , Y-Size , Z-Size ) ;
glVertex3f ( X-Size , Y+Size , Z-Size ) ;
glEnd ;
glBegin (GL_QUADS);
glVertex3f ( X-Size , Y+Size , Z+Size ) ;
glVertex3f ( X-Size , Y+Size , Z-Size ) ;
glVertex3f ( X-Size , Y-Size , Z-Size ) ;
glVertex3f ( X-Size , Y-Size , Z+Size ) ;
glEnd ;
glBegin (GL_QUADS);
glVertex3f ( X+Size , Y+Size , Z+Size ) ;
glVertex3f ( X+Size , Y-Size , Z+Size ) ;
glVertex3f ( X+Size , Y-Size , Z-Size ) ;
glVertex3f ( X+Size , Y+Size , Z-Size ) ;
glEnd ;
glBegin (GL_QUADS);
glVertex3f ( X-Size , Y+Size , Z-Size ) ;
glVertex3f ( X-Size , Y+Size , Z+Size ) ;
glVertex3f ( X+Size , Y+Size , Z+Size ) ;
glVertex3f ( X+Size , Y+Size , Z-Size ) ;
glEnd ;
glBegin (GL_QUADS);
glVertex3f ( X-Size , Y-Size , Z-Size ) ;
glVertex3f ( X+Size , Y-Size , Z-Size ) ;
glVertex3f ( X+Size , Y-Size , Z+Size ) ;
glVertex3f ( X-Size , Y-Size , Z+Size ) ;
glEnd ;
end;
Ну а потом заводим глобальные X,Y,Z и Size и по ним управляем
кубом - вращаем, двигаем и т.д.
to Creep : Коллизии также определяются по значениям координат и
размеров 2 кубов - нужно просто их сравнить.
← →
OSokin © (2004-11-07 16:27) [9]to Creep: ты случайно не Краснова читаешь?
Если надо, могу замылить мой компонент GLForm (инициализирует на обычной форме OpenGL), только там при изменении размера небольшие ошибки
← →
Creep (2004-11-07 20:10) [10]Да я то какраз и краснова читаю.
← →
марсианин © (2004-11-07 23:00) [11][8] Shulkin
конечно! но в результате действия всяких glTranslate, glRotate есt координаты вершин (которые на экране нарисуются) будут другими..
вывод: посчитать готовые координаты вершин повернутых квадратиков самим (самим заполнить матрицу преобразований и умножить ее на исходные координаты) - и скормить их ОпенГЛ безовсяких поворотов/сдвигов.
или вытащить текущую матрицу преобразований (см. один из параметров glGetDouble) и умножить на нее исходные координаты...
хоть что-нибудь ясно?.. без азов линейной алгебры не обойтись здесь
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.042 c