Coloring a face in buffer geometry is not visible at certain angles

So I have created multiple objects like rectangular prism & Pyramid, Triangular Prism & Pyramid, Cone & Cylinder

So i am trying to show the surface area of 3D figures,
I have buttons, that i click on a particular side is highlighted.

1st coming to the 1st issue that I am facing -
So when i click the next lh it highlights the back side but it cuts the overlapping part.

When i click on the last wh , it does not highlight at all unless i rotate the object and bring that side in front.


after I rotate

How do I make them highlight? I have used the property

I am using THREE.BoxGeometry, THREE.MeshPhongMaterial
following are the material property -
flatShading: true,
transparent: true,
opacity: 0.5,
vertexColors: true,
side: THREE.DoubleSide,

You can view it here - https://jsfiddle.net/zg6heyoc/

  1. The second issue i ma facing is the texture difference on curved surface -
    image

I am using THREE.CylinderGeometry, THREE.MeshPhongMaterial
following are the material property -
flatShading: true,
transparent: true,
opacity: 0.5,
vertexColors: true,
side: THREE.DoubleSide,

What can be done for this?

I interested your problem and it seems I solved it
You can change let side = 5; from 0 to 5 to change sides

Try this fiddle https://jsfiddle.net/Dragon3DGraff/q1dj24np/

I used advices from this article https://threejsfundamentals.org/threejs/lessons/threejs-transparency.html

 var geometry = new THREE.BoxGeometry(5,5,5);
//geometry.faces[10].color.setHex(0xff0000);
//  geometry.faces[11].color.setHex(0xff0000);
// material
let materialsFrontSide = [];
 let materialsBackSide = [];    
for( let i = 0; i < 6; i++ ){
materialsFrontSide.push(
   new THREE.MeshBasicMaterial( {
    color: 0xaaaaaa, 
    transparent: true,
    opacity: 0.5,
   side: THREE.FrontSide,
   alphaTest: 1      
} )   
);
materialsBackSide.push(
new THREE.MeshBasicMaterial( {
    color: 0xaaaaaa, 
    transparent: true,
    opacity: 0.5,
    side: THREE.BackSide,
    alphaTest: 0.1            
} )  
);
}
let side = 5;
materialsFrontSide[side].color.setHex(0xff0000);
 materialsBackSide[side].color.setHex(0xff0000);     
materialsFrontSide[side].alphaTest = 0.1;
 materialsBackSide[side].alphaTest = 0.1; 
let mesh1 = new THREE.Mesh( geometry, materialsFrontSide);
let mesh2 = new THREE.Mesh( geometry, materialsBackSide);
scene.add( mesh1 );
scene.add( mesh2 );

Thanks this is very helpful.
This side property can be used only in box geometry?
can I use this in cylinder?

Look up materialIndex.
That should solve your problems in both cases.

could you create fiddle with this pyramid? I can try to solve your problem

actually i got the fix with rearranging the code, so earlier i was updating the front and back side after every push in the scene.
I changed it by only changing the front and back color before pushing all the faces in the scene.

Thanks

This does not work for cone or cylinder geometry
how many frot and back side do we have to push for cone and cylinder 2 and 3 respectively?