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

Glsl 在Three.js着色器上启用扩展,glsl,shader,webgl,three.js,Glsl,Shader,Webgl,Three.js,如何在Three.js着色器上启用扩展 到目前为止,我的代码是: 正在获取扩展名: var domElement = document.createElement( 'canvas' ); var gl = domElement.getContext('webgl') || domElement.getContext('experimental-webgl'); gl.getExtension('OES_standard_derivatives'); 在我的着色器上: fragmentShad

如何在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\U OES\U标准\U衍生工具”
错误:0:32:“dFdx”:未找到匹配的重载函数
错误:0:32:“=”:无法从“常量中值浮点”转换为“浮点的2分量向量”
错误:0:33:“dFdy”:未找到匹配的重载函数
错误:0:33:“=”:无法从“常量中值浮点”转换为“浮点的2分量向量”

阅读之后,我尝试了这个例子:从中我得到了这些错误

警告:0:27:不支持扩展“GL\U OES\U标准\U衍生工具”
错误:0:30:“=”:无法从“常量中值浮点”转换为“浮点的2分量向量”
错误:0:31:“dFdx”:未找到匹配的重载函数

错误:0:31:“=”:无法从“常量mediump float”转换为“float的2分量向量”

找到错误。必须使用渲染器的dom元素:

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

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

renderer.context.getExtension('OES_标准_衍生品');

您是如何使用此功能的?我有一个非常类似的问题。我也有这个问题。我正在调用
renderer.context.getExtension('GL_-OES_-standard_-derivatives')但我得到
错误:0:114:“GL_OES_标准_衍生工具”:当我尝试从着色器代码创建
着色器材质时,扩展被禁用。如果我在常规webgl中使用
#extension GL_OES_standard_derivatives:enable
在第一行编译着色器,它会起作用。在当前的three.js代码库中,这样做的方法似乎是在创建时在
着色器材质中设置
derivatives=true
。MyShaderMaterial.extensions.derivatives=true;截止到R88JSFIDLE已经丢失了vec2,而three.js太旧了——请看它是否完全有效)