2012-06-17 100 views
8

如何在Three.js着色器上啓用擴展?在Three.js着色器上啓用擴展

到目前爲止我的代碼:

得到延伸:

var domElement = document.createElement('canvas'); 
var gl = domElement.getContext('webgl') || domElement.getContext('experimental-webgl'); 
gl.getExtension('OES_standard_derivatives'); 

我着色器:

fragmentShader: [ 
    "#extension GL_OES_standard_derivatives : enable", 
    "code..." 
]... 

控制檯輸出:
警告:0:26:擴展名 'GL_OES_standard_derivatives'不支持
錯誤:0:32:'dFdx':找不到匹配的重載函數
錯誤:0:32:'=':無法從'const mediump float'轉換爲'float float的2分量向量'
錯誤:0:33:'dFdy':找不到匹配的重載函數
錯誤: 0:33:「=」:不能從「const的mediump浮動」轉換爲

「浮動的2種成分的矢量」讀取this issue on github後,我試圖這個例子中:從http://jsfiddle.net/VJca4/我得到這些錯誤

警告:0:27:不支持擴展名'GL_OES_standard_derivatives'
錯誤:0:30:'=':無法從'const mediump float'轉換爲'2-component vec 'float''
錯誤:0:31:'dFdx':找不到匹配的重載函數
錯誤:0:31:'=':無法從'const mediump float'轉換爲'2分量向量float'

+0

的jsfiddle有缺失VEC 2,和three.js所太老了 - 請參見http://的jsfiddle .net/VJca4/9 /它完全有效) – makc

回答

6

你也應該能夠做到這一點:

renderer.context.getExtension('OES_standard_derivatives'); 
+0

你是怎麼把這個投入使用的?我有一個非常類似的問題。 – Hobbes

+0

我也有這個問題。我在調用'renderer.context.getExtension('GL_OES_standard_derivatives');'但是當我嘗試從我的着色器代碼創建'ShaderMaterial'時,我得到了'ERROR:0:114:'GL_OES_standard_derivatives':擴展名被禁用'。如果我在第一行使用'#extension GL_OES_standard_derivatives:enable'在常規webgl中編譯着色器,它就可以工作。 – matth

+3

在當前的three.js代碼庫中,似乎做到這一點的方法是在創建時在「ShaderMaterial」中設置'derivatives = true'。 – matth

1

發現錯誤。你必須使用渲染器的DOM元素:

var gl = renderer.domElement.getContext('webgl') || 
      renderer.domElement.getContext('experimental-webgl'); 
gl.getExtension('OES_standard_derivatives');