Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
- sampler3D tex_;
- float sample(float3 texCoord) {
- float v = tex3D(tex_, texCoord).w;
- return v;
- }
-
- float gradMag_;
- float sizevol = 256.0;
-
- float3 getNormal(float3 coord) {
-
- float dx = 1.0f/sizevol;
- float dy = 1.0f/sizevol;
- float dz = 1.0f/sizevol;
- float vx = sample(coord+float3(dx,0,0));
- float vy = sample(coord+float3(0,dy,0));
- float vz = sample(coord+float3(0,0,dz));
- float vxb = sample(coord-float3(dx,0,0));
- float vyb = sample(coord-float3(0,dy,0));
- float vzb = sample(coord-float3(0,0,dz));
- float3 n = -float3(vx-vxb,vy-vyb,vz-vzb);
- float3 normal;
-
- gradMag_ = length(n);
- if(gradMag_<1e-5) {
- normal = float3(0,0,0);
- } else {
- normal = normalize(n);
- }
-
- return normal;
- }
-
- if(color.a>=0.001) {
- float3 normalVec = getNormal(coord);
- if(dot(normalVec,ray)>0) normalVec*=-1;
-
- float ndotl = dot(normalVec, lightVec);
- float ndoth = dot(normalVec, halfVec);
- float4 light = lit(ndotl, ndoth, shininess);
- color.xyz = saturate(ambient*color.xyz + diffuse*color.xyz*light.y + specular*color.w*float3(1,1,1)*light.z);
-
- compositeColor = saturate((1-compositeColor.w)*color + compositeColor);
- }
-
Рендеринг изоповерхностей с использованием алгоритма рейкастинга