threejs shader分割纹理求助

发布于 2023-12-12 17:58:49

一个人脸模型,同时贴两张纹理,从人脸中间开始对半分,左边贴纹理1的左边,右边贴纹理2的右边,凑成一个人脸,可以通过调值去显示左右区域大小,但是渲染出来后发现个别纹理会出现图片里的异常,右脸纹理跑去左边了A010FFC79CB6B5484BD7ADB7E9724040.jpg

07785D7B3DE13C8A8E513C47097A934E.png

下面是正常的
image.png
image.png
image.png
image.png
image.png

各位大佬们这是什么原因造成的,为啥有些正常有些不正常?

已经写了一版,这是我的定点和片元着色器,用的是threejs 和 THREE.ShaderMaterial,mixThreshold是0-1的传参,根据参数分割显示区域

javascript:;

// 定义顶点着色器
const vertexShader = `
  varying vec2 vUv;

  void main() {
    vUv = uv;
    gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
  }
`;


// 定义片元着色器
const fragmentShader = `
    uniform float mixThreshold; // 新添加的uniform变量
    uniform sampler2D textureLeft;
    uniform sampler2D textureRight;

    varying vec2 vUv;

    void main() {
        vec4 colorLeft = texture2D(textureLeft, vUv);
        vec4 colorRight = texture2D(textureRight, vUv);

        // // 在这里可以对颜色进行一些操作,如混合或其他效果

        // // 根据UV坐标的横向位置选择左右贴图的颜色
        gl_FragColor = mix(colorLeft, colorRight, step(mixThreshold, vUv.x));
    }
`;

// 创建自定义着色器模型材质
  Mesh.ShaderMaterial = new THREE.ShaderMaterial({
    uniforms: {
      mixThreshold: { value: 0.5 }, // 初始值为0.5
      textureLeft: { value: mirrorTextures.value[0] },
      textureRight: { value: mirrorTextures.value[0] },
    },
    vertexShader,
    fragmentShader,
  });

查看更多

关注者
0
被浏览
940
地虎降天龙
地虎降天龙 图形社区官方人员 2023-12-13
也许宇宙中最反直觉的真理是,你给别人的越多,你得到的也越多。

看了下,应用的垂直领域挺深的,因为没看到框架 也没看到代码,不太能知道什么问题,等看看有没有大佬有方向

2 个回答
地虎降天龙
地虎降天龙 图形社区官方人员 2024-01-06
也许宇宙中最反直觉的真理是,你给别人的越多,你得到的也越多。

planeClipping.png
https://ice-gl.gitee.io/icegl-three-vue-tres/#/plugins/industry4/planeClipping
开源的项目里,有相关的例子,不知道是否有帮助

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览