The normalMaterial() function in p5.js is used to create a normal material for an object. A normal material is not affected by any light and also does not reflect any light. The surface facing the x-axis becomes red, the surface facing the y-axis becomes green and the surface facing the z-axis becomes blue. It is usually used as a placeholder material for debugging.
Syntax:
normalMaterial()
Parameters: This function does not accept any parameters.
Below example illustrates the normalMaterial() function in p5.js:
Example 1: This example shows that the normal material is not affected by light.
let newFont;
let hasLight = true ;
function preload() {
newFont = loadFont( 'fonts/Montserrat.otf' );
}
function setup() {
createCanvas(600, 300, WEBGL);
textFont(newFont, 16);
lightCheckbox = createCheckbox( 'Enable Light' , true );
lightCheckbox.position(30, 250);
lightCheckbox.changed(() => hasLight = !hasLight);
}
function draw() {
background( 'white' );
fill( 'black' );
text( "Use the mouse to rotate/move the scene" , -285, -125);
noStroke();
orbitControl();
if (hasLight)
directionalLight(color( 'red' ), height / 2, width / 2, -250);
ambientMaterial(255);
translate(-100, 0, 0);
sphere(80);
translate(100, 0, 0);
normalMaterial();
translate(100, 0, 0);
sphere(80);
translate(-100, 0, 0);
}
|
Output:

Example 2: This example shows the colors for the different axes of the normal material.
let newFont;
let hasNormalMaterial = true ;
function preload() {
newFont = loadFont( 'fonts/Montserrat.otf' );
}
function setup() {
createCanvas(600, 300, WEBGL);
textFont(newFont, 16);
}
function draw() {
background( 'white' );
fill( 'black' );
text( "Use the mouse to rotate/move the scene" , -285, -125);
shininess(10);
noStroke();
orbitControl();
normalMaterial();
rotateX(60)
rotateY(120)
rotateZ(60)
box(100);
}
|
Output:

Online editor: https://editor.p5js.org/
Environment Setup: https://www.geeksforgeeks.org/p5-js-soundfile-object-installation-and-methods/
Reference: https://p5js.org/reference/#/p5/normalMaterial