11

如何在 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”转换到“浮动的 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”转换为“float 的 2 分量向量”
错误:0:31:“dFdx”:找不到匹配的重载函数
错误:0:31:'=':无法从'const mediump float'转换为'2-component vector of float'

4

2 回答 2

9

您还应该能够做到这一点:

renderer.context.getExtension('OES_standard_derivatives');
于 2012-06-17T20:43:43.557 回答
2

发现错误。您必须使用渲染器的 dom 元素:

var gl = renderer.domElement.getContext('webgl') ||
            renderer.domElement.getContext('experimental-webgl');
gl.getExtension('OES_standard_derivatives');
于 2012-06-17T14:32:02.327 回答