如何在 p5.js 中旋转图像

新手上路,请多包涵

我需要旋转图像,但我的代码没有围绕中心旋转图像,我不明白为什么。当我运行它时我看不到它,所以我怀疑它把它画在了屏幕之外。

 push();
rotate(PI / 2 * rotation);
imageMode(CENTER);
image(this.texture, centerPosX, centerPosY);
pop();

当我删除 rotate 时,它会正确绘制图像,但我需要旋转它。

原文由 FCin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 604
2 个回答

在旋转之前,您需要将画布原点平移到中心或画布内的任何点(您希望将其 _作为旋转中心_)。

这可以使用 translate() 方法来完成。

ᴅᴇᴍᴏ

 var img;

function setup() {
   createCanvas(300, 300);
   img = loadImage('https://i.imgur.com/Q6aZlme.jpg');
}

function draw() {
   background('#111');
   translate(width / 2, height / 2);
   rotate(PI / 180 * 45);
   imageMode(CENTER);
   image(img, 0, 0, 150, 150);
}
 <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.10/p5.min.js"></script>

原文由 ɢʀᴜɴᴛ 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果其他人感到懒惰,可以旋转图像。

使用 rotate_and_draw_image() 您应该能够传递与普通 image() 相同的信息,但具有以度数定义的额外旋转值。 (图像的位置定义为左上角(与默认值相同),因此无需更改任何内容)。

有点低效的过程,但应该很容易实施。很高兴看到任何改进。

 var img;
var angle = 0;
var x = 0;
var y = 0;

function setup() {
   createCanvas(displayWidth, 725);
   img = loadImage('fly2.png');
}

function rotate_and_draw_image(img_x, img_y, img_width, img_height, img_angle){
  imageMode(CENTER);
  translate(img_x+img_width/2, img_y+img_width/2);
  rotate(PI/180*angle);
  image(img, 0, 0, img_width, img_height);
  rotate(-PI / 180 * img_angle);
  translate(-(img_x+img_width/2), -(img_y+img_width/2));
  imageMode(CORNER);
}

function draw() {
  background(255);

  // this image stays still in top left corner
  image(img, 0, 0, 150, 150);

  angle += 0.5;

  x+=1;
  if (x >width){
    x = 0;
  }

  y -=1;
  if (y < 0){
    y = height;
  }

  // moves image to desired location (defining top left corner),
  // rotates and draws image.
  rotate_and_draw_image(x, y, 150, 150, angle);

  // this image also stays constant in bottom right corner
  image(img, width-150, height-150, 150, 150);
}

原文由 khi48 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏