12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- /**
- * Copyright (c) 2020-2022 mol* contributors, licensed under MIT, See LICENSE file for more info.
- *
- * @author Alexander Rose <alexander.rose@weirdbyte.de>
- */
- export const cylinders_vert = `
- precision highp float;
- precision highp int;
- #include common
- #include read_from_texture
- #include common_vert_params
- #include color_vert_params
- #include size_vert_params
- #include common_clip
- uniform mat4 uModelView;
- attribute mat4 aTransform;
- attribute float aInstance;
- attribute float aGroup;
- attribute vec3 aMapping;
- attribute vec3 aStart;
- attribute vec3 aEnd;
- attribute float aScale;
- attribute float aCap;
- varying mat4 vTransform;
- varying vec3 vStart;
- varying vec3 vEnd;
- varying float vSize;
- varying float vCap;
- uniform float uIsOrtho;
- uniform vec3 uCameraDir;
- void main() {
- #include assign_group
- #include assign_color_varying
- #include assign_marker_varying
- #include assign_clipping_varying
- #include assign_size
- mat4 modelTransform = uModel * aTransform;
- vTransform = aTransform;
- vStart = (modelTransform * vec4(aStart, 1.0)).xyz;
- vEnd = (modelTransform * vec4(aEnd, 1.0)).xyz;
- vSize = size * aScale;
- vCap = aCap;
- vModelPosition = (vStart + vEnd) * 0.5;
- vec3 camDir = -mix(normalize(vModelPosition - uCameraPosition), uCameraDir, uIsOrtho);
- vec3 dir = vEnd - vStart;
- // ensure cylinder 'dir' is pointing towards the camera
- if(dot(camDir, dir) < 0.0) {
- dir = -dir;
- }
- vec3 left = cross(camDir, dir);
- vec3 up = cross(left, dir);
- left = vSize * normalize(left);
- up = vSize * normalize(up);
- // move vertex in object-space from center to corner
- vModelPosition += aMapping.x * dir + aMapping.y * left + aMapping.z * up;
- vec4 mvPosition = uView * vec4(vModelPosition, 1.0);
- vViewPosition = mvPosition.xyz;
- gl_Position = uProjection * mvPosition;
- mvPosition.z -= 2.0 * (length(vEnd - vStart) + vSize); // avoid clipping
- gl_Position.z = (uProjection * mvPosition).z;
- #include clip_instance
- }
- `;
|