So far, we have learned about the basics of 3D. We created 3D objects, prepared detailed textures, worked with animation etc. In this chapter, we will talk about the requirement of depth buffer.
What is Depth Buffer?
Depth buffering or Z-Buffering is a computer graphics technique used to determine surface depths at each pixel to decide which objects are visible. For example, when there are couple of objects in the scene graph, some edges of will be on top and some will be behind others. In order to identify and render these properly, it is important to fix the depth of each of the objects at each pixels.
By default, in JavaFX Scenes, depth buffer is disabled. But, it can be easily enabled by using the following overridden constructor.
Scene(Parent root, double width, double height, boolean depthBuffer)
Just pass the final parameter as true and depth buffer will automatically enabled.
SmartGroup group = new SmartGroup(); group.getChildren().add(createBox()); //Create new scene with depth buffer enabled Scene scene = new Scene(group, WIDTH, HEIGHT, true);
Effects of not enabling depth buffer
Following image shows the effect of using depth buffer. In the first image (image on the left), the wooden boxes were supposed to merged. But, since depth buffer is not used, the rendering is not proper and they appear to be two different boxes. When depth buffer is enabled, it is rendered correctly as it can be seen in the second image.