after exporting a SceneGraphComponent into a PDF file, the lighting is broken. The displayed scene is correct (first image), but in the PDF file (second image), the whole geometry is black.
Correct lighting in JReality:

Resulting PDF file:

Here is the complete source code for the creation of the geometry and the PDF export:
Code: Select all
import java.awt.Color;
import java.awt.Component;
import java.io.FileOutputStream;
import javax.swing.JFrame;
import de.jreality.geometry.IndexedFaceSetFactory;
import de.jreality.io.JrScene;
import de.jreality.scene.Appearance;
import de.jreality.scene.SceneGraphComponent;
import de.jreality.shader.CommonAttributes;
import de.jreality.ui.viewerapp.ViewerApp;
import de.jreality.util.CameraUtility;
import de.jreality.writer.pdf.WriterPDF;
public class TestPDFExport {
private static SceneGraphComponent getFaces1(){
Color[] colorArray = {Color.RED, Color.RED, Color.RED, Color.RED, Color.RED, Color.RED, Color.RED, Color.RED, Color.RED, Color.RED, Color.RED, Color.RED};
double[][] verticesArray = {{-500.0, 500.0, -5.0}, {500.0, -500.0, -5.0}, {500.0, 500.0, -5.0}, {-500.0, -500.0, -5.0}, {500.0, 500.0, -15.0}, {-500.0, -500.0, -15.0}, {-500.0, 500.0, -15.0}, {500.0, -500.0, -15.0}};
int[][] faceIndicesArray = {{0, 1, 2}, {0, 3, 1}, {4, 5, 6}, {4, 7, 5}, {6, 3, 0}, {6, 5, 3}, {4, 0, 2}, {4, 6, 0}, {7, 2, 1}, {7, 4, 2}, {5, 1, 3}, {5, 7, 1}};
IndexedFaceSetFactory indexedFaceSetFactory = new IndexedFaceSetFactory();
indexedFaceSetFactory.setVertexCount(verticesArray.length);
indexedFaceSetFactory.setVertexCoordinates(verticesArray);
indexedFaceSetFactory.setFaceCount(faceIndicesArray.length);
indexedFaceSetFactory.setFaceIndices(faceIndicesArray);
indexedFaceSetFactory.setFaceColors(colorArray);
indexedFaceSetFactory.setGenerateFaceNormals(true);
indexedFaceSetFactory.update();
SceneGraphComponent sgc = new SceneGraphComponent();
sgc.setGeometry(indexedFaceSetFactory.getIndexedFaceSet());
return sgc;
}
private static SceneGraphComponent getFaces2(){
Color[] colorArray = {Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN, Color.GREEN};
double[][] verticesArray = {{-12.5, -21.650634765625, 485.0}, {2.9028296151360766E-13, -25.0, 485.0}, {12.5, -21.650634765625, 485.0}, {-21.650634765625, -12.5, 485.0}, {-25.0, 1.745741680554691E-13, 485.0}, {21.650634765625, -12.5, 485.0}, {12.5, 21.650634765625, 485.0}, {-5.886537459733054E-14, 25.0, 485.0}, {-12.5, 21.650634765625, 485.0}, {21.650634765625, 12.5, 485.0}, {25.0, 3.491483361109382E-13, 485.0}, {-21.650634765625, 12.5, 485.0}, {-12.5, 21.650634765625, -15.0}, {2.9085487815959377E-13, 25.0, -15.0}, {12.5, 21.650634765625, -15.0}, {-21.650634765625, 12.5, -15.0}, {-25.0, 1.745741680554691E-13, -15.0}, {21.650634765625, 12.5, -15.0}, {12.5, -21.650634765625, -15.0}, {-5.886537459733054E-14, -25.0, -15.0}, {-12.5, -21.650634765625, -15.0}, {21.650634765625, -12.5, -15.0}, {-21.650634765625, -12.5, -15.0}, {25.0, 0.0, -15.0}};
int[][] faceIndicesArray = {{0, 1, 2}, {3, 0, 2}, {4, 2, 5}, {4, 3, 2}, {6, 7, 8}, {9, 6, 8}, {10, 4, 5}, {10, 11, 4}, {10, 8, 11}, {10, 9, 8}, {12, 13, 14}, {15, 12, 14}, {16, 14, 17}, {16, 15, 14}, {18, 19, 20}, {21, 22, 16}, {21, 20, 22}, {21, 18, 20}, {23, 16, 17}, {23, 21, 16}, {5, 23, 10}, {5, 21, 23}, {2, 21, 5}, {2, 18, 21}, {1, 18, 2}, {1, 19, 18}, {0, 19, 1}, {0, 20, 19}, {3, 20, 0}, {3, 22, 20}, {4, 22, 3}, {4, 16, 22}, {11, 16, 4}, {11, 15, 16}, {8, 15, 11}, {8, 12, 15}, {7, 12, 8}, {7, 13, 12}, {6, 13, 7}, {6, 14, 13}, {9, 14, 6}, {9, 17, 14}, {10, 17, 9}, {10, 23, 17}};
IndexedFaceSetFactory indexedFaceSetFactory = new IndexedFaceSetFactory();
indexedFaceSetFactory.setVertexCount(verticesArray.length);
indexedFaceSetFactory.setVertexCoordinates(verticesArray);
indexedFaceSetFactory.setFaceCount(faceIndicesArray.length);
indexedFaceSetFactory.setFaceIndices(faceIndicesArray);
indexedFaceSetFactory.setFaceColors(colorArray);
indexedFaceSetFactory.setGenerateFaceNormals(true);
indexedFaceSetFactory.update();
SceneGraphComponent sgc = new SceneGraphComponent();
sgc.setGeometry(indexedFaceSetFactory.getIndexedFaceSet());
return sgc;
}
public static void main(String[] arguments){
try {
// Create the geometry
SceneGraphComponent root = new SceneGraphComponent();
root.addChild(getFaces1());
root.addChild(getFaces2());
Appearance appearance = new Appearance();
appearance.setAttribute(CommonAttributes.EDGE_DRAW, false);
appearance.setAttribute(CommonAttributes.FACE_DRAW, true);
appearance.setAttribute(CommonAttributes.VERTEX_DRAW, false);
appearance.setAttribute(CommonAttributes.POLYGON_SHADER + "." + CommonAttributes.SMOOTH_SHADING, false);
root.setAppearance(appearance);
// Display the geometry
ViewerApp viewerApp = new ViewerApp(root);
CameraUtility.encompass(viewerApp.getCurrentViewer());
JFrame frame = new JFrame();
frame.getContentPane().add((Component)viewerApp.getViewingComponent());
frame.setSize(512, 512);
frame.validate();
frame.setVisible(true);
// Write the geometry into a PDF file
WriterPDF writerPDF = new WriterPDF();
writerPDF.writeScene(new JrScene(root), new FileOutputStream("d:\\test.pdf"));
} catch(Exception exception){
exception.printStackTrace();
}
}
}
Best regards, Joe