Processing 处理,使用音频波形内部的纹理

Processing 处理,使用音频波形内部的纹理,processing,vertex,Processing,Vertex,我一直试图使纹理(img)仅在波形处于活动状态时可见。但到目前为止,我的尝试失败了。我不太明白vertex的用法 PImage img; import ddf.minim.*; Minim minim; AudioPlayer song; void setup() { size(800, 600,P2D); minim = new Minim(this); song = minim.loadFile("song.mp3"); song.play(); img = load

我一直试图使纹理(img)仅在波形处于活动状态时可见。但到目前为止,我的尝试失败了。我不太明白vertex的用法

PImage img;
import ddf.minim.*;

Minim minim;
AudioPlayer song;

void setup()
{
  size(800, 600,P2D);
  minim = new Minim(this);
  song = minim.loadFile("song.mp3");
  song.play();
  img = loadImage("img.jpg");
}

void draw()
{
  background(0);
  stroke(255);
  for (int i = 0; i < song.bufferSize() - 1; i++)
  {
    beginShape();
    texture(img);
    vertex(0,height/2);
    vertex(i, height-100 - song.right.get(i)*50);
    vertex(i+1, height-100 - song.right.get(i+1)*50);
    vertex(width,height/2);
    vertex(0,height/2);
    vertex(0,height/2+100); 
    endShape();
  }
} 
PImage-img;
进口ddf.微量。*;
极小极小;
音频播放器歌曲;
无效设置()
{
尺寸(800600,P2D);
最小值=新的最小值(本);
song=mini.loadFile(“song.mp3”);
歌曲。游戏();
img=loadImage(“img.jpg”);
}
作废提款()
{
背景(0);
中风(255);
for(int i=0;i
您就快到了:

  • 您正在传递渲染形状的顶点位置的x、y值
  • 您没有传递纹理贴图u、v坐标
请务必阅读参考资料:

此函数还用于将纹理映射到几何体上。函数的作用是:声明要应用于几何体的纹理,u和v坐标集定义该纹理到形状的映射。默认情况下,用于u和v的坐标是根据图像的大小(以像素为单位)指定的,但是可以使用textureMode()更改此关系

不清楚您试图绘制的是什么形状,但您可以做的一件简单的事情是将x,y坐标作为u,v坐标传递(而不仅仅是
顶点(x,y);
使用
顶点(x,y,u,v);
):

PImage-img;
进口ddf.微量。*;
极小极小;
音频播放器歌曲;
无效设置()
{
尺寸(800600,P2D);
仰泳();
最小值=新的最小值(本);
song=mini.loadFile(“song.mp3”);
歌曲。游戏();
img=loadImage(“img.jpg”);
}
作废提款()
{
背景(0);
中风(255);
for(int i=0;i
未经测试,但注释应有助于发现差异

下面是一个将vertex()与纹理()结合使用的超级基本示例:

PImage-img;
无效设置(){
尺寸(100100,P2D);
//制作纹理
img=createImage(50,50,RGB);
对于(int i=0;i
请注意移动鼠标时纹理是如何扭曲的,因为它控制顶点1的纹理坐标。顶点(x,y,u,v)与顶点(x,y)非常相似,但除了顶点在屏幕上渲染的坐标外,还可以控制纹理采样位置的坐标


如参考文献所述,默认情况下
textureMode()
为图像,这意味着u、v坐标位于图像坐标中(从0,0到纹理图像宽度、高度)。还有另一种可用模式:u、v采样坐标归一化(介于0.0和1.0之间)更接近您在3D应用程序功能中可能发现的情况

非常感谢您的详细解释,在我删除笔划后,效果很好:)我想用视频放置纹理,并将麦克风作为音频输入,为了能够观看视频,您必须讲话:)
PImage img;
import ddf.minim.*;

Minim minim;
AudioPlayer song;

void setup()
{
  size(800, 600,P2D);
  noStroke();
  minim = new Minim(this);
  song = minim.loadFile("song.mp3");
  song.play();
  img = loadImage("img.jpg");
}

void draw()
{
  background(0);
  stroke(255);
  for (int i = 0; i < song.bufferSize() - 1; i++)
  {
    beginShape();
    texture(img);
    vertex(0,height/2,                                        //vertex 0,x,y
           0,height/2);                                       //vertex 0,u,v
    vertex(i, height-100 - song.right.get(i)*50,              //vertex 1,x,y
           i, height-100 - song.right.get(i)*50);             //vertex 1,u,v
    vertex(i+1, height-100 - song.right.get(i+1)*50,          //vertex 2,x,y
           i+1, height-100 - song.right.get(i+1)*50);         //vertex 2,u,v
    vertex(width,height/2,                                    //vertex 3,x,y
           width,height/2);                                   //vertex 3,u,v
    vertex(0,height/2,                                        //vertex 4,x,y
           0,height/2);                                       //vertex 4,u,v
    vertex(0,height/2+100,                                    //vertex 5,x,y
           0,height/2+100);                                   //vertex 5,u,v
    endShape();
  }
} 
PImage img;
void setup(){
  size(100,100,P2D);
  //make a texture
  img = createImage(50,50,RGB);
  for(int i = 0 ; i < img.pixels.length; i++) {
    int x = i % img.width;
    int y = i / img.height;
    if(x % 4 == 0 && y % 4 == 0){
      img.pixels[i] = color(255);
    }else{
      img.pixels[i] = color(0);
    }
  }
  img.updatePixels();
}
void draw(){
  background(0);
  //sampling different u,v coordinates (vertex 1 is mapped to mouse) for same x,y
  beginShape();
  texture(img);
  vertex(0,0,0,0);
  vertex(50,0,mouseX,mouseY);
  vertex(50,50,50,50);
  vertex(0,50,0,50);
  endShape();

  text("u:"+mouseX+"v:"+mouseY,5,height);

  translate(50,0);
  //mapping u,v to x,y coordinates
  beginShape();
  texture(img);
  vertex(0,0,0,0);
  vertex(50,0,50,0);
  vertex(50,50,50,50);
  vertex(0,50,0,50);
  endShape();

}