Update shader
This commit is contained in:
parent
75b76fc236
commit
b2a0901369
@ -3,14 +3,46 @@ varying vec4 color;
|
||||
varying vec3 position;
|
||||
|
||||
uniform vec4 lineParams;
|
||||
uniform vec4 startPointEndPoint;
|
||||
|
||||
void main()
|
||||
{
|
||||
float a = lineParams.x;
|
||||
float b = lineParams.y;
|
||||
float c = lineParams.z;
|
||||
|
||||
float distance = abs(a*position.x + b*position.y + c);
|
||||
|
||||
gl_FragColor = vec4(color.rgb, color.a*clamp(1.2 / (distance + 1.0) - 0.5, 0.0, 1.0));
|
||||
float Xa = startPointEndPoint.r;
|
||||
float Ya = startPointEndPoint.g;
|
||||
|
||||
float Xb = startPointEndPoint.b;
|
||||
float Yb = startPointEndPoint.a;
|
||||
|
||||
|
||||
|
||||
float distance;
|
||||
|
||||
|
||||
float distanceToA = (Xa - position.x)*(Xb - Xa) + (Ya - position.y)*(Yb - Ya);
|
||||
|
||||
float distanceToB = (Xb - position.x)*(Xb - Xa) + (Yb - position.y)*(Yb - Ya);
|
||||
|
||||
|
||||
|
||||
if (distanceToA * distanceToB > 0)
|
||||
{
|
||||
float len = sqrt((Xb - Xa)*(Xb - Xa) + (Yb - Ya)*(Yb - Ya));
|
||||
distance = max(abs(distanceToA/len), abs(distanceToB/len));
|
||||
}
|
||||
else
|
||||
{
|
||||
distance = abs(a*position.x + b*position.y + c);
|
||||
}
|
||||
|
||||
|
||||
float t = clamp(1.2 / (distance + 1.0) - 0.5, 0.0, 1.0);
|
||||
|
||||
|
||||
gl_FragColor = vec4(color.rgb, color.a*t);
|
||||
|
||||
//gl_FragColor = vec4(color.rgb*clamp(1.2 / (distance + 1.0) - 0.5, 0.0, 1.0), 1.0);
|
||||
}
|
@ -42,5 +42,6 @@ void main()
|
||||
distance = min(distance, abs(lineParams15.x*position.x + lineParams15.y*position.y + lineParams15.z));
|
||||
|
||||
|
||||
gl_FragColor = vec4(color.rgb, color.a*clamp(1.2 / (distance + 1.0) - 0.5, 0.0, 1.0));
|
||||
//gl_FragColor = vec4(color.rgb, color.a*clamp(1.2 / (distance + 1.0) - 0.5, 0.0, 1.0));
|
||||
gl_FragColor = vec4(color.rgb*clamp(1.2 / (distance + 1.0) - 0.5, 0.0, 1.0), 1.0);
|
||||
}
|
@ -11,7 +11,11 @@
|
||||
|
||||
TMyApplication* Application;
|
||||
|
||||
#define USE_SHADER_X16
|
||||
//static const float BUFFER_DISTANCE = 30.f;
|
||||
static const float BUFFER_DISTANCE = 50.f;
|
||||
|
||||
|
||||
//#define USE_SHADER_X16
|
||||
|
||||
|
||||
#ifdef USE_SHADER_X16
|
||||
@ -19,6 +23,8 @@ TMyApplication* Application;
|
||||
|
||||
std::vector<TRenderPair> linesToRenderBoxesX16(const std::vector<std::pair<Vector2f, Vector2f>>& lineArr)
|
||||
{
|
||||
|
||||
|
||||
std::vector<TRenderPair> lineRenderPairArr;
|
||||
|
||||
size_t boxCount = lineArr.size() / 16;
|
||||
@ -53,12 +59,12 @@ std::vector<TRenderPair> linesToRenderBoxesX16(const std::vector<std::pair<Vecto
|
||||
|
||||
|
||||
|
||||
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(startPoint(0), startPoint(1), 0));
|
||||
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(startPoint(0), endPoint(1), 0));
|
||||
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(endPoint(0), endPoint(1), 0));
|
||||
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(startPoint(0), startPoint(1), 0));
|
||||
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(endPoint(0), endPoint(1), 0));
|
||||
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(endPoint(0), startPoint(1), 0));
|
||||
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(startPoint(0)- BUFFER_DISTANCE, startPoint(1) - BUFFER_DISTANCE, 0));
|
||||
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(startPoint(0) - BUFFER_DISTANCE, endPoint(1)+ BUFFER_DISTANCE, 0));
|
||||
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(endPoint(0) + BUFFER_DISTANCE, endPoint(1) + BUFFER_DISTANCE, 0));
|
||||
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(startPoint(0) - BUFFER_DISTANCE, startPoint(1) - BUFFER_DISTANCE, 0));
|
||||
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(endPoint(0) + BUFFER_DISTANCE, endPoint(1) + BUFFER_DISTANCE, 0));
|
||||
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(endPoint(0) + BUFFER_DISTANCE, startPoint(1) - BUFFER_DISTANCE, 0));
|
||||
|
||||
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(1, 0, 0, 1));
|
||||
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(1, 0, 0, 1));
|
||||
@ -111,13 +117,32 @@ std::vector<TRenderPair> linesToRenderBoxes(const std::vector<std::pair<Vector2f
|
||||
|
||||
auto& pair = lineRenderPairArr[i];
|
||||
|
||||
Vector2f renderAreaStart{ std::min<float>(startPoint(0), endPoint(0)) - BUFFER_DISTANCE, std::min<float>(startPoint(1), endPoint(1)) - BUFFER_DISTANCE };
|
||||
|
||||
Vector2f renderAreEnd{ std::max<float>(startPoint(0), endPoint(0)) + BUFFER_DISTANCE, std::max<float>(startPoint(1), endPoint(1)) + BUFFER_DISTANCE };
|
||||
|
||||
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(renderAreaStart(0), renderAreaStart(1), 0));
|
||||
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(renderAreaStart(0), renderAreEnd(1), 0));
|
||||
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(renderAreEnd(0), renderAreEnd(1), 0));
|
||||
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(renderAreaStart(0), renderAreaStart(1), 0));
|
||||
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(renderAreEnd(0), renderAreEnd(1), 0));
|
||||
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(renderAreEnd(0), renderAreaStart(1), 0));
|
||||
|
||||
|
||||
/*
|
||||
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(startPoint(0), startPoint(1), 0));
|
||||
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(startPoint(0), endPoint(1), 0));
|
||||
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(endPoint(0), endPoint(1), 0));
|
||||
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(startPoint(0), startPoint(1), 0));
|
||||
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(endPoint(0), endPoint(1), 0));
|
||||
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(endPoint(0), startPoint(1), 0));
|
||||
*/
|
||||
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(1, 0, 0, 1));
|
||||
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(1, 0, 0, 1));
|
||||
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(1, 0, 0, 1));
|
||||
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(1, 0, 0, 1));
|
||||
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(1, 0, 0, 1));
|
||||
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(1, 0, 0, 1));
|
||||
|
||||
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(1, 0, 0, 1));
|
||||
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(1, 0, 0, 1));
|
||||
@ -138,10 +163,14 @@ std::vector<TRenderPair> linesToRenderBoxes(const std::vector<std::pair<Vector2f
|
||||
float c = -(lineNormVec(0)*startPoint(0) + lineNormVec(1)*startPoint(1));
|
||||
|
||||
pair.first.Vec4Map["lineParams"] = Vector4f(a, b, c, 0);
|
||||
pair.first.Vec4Map["startPointEndPoint"] = Vector4f(startPoint(0), startPoint(1), endPoint(0), endPoint(1));
|
||||
|
||||
pair.second.RefreshBuffer();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
return lineRenderPairArr;
|
||||
}
|
||||
|
||||
@ -193,9 +222,9 @@ void TMyApplication::InnerInit()
|
||||
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
lineArr.push_back({ {10.f + i * 20.f, 10.f}, { 20.f + i * 20.f, 400.f } });
|
||||
lineArr.push_back({ {50.f + i * 20.f, 50.f}, { 60.f + i * 20.f, 440.f } });
|
||||
|
||||
lineArr.push_back({ { 20.f + i * 20.f, 400.f },{ 30.f + i * 20.f, 10.f } });
|
||||
lineArr.push_back({ { 60.f + i * 20.f, 440.f },{ 70.f + i * 20.f, 50.f } });
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user