在处理草图中,我使用beginRaw()
和endRaw()
将3D场景导出为PDF文件。
输出中的深度顺序错误。三角形的呈现方式与我在beginShape()
/ endShape()
结构中定义的顺序相同,而不是根据它们的z缓冲区位置。
无论我使用P3D
还是OPENGL
作为渲染方案,都会无动于衷。
此外,我是否使用GL_ENABLE_DEPTH_TEST
功能激活GL_ENABLE_DEPTH_SORT
/ hint()
。
processing window http://i44.tinypic.com/2nlzrq1.png pdf output http://i42.tinypic.com/28gqpgn.png
我环顾四周,搜索了很多,并惊讶地发现没有人提起这件事 任何人都可以确认这是处理中的错误吗?
或者我错过了一些关键的东西?
这是一个重现问题行为的最小代码。
import processing.pdf.*;
color faceXColor, faceYColor, faceZColor;
float rotx = PI/4;
float roty = PI/3;
void setup()
{
size(500, 360, P3D);
faceXColor = color( 255, 0, 0 );
faceYColor = color( 0, 255, 0 );
faceZColor = color( 0, 0, 255 );
}
void draw()
{
background( color(155) );
pushMatrix();
translate(width/2.0, height/2.0, -100);
rotateX(rotx);
rotateY(roty);
scale(90);
noStroke();
hint(ENABLE_DEPTH_TEST);
hint(ENABLE_DEPTH_SORT);
beginShape(TRIANGLES);
fill( faceZColor ); // BLUE
// +Z "front" face
vertex(-1, -1, 1 );
vertex( 1, -1, 1 );
vertex( 1, 1, 1 );
// -Z "back" face
vertex( 1, -1, -1 );
vertex(-1, -1, -1 );
vertex(-1, 1, -1 );
fill( faceYColor ); // GREEN
// +Y "bottom" face
vertex(-1, 1, 1 );
vertex( 1, 1, 1 );
vertex( 1, 1, -1 );
// -Y "top" face
vertex(-1, -1, -1 );
vertex( 1, -1, -1 );
vertex( 1, -1, 1 );
fill( faceXColor ); // RED
// +X "right" face
vertex( 1, -1, 1 );
vertex( 1, -1, -1 );
vertex( 1, 1, -1 );
// -X "left" face
vertex(-1, -1, -1 );
vertex(-1, -1, 1 );
vertex(-1, 1, 1 );
endShape();
popMatrix();
}
void keyPressed( )
{
beginRaw(PDF, "output.pdf");
draw();
endRaw();
}
void mouseDragged() {
float rate = 0.01;
rotx += (pmouseY-mouseY) * rate;
roty += (mouseX-pmouseX) * rate;
}