console
var scene, camera, texture, texture1, geometry, material, mesh, renderer, controls
const url1 = 'http://183.192.162.3:21451/mnt1/cloudxr/ftp/test.jpg'
const url = 'http://183.192.162.29:18901/mnt1/clipcloud/ftp/cloudxr/cloudxr.jpg'
function createImgPano() {
scene = new THREE.Scene()
camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 1, 1000)
camera.position.set(1, 0, 0)
let loader = new THREE.TextureLoader();
loader.setCrossOrigin("Anonymous");
texture = new THREE.TextureLoader().load(url,
() => {
texture.image.crossOrigin = 'Anonymous'
texture.wrapS = texture.wrapT = THREE.ClampToEdgeWrapping
texture.minFilter = THREE.NearestFilter
})
geometry = new THREE.SphereBufferGeometry(500, 30, 30);
var vertexShader = `
varying vec2 vUv;
void main()
{
vUv = uv;
vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );
//projectionMatrix * mvPosition; 最终得到MVP矩阵
gl_Position = projectionMatrix * mvPosition;
gl_Position.x=-gl_Position.x;
}
`
var fragmentShader = `
//获取纹理
uniform sampler2D texture1;
varying vec2 vUv;
void main(void){
gl_FragColor =texture2D(texture1, vUv);
}
`
material = new THREE.ShaderMaterial({
uniforms: {
texture1: {
value: texture,
},
},
vertexShader: vertexShader,
fragmentShader: fragmentShader,
side: THREE.DoubleSide,
})
mesh = new THREE.Mesh(geometry, material)
scene.add(mesh)
renderer = new THREE.WebGLRenderer()
renderer.setSize(700, 350)
renderer.setPixelRatio(window.devicePixelRatio)
document.body.append(renderer.domElement)
planeTexture = new THREE.TextureLoader().load(`http://183.192.162.29:18901/mnt1/clipcloud/ftp/cloudxr/icon/48d9658aaf4349dbbc5b8a20da7ec3ba.jpg`)
planeGeometry = new THREE.PlaneBufferGeometry(15, 7)
planeMaterial = new THREE.ShaderMaterial({
uniforms: {
texture1: {
value: planeTexture,
},
},
vertexShader: vertexShader,
fragmentShader: fragmentShader,
side: THREE.DoubleSide,
})
imgMesh = new THREE.Mesh(planeGeometry, planeMaterial)
imgMesh.position.set(-20, 5, 10)
scene.add(imgMesh)
controls = new THREE.OrbitControls(camera, renderer.domElement)
render()
}
function render() {
window.requestAnimationFrame(render)
renderer.render(scene, camera)
imgMesh.lookAt(camera.position)
}
window.onload = function () {
createImgPano()
}
<html>
<head>
<title>ShaderMaterial和MeshBasicMaterial视角画面不一致</title>
</head>
<body>
</body>
</html>