On my OpenGL app I simulate a kind of metal/glass reflection effect using a texture with
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
and GL_COMBINE_RGB using GL_TEXTURE_ENV_COLOR.
So with env_color 100% I get a metal reflection effect and with 0% I get a flat material.
How can I achieve this effect with Three.js ?
What this code does is it enables the automatic generation of texture coordinates with OpenGL. Such a feature is not available with WebGL.
I’m not familiar with texture combiners so I’m not sure how this would work in WebGL.
Please keep in mind that WebGL has to run on many different devices which use a wide set of native 3D APIs like OpenGL, DirectX or Vulkan. WebGL does not support features of native 3D APIs which have to be emulated in software on all others.
1 Like
Thank you Mugen,
which way would you suggest to simulate a soft reflection on the surface?
1 Like
Consider to use MeshPhongMaterial
with a low shininess
value e.g. 15
.
If you want to use a PBR material, use MeshStandardMaterial
or MeshPhysicalMaterial
with a high roughness value
e.g. 1
.
1 Like
Hi Michael, I realised that what I wanted to achieve, on Threejs is called “envMap”. So I did it and it works well with a Phong material. I paste here the basic code for the other devs to know
texture = textureLoader.load(imagePath);
texture.mapping = THREE.EquirectangularReflectionMapping;
material.envMap = texture;
material.reflectivity = reflectivity; // from 0.0 to 1.0
a low reflectivity plus a little shininess gives you a nice plastic reflecting material effect
On my original macOS OpenGL app I get this
On Threejs the same model gives me this result. Very good! Yeah, still some difference, but I am a newbie on Threejs.
The best is the movie, taken from my browser Safari
I’m going to try the roughness as you suggested. I’ll tell you ASAP. Thank you.