我想寫我的着色器並添加光源,我有點想通了,做了它。Three.js着色器pointLight位置
但是有一個問題,光源的位置錯誤地確定,當相機旋轉或移動時,會發生一些不可思議的事情。
所以我得到的頂點着色器
vec3 vGlobalPosition = (modelMatrix * vec4(position, 1.0)).xyz
現在我試圖使照明區域
float lightDistance = pointLights[ i ].distance;
vec3 lightPosition = pointLights[ i ].position;
float diffuseCoefficient = max(
1.0 - (distance(lightPosition,vGlobalPosition)/lightDistance), 0.0);
gl_FragColor.rgb += color.rgb * diffuseCoefficient;
的位置,但正如我前面寫的,如果你旋轉的攝像頭,照明區域移動到不同的位置。
我手動設置了燈光位置,一切都變得正常了。
vec3 lightPosition = vec3(2000,0,2000);
...
問題是如何獲得光源的正確位置?我需要一個全球性的位置,我不知道光源中包含的是什麼位置。
增加了一個例子:http://codepen.io/korner/pen/XMzEaG
你可以製作一個演示問題的小提琴或codepen嗎? – gromiczek
@gromiczek,請不要讓人們使用codepen或jsfiddle。 **把代碼放在問題本身。如果您想運行,請使用[一個片段](https://stackoverflow.blog/2014/09/16/introducing-runnable-javascript-css-and-html-code-snippets/)** – gman
添加了一個示例: http://codepen.io/korner/pen/XMzEaG – user2783211