将纹理应用于网格

时间:2013-03-04 00:40:36

标签: grid processing

我想使用Processing将纹理应用到3d空间中的网格,我尝试声明一个PImage并使用loadimage设置.jpg文件但没有结果..

    PImage tex;

    void setup()  {    
size(800, 600, P3D);   
 tex=loadImage("ground104"); 
noCursor(); 
}  
void draw() 
  {    
directionalLight(255, 255, 255, 0, 0, -1); 
   background(180); 
   drawPlane();  
}    
void drawPlane()
  {  //lights(); 
   int s = 10000;  
        int ss = 500;
         fill(0, 200, 20);   stroke(200);    for(int i = 0; i < s; i += ss)    {
        stroke(0,100,0);
        strokeWeight(3);
        beginShape(QUAD_STRIP);
        for(int j = 0; j <= s; j += ss)
        {
          texture(tex);
          vertex(j, i, 0);
          vertex(j, i + ss, 0);
        }
        endShape();    }    noStroke();  }

你有什么建议吗? 谢谢!

2 个答案:

答案 0 :(得分:0)

看起来您需要像.jpg这样的文件扩展名。您可以通过运行参考页面中的代码进行故障排除:

http://www.processing.org/reference/texture_

size(100, 100, P3D);
noStroke();
PImage img = loadImage("laDefense.jpg");
beginShape();
texture(img);
vertex(10, 20, 0, 0);
vertex(80, 5, 100, 0);
vertex(95, 90, 100, 100);
vertex(40, 95, 0, 100);
endShape();

并将laDefense.jpg替换为您的图片名称。此外,它需要放在sketch目录的data目录中。如果它有效,那么你的问题就在别的地方。我不确定你的草图中的计划是什么,但是你可能会发现在mg中进行故障排除很有用。

http://mrfeinberg.com/peasycam/

另一种技术是将每帧的浮点数增加0.01并在draw()方法/循环开始时调用RotateX(),Y或Z或上述所有内容。

答案 1 :(得分:0)

感谢您的回复! 我已将代码更改为此,现在您可以运行它并查看我得到的内容(首先从https://www.dropbox.com/s/fsda0tih67q8tll/grass.jpg?m下载grass.jpg)。我很接近,但我想知道为什么网格是绿色的,因为它应该是草地......

PImage tex;

void setup()  
{    
size(800, 600, P3D);   
tex=loadImage("grass.jpg"); 
noCursor(); 
}  

void draw() 
{ 
  translate(width/2 , height/2 , 0);  // center of screen
    rotateX(QUARTER_PI * 1.0);            // move camera up
    rotateZ(QUARTER_PI * 1.8);
    //rotateZ(camZ.val + offset);           // rotate around turret

    rotateZ(map(mouseX, mouseY, width, 2.5, -2.5));

    translate(-1000, 0, -1000);
  directionalLight(255, 255, 255, 0, 0, -1); 
  background(180); 
  drawPlane();  
}    
void drawPlane()
  {  //lights(); 
   int s = 10000;  
        int ss = 500;
         fill(0, 200, 20);   stroke(200);    for(int i = 0; i < s; i += ss)    {
        stroke(0,100,0);
        strokeWeight(3);
        beginShape(QUAD_STRIP);
        for(int j = 0; j <= s; j += ss)
        {
          texture(tex);
          vertex(j, i, 0);
          vertex(j, i + ss, 0);
        }
        endShape();
    }    
noStroke();
  }