3D场景输出到pdf处理:深度缓冲问题

时间:2013-11-22 20:33:50

标签: pdf-generation processing depth-buffer

在处理草图中,我使用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;
}

0 个答案:

没有答案