Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用three.js在片段着色器中手动选择mipmap的lod_Three.js_Opengl Es 2.0_Mipmaps_Glsles_Level Of Detail - Fatal编程技术网

使用three.js在片段着色器中手动选择mipmap的lod

使用three.js在片段着色器中手动选择mipmap的lod,three.js,opengl-es-2.0,mipmaps,glsles,level-of-detail,Three.js,Opengl Es 2.0,Mipmaps,Glsles,Level Of Detail,我正在使用three.js中的glsl es编写一个基于物理的着色器。对于镜面全局照明的添加,我使用cubemap dds纹理,其中包含mipmap链,并使用CubeMapGen进行预计算,如前所述。我需要在片段着色器中访问此纹理,我想手动选择mipmap的索引。执行此操作的正确功能是 vec4 textureCubeLod(samplerCube sampler, vec3 coord, float lod) 但它仅在顶点着色器中可用。在我的片段着色器中,我使用了类似的函数 vec4 tex

我正在使用three.js中的glsl es编写一个基于物理的着色器。对于镜面全局照明的添加,我使用cubemap dds纹理,其中包含mipmap链,并使用CubeMapGen进行预计算,如前所述。我需要在片段着色器中访问此纹理,我想手动选择mipmap的索引。执行此操作的正确功能是

vec4 textureCubeLod(samplerCube sampler, vec3 coord, float lod)
但它仅在顶点着色器中可用。在我的片段着色器中,我使用了类似的函数

vec4 textureCube(samplerCube sampler, vec3 coord, float bias)
但这并不奏效,因为偏差参数只是添加到自动计算的细节级别。因此,当我放大或缩小场景时,mipmap的LOD会改变,但对于我的着色器,它必须是相同的,它必须仅取决于粗糙参数,如上面链接中所述


我想在片段着色器中手动选择mipmap的级别,该级别仅取决于材质的粗糙度,例如使用公式mipmaindex=粗糙度*numMipMap,因此它必须与距离一致,并且在缩放时不会自动更改。我如何解决这个问题?

它不适用于webGL atm,因为不支持此功能。您可以尝试使用textureLOD扩展,但需要对chrome canary的最新版本进行一些调整。转到flags并查找以下内容:

启用WebGL草稿扩展


你是说WebGL外部着色器纹理细节扩展吗?我试图按照说明来实现它,但浏览器告诉我不支持。是的,但如果您下载最新版本的chrome canary并启用此扩展,它应该可以工作。我刚从假期回来,我下载了最新版本的chrome canary并启用WebGL草稿扩展,但不幸的是,它不起作用。控制台返回我不支持该扩展。有可能吗?我还添加了扩展GL_EXT_shader_texture_lod:在我的片段着色器中启用。还需要添加renderer.context.getExtension'EXT_shader_texture_lod'ahh我忘记了: