threejs 场景消融 效果

10 篇文章 0 订阅
6 篇文章 2 订阅

消融场景 需要用到的是shader代码

<script id="fs" type="x-shader/x-fragment">
    uniform float threshold;
    uniform float edgeWidth;
    uniform float edgeBrightness;
    uniform vec3 edgeColor;
    uniform sampler2D mainTex;      
    uniform sampler2D  noiseTex;   
    varying vec2 vUv;   
    void main(){
            vec4 color = texture2D(mainTex, vUv);
            vec4 noiseValue = texture2D(noiseTex, vUv);
            if(noiseValue.r < threshold)
            {
                    discard;
            }
            if(noiseValue.r - edgeWidth < threshold){
                    color = vec4(edgeColor, 1.0);
            }
            gl_FragColor = color;
        }
</script>
<script id="vs" type="x-shader/x-vertex">
    varying vec2 vUv;
    void main()
    {
            vUv = uv;
            gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
    }
</script>

创建一个box 然后给box的材质添加shaderMaterial材质效果

 const Boxgeo = new THREE.BoxGeometry( 100 , 100 , 100 );
        const Boxmate = new THREE.ShaderMaterial({
            uniforms:{
                edgeColor: { value: new THREE.Color(0x4ad200) },
                edgeWidth: { value: 0.02 },
                edgeBrightness: { value: 0.1 },
                threshold: { value: 0.0 },
                mainTex: {
                    value: new THREE.TextureLoader().load(
                        'textures/sky/skyBox1/negx.jpg'
                    ),
                    
                },
                noiseTex: {
                    value: new THREE.TextureLoader().load("https://i.postimg.cc/y8mHLC8Z/noise-2.png"),
                    
                }
            },
            side: THREE.FrontSide,
            vertexShader: document.getElementById("vs").textContent,
            fragmentShader: document.getElementById("fs").textContent,
        })
        
        
        
        // new THREE.MeshBasicMaterial({
        //     color : 0x999999,
        //     map : new THREE.TextureLoader().load('textures/sky/skyBox1/negx.jpg')
        // })
        BOX = new THREE.Mesh( Boxgeo , Boxmate );
        scene.add(BOX)

 if(BOX && meltActive){
            // console.log('停止')
            BOX.material.uniforms.threshold.value += 0.005;
            if(BOX.material.uniforms.threshold.value > 1.0){
                BOX.material.uniforms.threshold.value = 1.0;
                // console.log(BOX.material.uniforms.threshold.value)
            }
        }else if(BOX && meltActive == false &&  BOX.material.uniforms.threshold.value < 1.2){
            // console.log(2 , meltActive , BOX.material.uniforms.threshold.value )
            // console.log(BOX.material.uniforms.threshold.value)
            BOX.material.uniforms.threshold.value -= 0.005;
            if(BOX.material.uniforms.threshold.value < 0.0){
                BOX.material.uniforms.threshold.value = 0.0;
            }
        }
  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
KCF (Kernelized Correlation Filter) 是一种改进的相关滤波算法,它通过在CSK(Combined Spatial and Appearance Model,空间与外观模型结合)的基础上加入了核技巧(kernel trick),提高了性能。然而,关于"消融实验"和"消融系数",通常指的是评估算法中某个特定组件对整体性能影响的研究,比如移除或改变某一特征或者优化步骤来分析其对追踪精度和速度的影响。 在KCF的消融实验中,可能会涉及以下几个关键因素的分析: 1. **核函数的选择**:不同的核函数(如高斯核、线性核等)会影响滤波器的表达能力和计算效率。实验可能比较不同核函数对追踪效果的影响[^1]。 2. **尺度不变性**:KCF通过尺度空间金字塔来处理目标的大小变化,但可能调整金字塔的级数或尺度步长以研究其对性能的影响。 3. **模板大小**:模板大小决定了滤波器的局部感受野,改变模板大小可能会影响追踪的稳定性和响应速度。 4. **迭代次数**:滤波器的更新迭代次数对追踪精度有直接关系,增加迭代次数理论上可以提高准确性,但可能导致计算时间变长。 5. **初始化策略**:追踪器的初始位置对后续的追踪至关重要,不同的初始化策略可能会影响最终结果。 要了解具体的消融系数,通常需要查阅KCF相关的原始论文或详细实验报告,其中会提供详细的参数调整和性能分析[^2]。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zombie391

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值