Commit 35cada7e authored by Christopher Tenter's avatar Christopher Tenter

add shaders for principal axis node

git-svn-id: http://www.openflipper.org/svnrepo/OpenFlipper/branches/Free@21108 383ad7c9-94d9-4d36-a494-682f7c89f535
parent b18ae33b
#version 130
in vec4 pa_worldTransform0;
in vec4 pa_worldTransform1;
in vec4 pa_worldTransform2;
in float pa_size;
uniform float pa_cone_radius;
uniform float pa_cone_mirror;
uniform vec3 pa_scale;
uniform vec3 pa_offset;
void main()
{
SG_VERTEX_BEGIN;
vec4 pa_posOS = SG_INPUT_POSOS;
pa_posOS.xy *= pa_cone_radius;
pa_posOS.z = pa_posOS.z * pa_cone_radius + 0.85 * pa_size;
pa_posOS.yz *= pa_cone_mirror;
vec4 pa_posWS;
pa_posWS.x = dot(pa_worldTransform0, pa_posOS);
pa_posWS.y = dot(pa_worldTransform1, pa_posOS);
pa_posWS.z = dot(pa_worldTransform2, pa_posOS);
pa_posWS.w = 1.0;
#ifdef SG_INPUT_NORMALOS
vec3 pa_normalOS = SG_INPUT_NORMALOS.xyz;
pa_normalOS.yz *= pa_cone_mirror;
sg_vNormalVS.x = dot(pa_worldTransform0.xyz, pa_normalOS);
sg_vNormalVS.y = dot(pa_worldTransform1.xyz, pa_normalOS);
sg_vNormalVS.z = dot(pa_worldTransform2.xyz, pa_normalOS);
sg_vNormalVS = g_mWVIT * sg_vNormalVS;
sg_vNormalVS = normalize(sg_vNormalVS);
#endif
sg_vPosVS = g_mWV * pa_posWS;
sg_vPosPS = g_mWVP * pa_posWS;
SG_VERTEX_END;
}
\ No newline at end of file
#version 140
#extension GL_EXT_gpu_shader4 : enable
// extension for integer modulo
in vec4 pa_worldTransform0;
in vec4 pa_worldTransform1;
in vec4 pa_worldTransform2;
in float pa_size;
uniform float pa_cone_radius;
uniform vec3 pa_scale;
uniform vec3 pa_offset;
void main()
{
SG_VERTEX_BEGIN;
int pa_component = gl_InstanceID % 3;
vec4 pa_posOS = SG_INPUT_POSOS;
pa_posOS.xy *= pa_cone_radius;
pa_posOS.z = pa_posOS.z * pa_scale[pa_component] + pa_offset[pa_component];
pa_posOS.z *= pa_size;
vec4 pa_posWS;
pa_posWS.x = dot(pa_worldTransform0, pa_posOS);
pa_posWS.y = dot(pa_worldTransform1, pa_posOS);
pa_posWS.z = dot(pa_worldTransform2, pa_posOS);
pa_posWS.w = 1.0;
#ifdef SG_INPUT_NORMALOS
sg_vNormalVS.x = dot(pa_worldTransform0.xyz, SG_INPUT_NORMALOS.xyz);
sg_vNormalVS.y = dot(pa_worldTransform1.xyz, SG_INPUT_NORMALOS.xyz);
sg_vNormalVS.z = dot(pa_worldTransform2.xyz, SG_INPUT_NORMALOS.xyz);
sg_vNormalVS = g_mWVIT * sg_vNormalVS;
sg_vNormalVS = normalize(sg_vNormalVS);
#endif
sg_vPosVS = g_mWV * pa_posWS;
sg_vPosPS = g_mWVP * pa_posWS;
SG_VERTEX_END;
}
\ No newline at end of file
#version 140
#extension GL_EXT_gpu_shader4 : enable
// extension for integer modulo
in float pa_xOffset;
in vec4 pa_worldTransform0;
in vec4 pa_worldTransform1;
in vec4 pa_worldTransform2;
in float pa_size;
uniform float pa_lineWidth;
uniform vec2 pa_screenSize;
uniform vec3 pa_scale;
uniform vec3 pa_offset;
void main()
{
SG_VERTEX_BEGIN;
int pa_component = gl_InstanceID % 3;
// positions of the line end-points
vec4 pa_posOS[2];
pa_posOS[0] = SG_INPUT_POSOS;
pa_posOS[1] = SG_INPUT_POSOS;
pa_posOS[1].z = 1.0 - pa_posOS[1].z;
// apply scale + translation if visualized in both directions
pa_posOS[0].z = pa_posOS[0].z * pa_scale[pa_component] + pa_offset[pa_component];
pa_posOS[1].z = pa_posOS[1].z * pa_scale[pa_component] + pa_offset[pa_component];
pa_posOS[0].z *= pa_size;
pa_posOS[1].z *= pa_size;
// transform to world space
vec4 pa_posWS[2];
for (int i = 0; i < 2; ++i)
{
pa_posWS[i].x = dot(pa_worldTransform0, pa_posOS[i]);
pa_posWS[i].y = dot(pa_worldTransform1, pa_posOS[i]);
pa_posWS[i].z = dot(pa_worldTransform2, pa_posOS[i]);
pa_posWS[i].w = 1.0;
}
// transform to clip space
vec4 pa_posCS[2];
pa_posCS[0] = g_mWVP * pa_posWS[0];
pa_posCS[1] = g_mWVP * pa_posWS[1];
// quad extrusion
// convert to screen space
vec2 pa_posSS[2];
pa_posSS[0].xy = pa_posCS[0].xy / pa_posCS[0].w * pa_screenSize;
pa_posSS[1].xy = pa_posCS[1].xy / pa_posCS[1].w * pa_screenSize;
// compute dir and normal
vec2 pa_lineDir = pa_posSS[1].xy - pa_posSS[0].xy;
vec2 pa_lineNormal = normalize(vec2(-pa_lineDir.y, pa_lineDir.x));
// offsetting
vec2 pa_offset = pa_lineNormal * (pa_lineWidth * pa_xOffset);
sg_vPosPS = vec4( (pa_posSS[0].xy + pa_offset) * pa_posCS[0].w / pa_screenSize, pa_posCS[0].z, pa_posCS[0].w);
SG_VERTEX_END;
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment