2013-03-04 98 views
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(); } 

你有什麼建議嗎? 謝謝!

回答

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或所有上述的。

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(); 
    } 
+0

要麼'填充(0,200,20);'或'中風(0,100,0) ;'如果我猜測,很可能是中風。如果您正在應用紋理,我會建議刪除所有填充,中風和strokeWeight調用。 – JAMESSTONEco 2013-03-06 16:24:02