// اختبار انعكاس الأشعة على السطح المنحني
// انقر واسحب على نقاط التحكم لتغيير السطح
// يتحكم المقبض العلوي الأيسر في "انتشار" الضوء المنبعث
// الإعدادات الأخرى موجودة في علامة التبويب "المشتركة".

vec2 GetCurvePos(int i) {
 إرجاع النسيج (iChannel0، vec2(float(i)/float(line\_points-1),(0.5)/iResolution.y)).xy;
}

vec2 GetCtrlPos(int i) {
 إرجاع الملمس(iChannel0, vec2((float(i)+0.5)/float(iResolution.x),(1.5)/iResolution.y)).xy;
}

vec4 GetValue(int idx) {
 إرجاع الملمس(iChannel0, vec2((float(idx)+0.5)/float(iResolution.x),(5.5)/iResolution.y));
}

vec4 GetUIValue(int idx) {
 إرجاع الملمس(iChannel0, vec2((float(idx)+0.5)/float(iResolution.x),(1.5)/iResolution.y));
}

vec4 CurveAABB;
vec3 CurveBounds;
باطلة FindCurveBounds () {
 CurveAABB=vec4(10000,10000,-10000,-10000);
 ل(int i=0; i0) {
 vec2 cp=vec2(0);
 إذا (lineIntersection(Start, End, pos, prev, cp)) {
 float ls=lengthSquared(Start, cp);
 إذا (ليرة سورية <mindist) {
 الدقة = صحيح؛
 inter=i;
 ع = حزب المحافظين؛
 t=pos-prev;
 Mindist=ls;
 }
 }
 }
 prev=pos;
 }
 إذا (الدقة) {
 vec2 p0 = GetCurvePos(inter-2);
 vec2 p1 = GetCurvePos(inter-1);
 vec2 p2 = GetCurvePos(inter);
 vec2 p4 = GetCurvePos(inter+1);
 vec2 t1 = (p2-p0);
 vec2 t2 = (p4-p1);
 float perc = NearestPercentSegment(p, p1, p2);
 
 t = mix(t1,t2,perc);
 }
 دقة العودة؛
}

الصورة الرئيسية باطلة (خارج vec4 fragColor، في vec2 fragCoord)
{
 vec2 uv = (fragCoord.xy-iResolution.xy\*0.5) / iResolution.y;
 
 vec3 اللون = vec3(0);
 
 اللون = الملمس(iChannel0, fragCoord.xy/iResolution.xy).xyz;
 if(fragCoord.y<2.0) color=vec3(0);
 
 // تعيين النغمات
 color = Smoothstep(0.,1.,color);
 اللون = الأسرى (اللون، vec3 (0.4545))؛
 
 vec2 rayp0 = GetCtrlPos(ctrl\_points);
 vec2 rayp1 = GetCtrlPos(ctrl\_points+1);
 vec2 rayp2 = GetCtrlPos(ctrl\_points+2);
 vec2 raymid = (rayp0+rayp1)\*0.5;

 إذا (رسم واجهة المستخدم) {
 /\*
 FindCurveBounds();
 vec2 diffbound=abs(uv-CurveBounds.xy)-(CurveAABB.zw-CurveAABB.xy)\*0.5;
 color += vec3(0.5,0,0.5)\*smoothstep(0.005,0.002,abs(max(diffbound.x, diffbound.y)));
 color += vec3(0.5,0.5,0.0)\*smoothstep(0.005,0.002,abs(length(uv-CurveBounds.xy)-CurveBounds.z));
 \*/
 

 color += vec3(0.5)\*smoothstep(0.01,0.,distanceToSegment(uv, rayp0, rayp1));
 color += vec3(0.5)\*smoothstep(0.01,0.,distanceToSegment(uv, ButtonSpread, rayp2));

 vec2 mousePos = (iMouse.xy-iResolution.xy\*0.5) / iResolution.y;
 vec2 mousePosClick = (iMouse.zw-iResolution.xy\*0.5) / iResolution.y;

 // منحنى كامل
 vec2 prev=vec2(0);
 منحنى تعويم بالقرب من = 10000.0؛
 ل(int i=0; i0) {
 curvenear=min(curvenear, distanceToSegmentSquared(uv, prev, pos));
 }
 //color += vec3(1,0,0)\*smoothstep(0.01,0.009,length(uv-pos));
 prev=pos;
 }
 color += vec3(.7)\*smoothstep(0.005,0.003,sqrt(curvenear));

 // نقاط المراقبة
 السابق=vec2(0);
 تعويم ctrlnear=10000.0;
 حجم تعويم = 0.015؛
 ل(int i=0; i0) {
 ctrlnear=min(ctrlnear, distanceToSegmentSquared(uv, prev, pos));
 }
 ctrlnear=min(ctrlnear, max(abs(dot(uv-pos,uv-pos)-psize\*psize\*2.)-psize\*psize\*0.1,0.));
 prev=pos;
 }
 
 
 int mousePoint = int(GetValue(1).x);
 تعويم أقرب ماوس = 100.0 ؛
 vec2 nearmousepoint=vec2(0);
 for(int i=0; i < ctrl\_points + ButtonNumber; ++i) {
 vec2 pos = GetCtrlPos(i);
 ctrlnear=min(ctrlnear, max(abs(dot(uv-pos,uv-pos)-psize\*psize\*2.)-psize\*psize\*0.1,0.));
 float distmouse=length(mousePos-pos);
 إذا (i == mousePoint) {
 this.nextmouseist=distmouse;
 nearmousepoint=pos;
 }
 prev=pos;
 }
 
 ctrlnear=sqrt(ctrlnear);
 
 float bdist=length(ButtonSpread-uv);
 //ctrlnear=min(ctrlnear,3.\* min(abs(bdist-.01), abs(bdist-length(rayp2-ButtonSpread))));
 ctrlnear=min(ctrlnear,3.\* abs(bdist-.01));
 
 color += vec3(0.6)\*smoothstep(psize,psize\*0.2,ctrlnear);
 إذا (mousePoint>=0) {
 color += vec3(0.5)\*smoothstep(psize,psize\*0.9,length(uv-nearmousepoint));
 }
 }
 
 إذا (رسم تيست راي) {
 
 vec2 rayaxe = (rayp1-rayp0);
 vec2 rayaxen = Normalize(rayaxe);
 vec2 raynorm = vec2(-rayaxen.y, rayaxen.x);
 float rayrealspread = length(rayp2-ButtonSpread);
 
 vec2 raystart = raymid - rayaxen\*0.0;
 vec2 raydir = Normalize(raynorm + rayaxen \* (rayrealspread\*(sin(iTime)\*0.5)));
 تعويم maxraydir=10.0f;

 for(int i=0; i<maxReflect; ++i) {

 vec2 ص؛
 vec2 ر؛
 إذا (!curveIntersection(raystart, raystart + raydir\*maxraydir, p, t))
 {
 color += vec3(0,1,0) \* Smoothstep(0.005,0.002,distanceToSegment(uv, raystart, raystart + raydir\*maxraydir));
 استراحة؛

 }

 vec2 n=normalize(vec2(t.y, -t.x));

 color += vec3(0,1,0) \* Smoothstep(0.005,0.002,distanceToSegment(uv, raystart, p));
 إذا (الطول (ع - الأشعة فوق البنفسجية) <0.02)
 {
 اللون = vec3(0,0,1);
 }

 color += vec3(0,1,1) \* Smoothstep(0.005,0.002,distanceToSegment(uv, p, p+n\*0.1));
 raystart=p-raydir\*0.01;

 raydir=reflect(raydir, n);

 }
 }
 
 float h=fragCoord.x/iResolution.x;
 //if(fragCoord.y<100.0) color=max(vec3(1.-h\*2.,1.-abs(h-.5)\*2.,h\*2.-1.), 0.);
 
 fragColor = vec4(color, 1.0);
}
{"evolved_from": null, "kind": "human", "source": "ewof/sharegpt-instruct-unfiltered-deduped"}