我想使用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(); }
你有什么建议吗? 谢谢!
答案 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();
}