在Three.js着色器上启用扩展

fra*_*ank 11 shader glsl webgl three.js

如何在Three.js着色器上启用扩展?

我的代码到目前为止:

获得扩展:

var domElement = document.createElement( 'canvas' );
var gl = domElement.getContext('webgl') || domElement.getContext('experimental-webgl');
gl.getExtension('OES_standard_derivatives');
Run Code Online (Sandbox Code Playgroud)

在我的着色器上:

fragmentShader: [
    "#extension GL_OES_standard_derivatives : enable",
    "code..."
]...
Run Code Online (Sandbox Code Playgroud)

控制台输出:
警告:
0:26:不支持扩展'GL_OES_standard_derivatives' 错误:0:32:'dFdx':找不到匹配的重载函数
错误:0:32:'=':无法从'const mediump float'转换到'浮动的'2分量向量'
错误:0:33:'dFdy':找不到匹配的重载函数
错误:0:33:'=':无法从'const mediump float'转换为'浮点数的2分量向量"

github上阅读此问题之后,我尝试了这个例子:来自http://jsfiddle.net/VJca4/我收到这些错误

警告:
0:27:不支持扩展'GL_OES_standard_derivatives' 错误:0:30:'=':无法从'const mediump float'转换为'浮动的2分量向量'
错误:0:31:'dFdx':找不到匹配的重载函数
错误:0:31:'=':无法从'const mediump float'转换为'float的2分量向量'

mrd*_*oob 8

你也应该能够这样做:

renderer.context.getExtension('OES_standard_derivatives');
Run Code Online (Sandbox Code Playgroud)

  • 似乎在当前的three.js代码库中执行此操作的方法是在创建时在`ShaderMaterial`中设置`derivatives = true`. (3认同)
  • MyShaderMaterial.extensions.derivatives = true; 从 r88 开始 (2认同)