所以,我发现了这一点:
> TRUE == "TRUE"
[1] TRUE
> TRUE == "BOO"
[1] FALSE
> TRUE == "true"
[1] FALSE
> TRUE == "T"
[1] FALSE
> FALSE == "FALSE"
[1] TRUE
> FALSE == "F"
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
根据 R 文档logical {base}:
as.logic 尝试将其参数强制为逻辑类型。字符串 c("T", "TRUE", "True", "true") 视为 true,c("F", "FALSE", "False", "false") 视为 false,其他所有视为 false不适用。
实际情况是这样的:
> as.logical("T")
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
显然,发生的事情TRUE == "T"并不是一种as.logical转变。对于这些 == 比较的行为有任何合理的解释吗?
我正试图从three.js中的着色器访问场景的灯光.
这个问题几乎与Three.js ShaderMaterial问题重复,但对该问题 的评论并没有帮我解决问题.
这是顶点着色器:
#if NUM_DIR_LIGHTS > 0
struct DirectionalLight {
vec3 direction;
vec3 color;
int shadow;
float shadowBias;
float shadowRadius;
vec2 shadowMapSize;
};
uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];
#endif
varying vec3 color;
void main() {
float r = directionalLights[0].color.r;
color = vec3(r,1.0,0.0);
gl_Position = projectionMatrix * modelViewMatrix * vec4(position , 1.0);
}
Run Code Online (Sandbox Code Playgroud)
和相关的ShaderMaterial:
var material = new THREE.ShaderMaterial({
uniforms: THREE.UniformsLib['lights'],
vertexShader: document.getElementById('vertexShader').innerHTML,
fragmentShader: document.getElementById('fragmentShader').innerHTML,
lights : true
});
Run Code Online (Sandbox Code Playgroud)
我在这里发布了整个示例代码:https://jsfiddle.net/zhkvcajs/
删除lights : …