0

我想使用处理将纹理应用于 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();  }

你有什么建议吗?谢谢!

4

2 回答 2

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 替换为您的图像名称。另外,它需要放在草图目录中的数据目录中。如果它有效,那么您的问题在其他地方。我不确定你在草图中的计划是什么,但你可能会发现 peasycam 对 3d 中的故障排除很有用。

http://mrfeinberg.com/peasycam/

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

于 2013-03-04T01:55:24.330 回答
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();
  }
于 2013-03-05T00:53:16.580 回答