代码之家  ›  专栏  ›  技术社区  ›  FCin

如何在p5.js中旋转图像

  •  7
  • FCin  · 技术社区  · 7 年前

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

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

    rotate ,它正确地绘制了图像,但我需要旋转它。

    3 回复  |  直到 7 年前
        1
  •  9
  •   ɢʀᴜɴᴛ    7 年前

    您需要将画布原点转换为中心或画布内的任何点(您希望使 旋转中心 ),然后旋转。

    这可以通过使用 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>
        2
  •  5
  •   khi48    4 年前

    创建了一个函数,用于在其他人感到懒惰时旋转图像。

    使用rotate_和draw_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);
    }
    
        3
  •  0
  •   arcticnerd    2 年前

    所以这个线程有点旧,但我试图用p5.js解决同样的问题,并提出了简单的解决方案。基本上,你只需要将图像平移到你希望图像出现在推送/弹出中的位置,还需要在旋转之前处于图像模式(中间)。

    push()
    translate(xPosition, yPosition);
    imageMode(CENTER);
    rotate(imageRotation)
    image(yourImage, 0, 0)
    pop()