Openframeworks — вращать изображение из его центра с помощью вызовов OpenGL

Я использую openframeworks (который визуализируется через OpenGL), и я пытаюсь повернуть изображение из его центра.

Я знаю, что я должен использовать ofRotate() а также ofTranslate() но мне не удалось понять это самостоятельно. Вот что я пробовал до сих пор:

ofPushMatrix();
ofRotate(ofRandom(10),0.0,0.0,1.0);
leafImg.draw(100,100);
ofPopMatrix();

0

Решение

Не занимаясь слишком большой математикой, вы можете использовать вложенную систему координат, смещающую изображение так, чтобы при вращении вы вращались из центра. Короче говоря, вы будете делать это:

  1. Переместить систему координат в центр изображения
  2. Повернуть оттуда
  3. В пределах этой системы координат сделайте один уровень глубже и переведите обратно на половину размера изображения, чтобы вы сместились обратно на «0,0»

В коде это будет:

ofPushMatrix();
ofTranslate(leafImg.width/2, leafImg.height/2, 0);//move pivot to centre
ofRotate(ofGetFrameNum() * .01, 0, 0, 1);//rotate from centre
ofPushMatrix();
leafImg.draw(-leafImg.width/2,-leafImg.height/2);//move back by the centre offset
ofPopMatrix();
ofPopMatrix();

Я использовал отступ, чтобы сделать его более очевидным, как гнездятся системы координат.

Это так же, как:

ofPushMatrix();
ofTranslate(leafImg.width/2, leafImg.height/2, 0);//move pivot to centre
ofRotate(ofGetFrameNum() * .01, 0, 0, 1);//rotate from centre
ofPushMatrix();
ofTranslate(-leafImg.width/2,-leafImg.height/2,0);//move back by the centre offset
leafImg.draw(0,0);
ofPopMatrix();
ofPopMatrix();

Это довольно просто повернуть в центр, как вы можете видеть. В свободное время попробуйте выработать способ поворота против произвольной точки.

За кулисами происходит некоторая линейная алгебра, но вызовы push / pop матриц в основном обрабатывают умножение на мелкие матрицы. Тем не менее, вы должны понимать и практиковаться в работе с вызовами pushMatrix / popMatrix. Несмотря на то, что это для обработки, принцип точно такой же, а синтаксис очень похож, поэтому я рекомендую эту статью: 2D трансформации

8

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]