123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
-
-
- const prefixVertex ="precision highp float;\nprecision highp int;\n\nuniform mat4 modelMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\n"
- const prefixFragment ="precision highp float;\nprecision highp int;\n\nuniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"
- var shaders = {
-
- skybox: {
- uniforms: {
- opacity: {
- type: "f",
- value: 1
- },
- panoMap: {
- type: "t",
- value: null
- },
- panoMatrix: {
- type: "m4",
- value: new THREE.Matrix4
- },
- panoPosition: {
- type: "v3",
- value: new THREE.Vector3
- },
- },
- vertexShader: prefixVertex + `
- uniform mat4 panoMatrix;
- uniform vec3 panoPosition;
- varying vec3 vWorldPosition;
-
-
- void main() {
- vec4 worldPosition = modelMatrix * vec4(position, 1.0);
-
- vec3 positionLocalToPanoCenter = worldPosition.xyz - panoPosition;
- vWorldPosition = (vec4(positionLocalToPanoCenter, 1.0) * panoMatrix).xyz;
- vWorldPosition.x *= -1.0;
-
- gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
-
- }
-
- `,
- fragmentShader: prefixFragment + `
-
- uniform float opacity;
- varying vec3 vWorldPosition;
-
- #define PI 3.141592653
-
-
-
- #if defined(Not_Cube)
- uniform sampler2D panoMap;
- vec4 texCubemapWith2D(sampler2D t,vec3 dir)
- {
- dir=normalize(dir);
-
- float tx = atan(dir.x,dir.z)/(PI*2.0)+0.5;
- float ty = acos(dir.y)/PI;
- vec4 color = texture2D(t, vec2(tx,ty));
- return color;
- }
- #else
- uniform samplerCube panoMap;
-
- #endif
-
-
-
- void main()
- {
- vec4 colorFromPanos;
-
- #if defined(Not_Cube)
- colorFromPanos = texCubemapWith2D(panoMap, vWorldPosition);
- #else
- colorFromPanos = textureCube(panoMap, vWorldPosition.xyz);
- #endif
-
-
- gl_FragColor=vec4(colorFromPanos.rgb, colorFromPanos.a*opacity);
- }
- `
- },
-
-
-
-
- floorLogo: { //地面logo
- uniforms: {
- map: {
- type: "t",
- value: null
- },
- opacity:{
- type:"f",
- value: 0
- },
- opaRadius:{//百分比
- type:"f",
- value: 0.2
- }
- },
- vertexShader: "varying vec2 vUv;void main() { vUv = uv; gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );}",
- fragmentShader: "uniform sampler2D map; uniform float opacity;uniform float opaRadius;varying vec2 vUv; void main() { vec2 vUv2 = vec2(vUv.x*2.0 - 1.0, vUv.y*2.0 - 1.0); vec4 colorFromTexture = texture2D( map, vUv ); float opa = 1.0; float r = vUv2.x*vUv2.x + vUv2.y*vUv2.y; if(r > 1.0) opa = 0.0; else if(r < opaRadius)opa = 1.0; else{ float a = -1.0 / ((opaRadius - 1.0)*(opaRadius - 1.0)); float b = -2.0 * a * opaRadius; float c = 1.0 + a * opaRadius * opaRadius; opa = a * r*r + b * r + c; } gl_FragColor = vec4(colorFromTexture.rgb, opacity * min(colorFromTexture.a, opa) );}"
- },
-
- cube: {//最基本的pano投影映射,投影中心是盒子的中心
- uniforms: {
- map: {
- type: "t",
- value: null
- },
- opacity: {
- type: "f",
- value: 1
- }
- },
- vertexShader: prefixVertex + "varying vec3 vWorldPosition;\n\nvoid main() {\n vWorldPosition = position;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}\n",
- fragmentShader: prefixFragment + "uniform samplerCube map;\nuniform float opacity;\n\nvarying vec3 vWorldPosition;\n\nvoid main() {\n vec4 color = textureCube( map, vec3( -vWorldPosition.x, vWorldPosition.yz ) );\n gl_FragColor = vec4(color.rgb, opacity);\n}\n"
- },
-
- };
-
-
-
|