Вращение модели

Будем так вокруг да около ходить, будет тяжело. Я не могу на словах нормально сформулировать.
Скинь сюда класс модельки, который криво рендерится, и собственно, сущность, блок, или что там использует эту модель. Если тайл - кидай тайлрендерер. Ну, думаю, ты понял.
На примере легче обьяснить будет.
 
Я в первом посте не написал, что эта модель рендерится вместо предмета. То есть, берешь айтем и рендерится модель.
Вот классы модели и рендерера.
код смещения и вращения на 251-254 строчках.
 
BlackCrafter написал(а):
и что с центром-то?
А можно попробовать заюзать такую плюху как postRender
Создаешь отдельную модельку - куб 1х1 - это будет центр.
Вращаешь ее как душе угодно, а потом пострендеришь к нему основную модель.
 
MrCreppo
Я не Джон Кармак и так не умею.
Позавчера я открыл в течне все присланные мне модели и увидел, что все они находятся далеко от начала оси координат (aka 0,0,0). Создал новую модель из двух кубиков. Первый кубик расположил в точке -0.5,-0.5,-0.5, а второй рандомно. И действительно, проблем с вращением этой модели нет, так как ее центр находится в начале оси x,y,z. А что делать, если модель находится не в центре? Oldestkon писал, что можно программно сместить центр в нужное место. Но как это сделать, мне не ясно.
 
izVpj0I.png

Черный квадрат - твоя модель. x1, y1 - центр модели относительно её самой. x0, y0 - точка (0, 0, 0) в системе координат течне, т.е. абсолютный центр. 
Находишь вектор от х1, y1 (в данном случае это красный вектор справа) до x0, y0, и на него смещаешь модельку перед поворотом.
P.S. Чтобы найти вектор между двумя точками, надо из конечной точки вычесть начальную. Т.е. из x0, y0 вычесть x1, y1, тогда мы получим вектор, который сместит модель в абсолютный центр координат.
P.P.S. Может понадобится сместить модель ещё на 0.5 (половина блока) по двум осям. Ибо кубач может пытаться рисовать модель не из центра, а из угла.
 
Бля, я не знаю уже как тебе обьяснить.
У меня кончились идеи. Первый раз такое встречаю.
Создал на форуме тему месяц или два назад и даже не удосужился за это время покопаться в своей проблеме сам.
 
если glTranslate() смещает центр, ну допустим найду я этот центр методом тыка. Как потом модель в нужное место передвинуть?
 
Просто чел мешает два разных действия в одну кашу, а надо было просто спросить в двух темах или в 2 вопросах.
Короче говоря: сначала смещаешь центр перед поворотом, у тебя матрица сохранится, потом смещаешь еще раз, чтобы подвинуть на нужное место, значения матрицы, отвечающие за поворот, естественно меняться не будут, и все будет как тебе надо.;)
 
Не ври.
>То есть, сначала найти центр, потом развернуть как надо и отодвинуть куда надо? Я правильно понял?
Ты сначала хотел развернуть, а потом сместить. А надо наоборот. А потом можешь двигать куда хочешь.
"Найти центр" не подразумевает передвинуть туда.
 
то есть, первый после glPushMatrix glTranslate смещает центр, а все следующие до glPopMatrix - двигают модель уже без смещения центра?
 
Назад
Сверху