рдмрдЪрдкрди рдореЗрдВ рдХреЗрд▓реАрдбреЛрд╕реНрдХреЛрдк


рдХрднреА-рдХрднреА рджрд░реНрдкрдг рдореЗрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╡рд╕реНрддреБ рд╕реЗ рдЕрдзрд┐рдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реЛрддрд╛ рд╣реИ ...
- рд▓реБрдИрд╕ рдХреИрд░реЛрд▓ (рдПрд▓рд┐рд╕ рдЗрди рдж рд▓реБрдХрд┐рдВрдЧ рдЧреНрд▓рд╛рд╕)

рдХрдо рдЙрдореНрд░ рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрдЬреАрдм рдЦрд┐рд▓реМрдирд╛ рдерд╛ - рдПрдХ рдмрд╣реБрд░реВрдкрджрд░реНрд╢рдХред рдШрдВрдЯреЛрдВ рддрдХ, рдореИрдВрдиреЗ рдЯреВрдЯреЗ рд╣реБрдП рдХрд╛рдВрдЪ рдХреЗ рдмрд╣реБ-рд░рдВрдЧреАрди рдЯреБрдХрдбрд╝реЛрдВ рд╕реЗ рдмрдиреЗ рд╕рд╣реА рдкреИрдЯрд░реНрди рдХреА рдЬрд╛рдВрдЪ рдХреАред рдЗрд╕ рдзреНрдпрд╛рди рдЪрд┐рдВрддрди рдореЗрдВ рдХреБрдЫ рдЕрдЯрдкрдЯрд╛ рдерд╛ред рдЕрдм, рдПрдХ рдкрд┐рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдЕрдкрдиреЗ рдмрдЪреНрдЪреЛрдВ рдХреЛ рдЕрд░рд╛рдЬрдХрддрд╛ рдХреЗ рд╕рд╣реА рдирд┐рд░реНрдорд╛рдг рдХреА рд╕реБрдВрджрд░рддрд╛ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред

рдмрдЪреНрдЪреЗ рдЕрдм рдЖрдзреБрдирд┐рдХ рд╣реИрдВ, рд╕рд╛рдзрд╛рд░рдг рдЦрд┐рд▓реМрдиреЗ рдЙрдирдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдо рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдХрдВрдкреНрдпреВрдЯрд░ рдпрд╛ рдЯреИрдмрд▓реЗрдЯ рджреЗрдВред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдПрдХ рдмрд╣реБрд░реВрдкрджрд░реНрд╢рдХ рдХреЗ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдПрдХ рдбрд┐рдЬрд┐рдЯрд▓ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдФрд░ рд╕рд╛рде рд╣реА рдЕрдкрдиреЗ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреМрд╢рд▓ рдХрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдореИрдВ рдЖрдкрдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдореЗрд░реЗ рд╕рд╛рде рдЖрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред

рдореВрд▓ рд╡рд┐рдЪрд╛рд░ рдПрдХ рдмрд╣реБрд░реВрдкрджрд░реНрд╢рдХ рдХреЗ рдкреВрд░реНрдг рднреМрддрд┐рдХ рдореЙрдбрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдерд╛ред рдЗрд╕ рдЙрдкрдХрд░рдг рдореЗрдВ рдХрдИ рджрд░реНрдкрдг рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рдирд▓реА рдореЗрдВ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдХреЛрдг рдкрд░ рд╕реНрдерд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдореЗрд░реЗ рдмрдЪрдкрди рдХреЗ рдмрд╣реБрд░реВрдкрджрд░реНрд╢рдХ рдореЗрдВ рддреАрди рджрд░реНрдкрдг рд╢рд╛рдорд┐рд▓ рдереЗ, рдФрд░ рдореИрдВрдиреЗ рдЗрд╕ рдбрд┐рдЬрд╛рдЗрди рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рдореЗрд░реЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рдХрд┐рд░рдг рдЕрдиреБрд░реЗрдЦрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдерд╛ред 3 рджрд░реНрдкрдг рд╡рд┐рдорд╛рдиреЛрдВ рдХреЛ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ 120 рдбрд┐рдЧреНрд░реА рдХреЗ рдХреЛрдг рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред



рджрд░реНрдкрдг рдХреЗ рджреВрд░ рдХреЗ рдХрд┐рдирд╛рд░реЗ рд╕реЗ рдкрд░реЗ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд░рдЦрдиреЗ рдФрд░ рдХрд┐рд░рдгреЛрдВ рдХреЗ рдХрдИ рдкреБрди: рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ (рд▓рдЧрднрдЧ 20 рдкреНрд░рддрд┐рдмрд┐рдВрдм) рд╣рдореЗрдВ рдХрд╛рдлреА рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдмрд╣реБрд░реВрдкрджрд░реНрд╢рдХ рдорд┐рд▓рддрд╛ рд╣реИред



рд░реВрдЯрд┐рдВрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╢реЗрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЫрд╡рд┐ рдПрдХ рдмрдирд╛рд╡рдЯ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ, рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЖрд░реЗрдЦрдг рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд░рд▓ рдЖрдХреГрддрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд░реАрдпрд▓рдЯрд╛рдЗрдо рд░реЗрдВрдбрд░рд┐рдВрдЧ рдореЛрдб рдореЗрдВ рдореЗрд░реЗ рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рдкрд░, рдореИрдВ рд▓рдЧрднрдЧ 20-25 рдПрдлрдкреАрдПрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛, рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рддреАрди рд╡рд╕реНрддреБрдУрдВ рдФрд░ рдПрдХ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рд╕рд╛рде рд╣реИ, рдЬреЛ рджреБрдЦрдж рд╣реИред рдореИрдВ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрдХреГрддрд┐рдпреЛрдВ рдХреЗ рдЕрд░рд╛рдЬрдХ рдЖрдВрджреЛрд▓рди, рд╕рд╛рде рд╣реА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреЗ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдФрд░ рднреА рдЕрдзрд┐рдХ рдордВрджреА рд╣реЛрдЧреАред

рдЕрдиреБрдХреВрд▓рди рдХреЗ рдХрдИ рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЗрд╕ рдореЙрдбрд▓ рдХреЛ рдЕрдкреНрд░рдорд╛рдгрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдердЧрд┐рдд рдХрд░ рджрд┐рдпрд╛ред

рдХрдореНрдкреНрдпреВрдЯрд┐рдВрдЧ Shader рдХреЛрдб GLSL
#version 430 core
layout( local_size_x = 32, local_size_y = 32 ) in;
layout(binding = 0, rgba8) uniform image2D IMG;
layout(binding = 1, std430) buffer InSphere {vec4 Shape_obj[];};
layout(binding = 2, std430) buffer InSphere_color {vec4 Sphere_color[];};

uniform vec2 u_InvScreenSize;
uniform float u_ScreenRatio;
uniform vec3 u_LightPosition;
uniform vec3 u_CameraPosition;

//
const vec3 ray00 = vec3(-1*u_ScreenRatio,-1, -1.2);
const vec3 ray01 = vec3(-1*u_ScreenRatio,+1, -1.2);
const vec3 ray10 = vec3(+1*u_ScreenRatio,-1, -1.2);
const vec3 ray11 = vec3(+1*u_ScreenRatio,+1, -1.2);
const ivec2 size = imageSize(IMG);

const mat3 mat_rotate = mat3(-0.5, -0.86602540378443864676372317075294, 0, 0.86602540378443864676372317075294, -0.5, 0, 0, 0, 1);
struct plane {
vec3 v_plane;
vec3 n_plane;
vec3 p_plane;
};

//
plane m[3];
int last_plane;

//----------------------------------------------------------
float ray_intersect_sphere(vec3 orig, vec3 dir, vec4 Shape_obj) {
vec3 l = Shape_obj.xyz - orig;
float tca = dot(l,dir);
float d2 = dot(l,l) - tca * tca;
if (d2 > Shape_obj.w * Shape_obj.w) {return 0;}
float thc = sqrt(Shape_obj.w * Shape_obj.w - d2);
float t0 = tca - thc;
float t1 = tca + thc;
if (t0 < 0) {t0 = t1;}
if (t0 < 0) {return 0;}
return t0;
}
//---------------------------------------------------------
'float ray_intersect_plane(in vec3 orig, in vec3 dir, inout plane p) {
vec3 tested_direction = p.v_plane - orig;
float k = dot(tested_direction, p.v_plane) / dot(dir, p.v_plane);
if (k>=0) {
vec3 p0 = orig + dir * k;
// z
if ((p0.z>-80)&&(p0.z<3)) {
p.p_plane = p0;
return length(p0-orig);
}
}
return 1000000;
}'+
//---------------------------------------------------------
bool all_obj(inout vec3 loc_eye, inout vec3 dir, inout vec3 c) {
float min_len = 1000000;
uint near_id = 0;
float len;
float min_len2 = 1000000;
int near_id2 = -1;
for (int i=0; i<3; i++) {
if (i!=last_plane) {
len = ray_intersect_plane(loc_eye, dir, m[i]);
if (len<min_len2) {
min_len2 = len;
near_id2 = i;
}
}
}

//
if (near_id2>=0) {
loc_eye = m[near_id2].p_plane;
dir = reflect(dir, m[near_id2].n_plane);
last_plane =near_id2;
return true;
}

for (uint i=0; i<Shape_obj.length(); i++) {
len = ray_intersect_sphere(loc_eye, dir, Shape_obj[i]);
if ((len>0)&&(len<min_len)) {
min_len = len;
near_id = i;
}
}
//
if (min_len>=1000000) {return false;}

vec3 hit = loc_eye + dir * min_len;
vec3 Normal = normalize(hit - Shape_obj[near_id].xyz);
vec3 to_light = u_LightPosition - hit;
float to_light_len = length(to_light);
vec3 light_dir = normalize(to_light);
float diffuse_light = max(dot(light_dir, Normal), 0.0);
c = min(c + Sphere_color[near_id].xyz * (diffuse_light*0.8+0.2),1);
return false;
}
//---------------------------------------------------------
void main(void) {
if (gl_GlobalInvocationID.x >= size.x || gl_GlobalInvocationID.y >= size.y) return;
const vec2 pos = gl_GlobalInvocationID.xy * u_InvScreenSize.xy;
vec3 dir = normalize(mix(mix(ray00, ray01, pos.y), mix(ray10, ray11, pos.y), pos.x));
vec3 c = vec3(0, 0, 0);
//
vec3 eye = vec3(u_CameraPosition);

//
m[0].v_plane = vec3(0,-5,0);
m[0].n_plane = vec3(0,1,0);
m[1].v_plane = mat_rotate * m[0].v_plane;
m[1].n_plane = mat_rotate * m[0].n_plane;
m[2].v_plane = mat_rotate * m[1].v_plane;
m[2].n_plane = mat_rotate * m[1].n_plane;

//
for (int i=0; i<20; i++) {
if (!all_obj(eye, dir, c)) {break;}
}

//
imageStore(IMG, ivec2(gl_GlobalInvocationID.xy), vec4(c,1));
}


рдПрдХ рдЕрдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ, рдореИрдВрдиреЗ рдмрд╣реБрд░реВрдкрджрд░реНрд╢рдХ рдкреИрдЯрд░реНрди рдХреА рдЖрд╡рдзрд┐рдХрддрд╛ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдХреЛ рд╣рдореЗрд╢рд╛ рджреЛ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддреАрди рдХреЛрдиреЗ рддреАрди рд░рдВрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рд╣рдо рдмрдлрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рд╕рдорднреБрдЬ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдордмрд╛рд╣реБ рддреНрд░рд┐рднреБрдЬреЛрдВ рдХреЗ рдХреЛрдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рд╕рд╛рде рднрд░рддреЗ рд╣реИрдВред



рдЖрдХреГрддрд┐ рдореЗрдВ, рд░рдВрдЧреЛрдВ рдХреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ: рд╕рдо рдФрд░ рд╡рд┐рд╖рдо рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдПрдХ рд╢рд┐рдлреНрдЯ рдХреЗ рд╕рд╛рде рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдЕрдирд╛рд╡рд╢реНрдпрдХ рддрддреНрд╡реЛрдВ рдХреЛ рдХрд╛рдЯрддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рд╢реАрд░реНрд╖ рд╕реВрдЪрдХрд╛рдВрдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣рдореЗрдВ рдПрдХ рд╖рдЯреНрднреБрдЬ рдорд┐рд▓рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрдХреЗрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рдЗрд╕рдХреЗ рдмрд╛рдж, рд░рдВрдЧреЛрдВ рдХреЛ рдЯреЗрдХреНрд╕рдЪрд░ рд╕реЗ рдмрджрд▓реЗрдВ, рдорд┐рдиреА-рдЯреЗрдХреНрд╕рдЪрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХред



рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░рдВрдЧреЛрдВ рдХреЗ рдЖрдпрддреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдмрдирд╛рд╡рдЯ рдХреЛ рднрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдгред

рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдХреНрд░реАрди рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╖рдЯреНрднреБрдЬ рдмрдврд╝рд╛рдПрдВ, рдФрд░ рдЕрдХреНрд╖реАрдп рдШреБрдорд╛рд╡ рднреА рдЬреЛрдбрд╝реЗрдВред

рдПрдХ рджрд┐рд╢рд╛ рдореЗрдВ рдШреВрдордиреЗ рд╕реЗ рдХреБрдЫ рдорд┐рдирдЯреЛрдВ рдХреЗ рдЪрд┐рдВрддрди рдХреЗ рдмрд╛рдж, рдпрд╣ рд╣рд▓рдЪрд▓ рд╢реБрд░реВ рд╣реЛ рдЧрдИред рдЗрд╕ рдЕрдкреНрд░рд┐рдп рдкреНрд░рднрд╛рд╡ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд░реЛрдЯреЗрд╢рди рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рджрд┐рд╢рд╛ рдореЗрдВ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдмрдирд╛рд╡рдЯ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рддрддреНрд╡реЛрдВ рд╕реЗ рднрд░реА рд╣реБрдИ рдереА, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд░рдВрдЧ рдЫрд╡рд┐рдпреЛрдВ рдпрд╛ рддрд╕реНрд╡реАрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛ред рдкреНрд░рджрд░реНрд╢рди рддрддреНрд╡ рддрд╕реНрд╡реАрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рджрд┐рд╢рд╛ рдореЗрдВ рдПрдХ рд╕реНрд▓рд╛рдЗрдбрд┐рдВрдЧ рд╡рд┐рдВрдбреЛ рдХреЗ рд░реВрдк рдореЗрдВ, рд╕рдордп-рд╕рдордп рдкрд░ рдмрджрд▓рддреА рджрд┐рд╢рд╛ рдореЗрдВ рдЧреБрдЬрд░рддрд╛ рд╣реИред рддреЛ рдкреИрдЯрд░реНрди рдЕрдзрд┐рдХ рд╕рдВрддреГрдкреНрдд рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред

рдкрд░рд┐рдгрд╛рдо рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдЪрд┐рддреНрд░ рд╣реИ







рд╡реАрдбрд┐рдпреЛ
(рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реАрдбрд┐рдпреЛ рдХреИрд╕реЗ рдмрдирд╛рдирд╛ рд╣реИ, рдореИрдВ рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рд▓рд┐рдП рдорд╛рдлреА рдорд╛рдБрдЧрддрд╛ рд╣реВрдБ)










Shader рдХреЛрдб рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рд╕рд░рд▓ рд╣реИред

рдЬреАрдПрд▓рдПрд╕рдПрд▓ рд╢реЗрдбрд░ рдХреЛрдб
 //  #version 330 core layout (location = 0) in vec4 a_Position; uniform mat4 u_MVP; out vec4 v_Color; out vec2 v_TexCoords; void main() { v_TexCoords = a_Position.zw; gl_Position = u_MVP * vec4(a_Position.xy, 0, 1); } //  #version 330 core precision mediump float; varying vec2 v_TexCoords; uniform sampler2D u_Texture; void main(){ gl_FragColor = texture(u_Texture, v_TexCoords); } 


рдмрдЪреНрдЪреЗ рд╕рдВрддреБрд╖реНрдЯ рдереЗ, рдФрд░ рдореИрдВрдиреЗ рдХрдИ рд╢рд╛рдореЛрдВ рддрдХ рдзреНрдпрд╛рди рдореЗрдВ рд▓рдЯрдХрд╛рдпрд╛ред

тЖТ рдбреЗрдореЛ (рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП EXE)

Source: https://habr.com/ru/post/hi461351/


All Articles