2015-10-07 4 views
0

Я реализовал зеркало, используя технику продемонстрировала здесь: http://threejs.org/examples/webgl_mirror.htmlТри JS Непрозрачного зеркало

Я хотел бы, чтобы мое отражение немного непрозрачным, так что все «глубже» в отражение кажется более темным. Я думаю, чтобы захватить фрагментарный шейдер, но не знаю, какое свойство лучше использовать для создания этих отношений.

В настоящее время мое зеркало пиксельный шейдер:

vec4 color = texture2DProj(mirrorSampler, mirrorCoord); 
color = vec4(blendOverlay(mirrorColor.r, color.r), blendOverlay(mirrorColor.g, color.g), blendOverlay(mirrorColor.b, color.b), 1.0); 
vec3 outgoingLight = color.rgb; 
${THREE.ShaderChunk[ "fog_fragment" ]} 
gl_FragColor = vec4(outgoingLight,1.0); 
+0

Возможно, вы можете добавить «Fog» в сцену, включить его для рендеринга зеркала и отключить его для рендеринга сцены? – mrdoob

+0

Спасибо, я использовал туман и некоторое тщательное освещение, чтобы получить эффект, который я получаю после –

ответ

0

То, что вы описали, на самом деле не как зеркала работы. Однако просто примените темный туман к вашему первоначальному проходу.

Вы можете, однако, получить результаты, которые вы действительно хотите, пропустив туман и вместо этого применив некоторую функцию dot(Normal,View) - ака «отношение облицовки» - к яркости термина отражения. Общим приближением к уравнениям Френеля «приближение Шлик» является (pow((1.0-abs(dot(N,V))),5.0)) - так что отражение просто сильнее при углах скольжения, но затемняется на «глубоких» прямых. Это будет больше похоже на множество реальных зеркал.

+0

Спасибо, туман сделал работу –