从Unity到Three.js(shader创建)

本文详细介绍了如何在three.js中创建和应用顶点着色器和片元着色器,通过实例展示了如何封装材料方法并创建带有自定义效果的3D模型。

本文介绍three.js 中shader的创建和应用到模型,具体shader的语法和函数应用,已经有很多大佬总结过了。
three.js shader详解

import * as THREE from 'three';


const scene = new THREE.Scene();//创建场景
scene.background=new THREE.Color(0,0.1,0.2,1);//设置背景色
const geometry = new THREE.BoxGeometry(1, 1,1);//创建box物体
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);//配置相机参数
camera.position.z = 5;//设置相机位置

//顶点着色器
const vertex = `
varying vec2 vUv;//必须带varying
  void main() {
    vUv = uv;//记录UV信息
    gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);//顶点信息
  }
`;

//片元着色器
const fragment = `
varying vec2 vUv;//对应顶点着色器记录的UV信息
  void main() {
  
    //gl_FragColor = vec4(vUv.x, vUv.y, vUv.x, 1.0);
    //gl_FragColor = vec4(vec3(vUv.x), 1.0);
    //gl_FragColor = vec4(vUv, 0.0, 1.0);
    //gl_FragColor = vec4(step(0.5,vUv.x), step(0.5,vUv.y),1.0, 1.0);
    float color = step(0.5, vUv.x);
    float color2 = step(0.45,vUv.x);
    gl_FragColor = vec4(vec3(color2-color), 1.0);
    gl_FragColor = vec4(vec3(fract(vUv.x * 3.0)), 1.0);
    gl_FragColor = vec4(vec3(step(0.5,fract(vUv.x*5.0))),1.0)*vec4(vec3(step(0.5,fract(vUv.y*5.0))),1.0);


  }
`;
//创建对应shader的材质方法封装,获取对应shader的材质
function getMaterial()
{
    return new THREE.ShaderMaterial({
        vertexShader: vertex,
        fragmentShader: fragment
      });
}

const cube = new THREE.Mesh(geometry, getMaterial());
cube.position.x -= 2;
cube.position.y -= 2;
scene.add(cube);
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

function animate() {
    requestAnimationFrame(animate);
    renderer.render(scene, camera);
  }
  animate();

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值