как заставить закрутиться кубик
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.217.37] |
|
|
правила раздела Алгоритмы

| Страницы: (5) [1] 2 3 ... Последняя » все ( Перейти к последнему сообщению ) |
как заставить закрутиться кубик
|
Сообщ.
#1
,
|
|
|
|
Народ вот кусок функции рисующий линию в 3хмерных координатах
void CKubikDlg::draw3dline(int x1,int y1,int z1,int x2,int y2,int z2,int ch) { float kx1,kx2,ky1,ky2; kx1 = x1 + x1 * (z1 * 0.007); ky1 = y1 + y1 * (z1 * 0.007); kx2 = x2 + x2 * (z2 * 0.007); ky2 = y2 + y2 * (z2 * 0.007); line(kx1,ky1,kx2,ky2,ch); } А как заставить его крутиться програмно, причем не по ламерски как в тесте директ 3Д, а по нажатию клавишь? При чем вертеться он должен на трёх осях симетрии(куба)Типа как глобус. Да, чуть не забыл, должен быть эфект фокуса, это когда дальние грани куба меньше передних. |
|
Сообщ.
#2
,
|
|
|
|
Вращай точки куба. Создай матрицу оборота или кватернионы оборота. Для матриц: создай матрицы оборота вокруг всех осей и перемножь (помня, что порядок умножения играет роль).
Что у тебя за ф-ия проекции какая-то странная. Обычно берется x1 = x*C/z, y1 = y*C/z, а константа C высчитывается в зависимости от угла видения и величины окна-экрана. Фокус.. толщину линии сделай зависимой от z.. При нажатии определенной клавиши оборачивай куб на данный угол. |
|
Сообщ.
#3
,
|
|||
|
|
Вопрос достаточно объемный чтобы ответить на него одним постом. Проще работать с векторами. Значит нужен соответствующий класс. Все преобразования с векторами удобно делать в матричной форме --- класс матрицы Классы всех примитивов: отрезок, параллелепипед, и тд. Класс пространства с экранной плоскостью и со свойствами перспективы (проецирования). В общем, тут вариантов может быть много. При таком подходе, повернуть примитив вокруг одной из своих осей достаточно просто. Нужно перемножить матрицу вершин на матрицу вращения. Примерно так
Необходимо правильно математически реализовать вектора, матрицы, перспективу и их свойства. Как вариант смотри ниже |
|
Сообщ.
#4
,
|
|||
|
|
|
|
Сообщ.
#5
,
|
|||
|
|
|
|
Сообщ.
#6
,
|
|||
|
|
|
|
Сообщ.
#7
,
|
|||
|
|
|
|
Сообщ.
#8
,
|
|||
|
|
|
|
Сообщ.
#9
,
|
|||
|
|
|
|
Сообщ.
#10
,
|
|||
|
|
|
|
Сообщ.
#11
,
|
|||
|
|
|
|
Сообщ.
#12
,
|
|||||
|
|
|
|
Сообщ.
#13
,
|
|
|
|
а ещё говорят, что с++ - лаконичный язык!!
да я на паскале 3д екшын написал в ~600 строк, включая мыша и вывод на екран!!! а если только ядро, то ~200 строк http://enzyme.nm.ru/vrash.rar /action.exe выходить буквой q |
|
Сообщ.
#14
,
|
|
|
|
Лаконичный-лаконичный
Если теперь забыть про внутренности етой векторно-матричной библиотеки, то вся программа будет написана в виде vect2 = vect1 * matr3; |
|
Сообщ.
#15
,
|
|
|
|
ну так у меня тоже приблизительно так, правда у меня матрица каждый раз заново считается
только если её считать заранее, наверняка моя программа станет ещё меньше, со всеми внутренностями! |