![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Modus ponens
|
Вот, есть такой пример:
private var _sceneWidth:Number = 500; override public function set width(value:Number):void { _sceneWidth = value; _isValidDisplay = false; } ... { var currentMousePoint:Point = new Point(viewport.containerSprite.mouseX, viewport.containerSprite.mouseY); if (!_isValidDisplay) { if (_gameMap) { _lastTransform = Matrix3D.clone(_gameMap.transform); _gameMap.destroy(); scene.removeChild(_gameMap); } trace("_lastTransform #1", _lastTransform); _gameMap = new Cube(_matList, 500, _sceneWidth, 16); scene.addChild(_gameMap); if (_lastTransform) { _gameMap.transform.calculateMultiply3x3(_lastTransform, _gameMap.transform); } trace("_lastTransform #2", _gameMap.transform); } else if (stage && _gameMap && _lastTransform) { _gameMap.transform.calculateMultiply3x3(_lastTransform, _gameMap.transform); //trace("_lastTransform #3", _gameMap.transform); } if (_isMouseDown) { trace("_isMouseDown", _lastTransform); var difference:Point = currentMousePoint.subtract(_previousMousePoint); var vector:Number3D = new Number3D(difference.x, difference.y, 0); var rotationAxis:Number3D = Number3D.cross(vector, FORWARD); rotationAxis.normalize(); var distance:Number = Point.distance(currentMousePoint, _previousMousePoint); var rotationMatrix:Matrix3D = Matrix3D.rotationMatrix(rotationAxis.x, -rotationAxis.y, rotationAxis.z, distance / 250); _gameMap.transform.calculateMultiply3x3(rotationMatrix, _gameMap.transform); } _previousMousePoint = currentMousePoint; super.onRenderTick(event); _isValidDisplay = true; } Когда ширина получает новое значение, выставляем флаг а в onRenderTick если флаг поднят, то нужно: - создать объект по-новой; - применить трансформацию. - опустить флаг. Почему-то на следующий тик трансформация объекта обнуляется =/ Вобщем, вопрост такой: как забиндить размер кубика к размеру контейнера? Добавлено через 4 часа 11 минут Вобщем, как решилось: вместо Понять почему нужно именно так - не получилось ![]()
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Apr 2007
Сообщений: 1,369
|
Хм, надо будет покопать с этими трансформациями.
Вообще copyTransform тупо берет this.transform - т.е. твоего Кубикаи делает: this.transform.n11 = matrix.n11; this.transform.n12 = matrix.n12; this.transform.n13 = matrix.n13; this.transform.n14 = matrix.n14; А вот calculateMultiply3x3 делает: this.transform.n11 = matrix.n11; this.transform.n12 = matrix.n12; this.transform.n13 = matrix.n13; но перед этим пересчитывает значения this.transform.n11 и т.д. Может из-за этого пересчета происходит НЕИЗМЕНЕНИЕ Куба? По идее, вроде клонирование Matrix3D parentContainer-ра должно только быть, т.е. parentContainer изменил размеры и Куб изменился, но надо тестить. Инфа по Revision 863.
__________________
john Последний раз редактировалось Molecula; 28.01.2009 в 12:43. |
|
|||||
|
Modus ponens
|
ПВД 859, я чего-то не видел, что есть новее...
А вообще, я чего только не пробовал... calculateMultiply3x3 - только один из вариантов, пробовал и calculateMultiply4x4 и copy() и copy3x3()... Вобщем, по непонятной причине матрицы не перемножались, а просто заменялись на "пустую"... хотя при вращении этот же метод работал нормально... т.е. замена матрицы очевидно проиcxодит только после renderScene()...
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Apr 2007
Сообщений: 1,369
|
Цитата:
__________________
john |
![]() |
![]() |
Часовой пояс GMT +4, время: 16:42. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| onrendertick , papervision , pvd |
|
|