89 lines
2.3 KiB
GLSL
89 lines
2.3 KiB
GLSL
#version 330
|
|
layout(lines) in;
|
|
layout(line_strip, max_vertices = 119) out;
|
|
|
|
in vec4 color[];
|
|
|
|
in int gl_PrimitiveIDIn[];
|
|
out vec4 fragColor;
|
|
|
|
uniform mat4 mtxMdl;
|
|
uniform mat4 mtxCam;
|
|
uniform vec4 pathColor;
|
|
uniform int gapIndex;
|
|
uniform bool isPickingMode;
|
|
|
|
uniform float cubeScale;
|
|
uniform float controlCubeScale;
|
|
|
|
float cubeInstanceScale = cubeScale;
|
|
vec4 pos;
|
|
|
|
mat4 mtx = mtxCam*mtxMdl;
|
|
|
|
vec3 point = gl_in[0].gl_Position.xyz;
|
|
|
|
vec3 p0 = point;
|
|
vec3 p1 = gl_in[1].gl_Position.xyz;
|
|
|
|
vec4 points[8] = vec4[](
|
|
vec4(-1.0,-1.0,-1.0, 0.0),
|
|
vec4( 1.0,-1.0,-1.0, 0.0),
|
|
vec4(-1.0, 1.0,-1.0, 0.0),
|
|
vec4( 1.0, 1.0,-1.0, 0.0),
|
|
vec4(-1.0,-1.0, 1.0, 0.0),
|
|
vec4( 1.0,-1.0, 1.0, 0.0),
|
|
vec4(-1.0, 1.0, 1.0, 0.0),
|
|
vec4( 1.0, 1.0, 1.0, 0.0)
|
|
);
|
|
|
|
void face(int p1, int p2, int p4, int p3){
|
|
gl_Position = mtx * (pos + points[p1]*cubeInstanceScale); EmitVertex();
|
|
gl_Position = mtx * (pos + points[p2]*cubeInstanceScale); EmitVertex();
|
|
gl_Position = mtx * (pos + points[p3]*cubeInstanceScale); EmitVertex();
|
|
gl_Position = mtx * (pos + points[p4]*cubeInstanceScale); EmitVertex();
|
|
gl_Position = mtx * (pos + points[p1]*cubeInstanceScale); EmitVertex();
|
|
EndPrimitive();
|
|
}
|
|
|
|
void line(int p1, int p2){
|
|
gl_Position = mtx * (pos + points[p1]*cubeInstanceScale); EmitVertex();
|
|
gl_Position = mtx * (pos + points[p2]*cubeInstanceScale); EmitVertex();
|
|
EndPrimitive();
|
|
}
|
|
|
|
void main(){
|
|
if(!isPickingMode){
|
|
//draw Point
|
|
//outline
|
|
fragColor = color[0];
|
|
pos = vec4(point,1);
|
|
face(0,1,2,3);
|
|
face(4,5,6,7);
|
|
line(0,4);
|
|
line(1,5);
|
|
line(2,6);
|
|
line(3,7);
|
|
|
|
cubeInstanceScale = controlCubeScale;
|
|
}
|
|
|
|
//connection line (Point to Point)
|
|
if(gl_PrimitiveIDIn[0]!=gapIndex){
|
|
if(isPickingMode){
|
|
fragColor = pathColor;
|
|
gl_Position = mtx * vec4(p0, 1);
|
|
EmitVertex();
|
|
gl_Position = mtx * vec4(p1, 1);
|
|
EmitVertex();
|
|
}else{
|
|
fragColor = color[0];
|
|
gl_Position = mtx * vec4(p0, 1);
|
|
EmitVertex();
|
|
fragColor = color[1];
|
|
gl_Position = mtx * vec4(p1, 1);
|
|
EmitVertex();
|
|
}
|
|
EndPrimitive();
|
|
}
|
|
} |