three.js - 使用着色器材质的标准材质。USE_MAP 突然停止工作,“maptexelToLinear;找不到匹配的重载函数”
问题描述
我正在使用来自 github 的最新 three.js 构建,它是前一天晚上更新的。
该代码几天前有效,但没有更改昨天停止工作的代码。maptexelToLinear; no matching overloaded function found
它在 map_fragment shaderChunk 的第 6 行给出错误消息:
vec4 texelColor = texture2D( map, vUv );
texelColor = mapTexelToLinear( texelColor ); //here
有什么改变吗?这仍然是从着色器材质创建标准材质的正确方法吗?使用定义、扩展和映射统一?
https://jsfiddle.net/EthanHermsey/c4sea1rg/119/
let texture = new THREE.TextureLoader().load(
document.getElementById( 'blockDiff' ).src
);
// this works fine
/* let mat = new THREE.MeshStandardMaterial( {
map: texture
} ) */
// this does not
let mat = new THREE.ShaderMaterial( {
//custom shaders
// vertexShader: document.getElementById( 'blockVertexShader' ).textContent,
// fragmentShader: document.getElementById( 'blockFragmentShader' ).textContent,
//The standard shaders do not even work :/
vertexShader: THREE.ShaderLib[ 'standard' ].vertexShader,
fragmentShader: THREE.ShaderLib[ 'standard' ].fragmentShader,
uniforms: THREE.UniformsUtils.merge( [
THREE.ShaderLib[ 'standard' ].uniforms,
{
blockScale: { value: new THREE.Vector3() } // used in custom shaders
}
] ),
defines: {
"STANDARD": '',
"USE_UV": '',
"USE_MAP": ''
},
lights: true
} );
mat.uniforms.map.value = texture;
mat.extensions.derivatives = true;
mat.uniformsNeedUpdate = true;
解决方案
在以前的three.js
版本中实际上存在一个错误,maptexelToLinear()
将错误的实现注入到着色器代码中。此问题已通过r118
. 但是,它要求用户代码中的自定义着色器材质具有名为map
.
更新代码:https ://jsfiddle.net/og8Lmp6e/
通过这种方式,也没有必要像USE_MAP
或USE_UV
不再设置自定义定义。这是自动发生的。当然maptexelToLinear()
now 的实现尊重你的纹理的编码。
推荐阅读
- python - 回答 jupyter notebook 中的 shell 命令?
- php - 从表中选择多行
- ios - 是否有与 iOS (例如 MPMediaPickerController)类似的方式来访问 WatchOS 上的音乐文件?
- c# - 如何在表格中选择和保存数据行?C# ASP.NET MVC 5
- amazon-web-services - 如何在不使用 jupyter notebook 实例(无服务器)的情况下在 Sagemaker 上以脚本模式训练和部署模型?
- excel - 如何在 VBA 的计数中使用通配符或 Like
- html - 粘性 HTML 表格标题几乎可以工作,但标题上方的行稍微可见
- python - 计算迭代次数
- html - page-break-before:避免媒体打印不起作用
- javascript - 如何在javascript中检查它是否在太平洋标准时间上午10点到下午6点之间?