![]() |
|
|
![]() |
![]() |
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
Регистрация: Oct 2010
Сообщений: 69
|
![]() Здравствуйте,
Пытаюсь освоить Stage3D, все аспекты вполне ясны и имеется много уроков, но один вопрос не могу решить уже неделю: Как правильно для Matrix3D присвоить значение поворота относительно оси Z. ( аналог "rotation" ) Позиция и размер вычисляются правильно, но как только добавляется поворот картинка растягивается. Опробовал 2 метода: 1. _positionMatrix.identity(); var v3:Vector.<Vector3D> = new Vector.<Vector3D>(3); v3 = _positionMatrix.decompose(); v3[0].incrementBy(new Vector3D( x, y, 0 ));// x, y, z v3[1].incrementBy(new Vector3D(0,0,-rotation*Math.PI/180)); // rotationX, rotationY, rotationZ v3[2].incrementBy(new Vector3D(width,height,0)); // scaleX, scaleY, scaleZ _positionMatrix.recompose(v3); _positionMatrix.identity(); _positionMatrix.appendScale(width,height,1); _positionMatrix.appendTranslation(x,y,0); _positionMatrix.appendRotation(-rotation,Vector3D.Z_AXIS ); ![]() Подозреваю, что тут как то замешан AspectRatio для Stage3D, Помогите пожалуйста. Последний раз редактировалось Dron1564; 07.08.2014 в 00:36. |
|
|||||
Регистрация: Mar 2006
Адрес: Ростов-на-Дону
Сообщений: 80
|
Здравствуйте. Возможно, вам поможет:
//Translation, Rotation, Scale public function trs( tx:Number, ty:Number, rotation:Number, xScale:Number, yScale:Number ):Matrix3D { var data:Vector.<Number> = new <Number>[1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]; var sin:Number = Math.sin( rotation ); var cos:Number = Math.cos( rotation ); data[0] = cos * xScale; data[1] = sin * xScale; data[4] = -sin * yScale; data[5] = cos * yScale; data[12] = tx; data[13] = ty; var matrix:Matrix3D = new Matrix3D(); matrix.copyRawDataFrom(data); return matrix; } |
|
|||||
Регистрация: Oct 2010
Сообщений: 69
|
К сожалению результат, идентичен моему, на картинке с надписью Stage3D.
|
|
|||||
Регистрация: Mar 2006
Адрес: Ростов-на-Дону
Сообщений: 80
|
покажите perspective projection matrix ? (матрицу умножаемую на model view matrix)
|
|
|||||
Регистрация: Oct 2010
Сообщений: 69
|
Цитата:
Не могли бы вы, показать пример того как надо использовать, или где можно найти детальную информацию об этом классе? |
|
|||||
Регистрация: Mar 2006
Адрес: Ростов-на-Дону
Сообщений: 80
|
var perspectiveProjectionMatrix:Matrix3D = new Matrix3D(); var scaleX:Number = 2.0 / WIDTH; //super.stage.stageWidth var scaleY:Number = -2.0 / HEIGHT; //super.stage.stageHeight perspectiveProjectionMatrix.copyRawDataFrom( new <Number>[ scaleX, 0.0, 0.0, 0.0, 0.0, scaleY, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, -1.0, 1.0, 0.0, 1.0 ] ); Добавлено через 2 минуты для получения итоговой координаты вертекса надо perspectiveProjectionMatrix * modelViewMatrix * vertexCoord |
|
|||||
Регистрация: Oct 2010
Сообщений: 69
|
var perspectiveProjectionMatrix:Matrix3D = new Matrix3D(); var scaleX:Number = 2.0 / _stage.stageWidth; // 2.0 / 500 var scaleY:Number = -2.0 / _stage.stageHeight; // -2.0 / 375 perspectiveProjectionMatrix.copyRawDataFrom( new <Number>[ scaleX, 0.0, 0.0, 0.0, 0.0, scaleY, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, -1.0, 1.0, 0.0, 1.0 ] ); var modelViewMatrix:Matrix3D = trs(0,0,-45*Math.PI/180, 0.05, 0.13 ); //( "trs" - функция, выше в комментариях ) var resultMatrix:Matrix3D = new Matrix3D(); //resultMatrix.append(perspectiveProjectionMatrix); resultMatrix.append(modelViewMatrix); _context.setProgramConstantsFromMatrix(Context3DProgramType.VERTEX, 0,resultMatrix , true); var perspectiveProjectionMatrix:Matrix3D = new Matrix3D(); var scaleX:Number = 2.0 / _stage.stageWidth; // 2.0 / 500 var scaleY:Number = -2.0 / _stage.stageHeight; // -2.0 / 375 perspectiveProjectionMatrix.copyRawDataFrom( new <Number>[ scaleX, 0.0, 0.0, 0.0, 0.0, scaleY, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, -1.0, 1.0, 0.0, 1.0 ] ); var modelViewMatrix:Matrix3D = trs(0,0,-45*Math.PI/180, 0.05, 0.13 ); //( "trs" - функция, выше в комментариях ) var resultMatrix:Matrix3D = new Matrix3D(); resultMatrix.append(perspectiveProjectionMatrix); resultMatrix.append(modelViewMatrix); _context.setProgramConstantsFromMatrix(Context3DProgramType.VERTEX, 0,resultMatrix , true); |
|
|||||
Регистрация: Mar 2006
Адрес: Ростов-на-Дону
Сообщений: 80
|
2D screen space координатная система вверху слева 0 0. внизу справа +stageWidht, +stageHeight
соотв. для того, чтоб обьект был в центре: и соотв scale (я не знаю, что у вас за меш, но предполагаю, что квад 1на1) |
|
|||||
Регистрация: Oct 2010
Сообщений: 69
|
Wow! Огромное спасибо!
Немного не правильно поворачивается, но с этим уже разберусь быстро. ![]() var perspectiveProjectionMatrix:Matrix3D = new Matrix3D(); var scaleX:Number = 2.0 / _stage.stageWidth; // 2.0 / 500 var scaleY:Number = -2.0 / _stage.stageHeight; // -2.0 / 375 perspectiveProjectionMatrix.copyRawDataFrom( new <Number>[ scaleX, 0.0, 0.0, 0.0, 0.0, scaleY, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, -1.0, 1.0, 0.0, 1.0 ] ); var modelViewMatrix:Matrix3D = trs(stage.stageWidth/2,stage.stageHeight/2, -_rotation*Math.PI/180, _width*_globalScaleX/2, _height*_globalScaleY/2 ); var resultMatrix:Matrix3D = new Matrix3D(); resultMatrix.prepend(perspectiveProjectionMatrix); resultMatrix.prepend(modelViewMatrix); _context.setProgramConstantsFromMatrix(Context3DProgramType.VERTEX, 0,resultMatrix , true); ![]() Как видно она зеркально относительно oX nuToH - ты мой спаситель! |
|
|||||
Регистрация: Mar 2006
Адрес: Ростов-на-Дону
Сообщений: 80
|
Покажите меш, вершины квада. И не понятно почему знак "-" вот тут "-_rotation*Math.PI/180".
|
![]() |
![]() |
Часовой пояс GMT +4, время: 06:21. |
|
« Предыдущая тема | Следующая тема » |
Теги |
Matrix3D , rotation , scale , Stage3d |
Опции темы | |
Опции просмотра | |
|
|