C++ (Qt)float AdjustAlpha( float a, float t1 = 0.8f, float t2 = 0.9f ){ if (a <= t1) return a; if (a >= t2) return 1.0f; a = (a - t1) / (t2 - t1); return t1 + (3 * a * a - 2 * a * a * a) * (1 - t1); // сглаживаем переход}
C++ (Qt)// рекурсивная ф-ция, возвращает true если результат уже достигнутbool Trace( const Node * node, const Point & minP, // min угол куба const Point & maxP, // max угол куба Point ray[2] ) // 2 точки луча в кубе { if (node->IsLeaf()) { // у нода нет чилдренов ... // накапливаем альфу return false; // или true если альфы хватает (вряд ли) } Node * child; Point minP2, maxP2, ray2[2]; if (node->IntersChild0(&child, minP, maxP, &maxP2, ray, ray2)) // луч пересекается с первым чайлдом if (Trace(child, minP, maxP2, ray2)) return true; if (node->IntersChild1(&child, minP, maxP, &minP2, ray, ray2)) // луч пересекается со вторым if (Trace(child, minP2, maxP, ray2)) return true; return false;}