Skip to content

Instantly share code, notes, and snippets.

@dnevera
Created June 3, 2018 08:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dnevera/30bffcbfe182a43981058db252437e49 to your computer and use it in GitHub Desktop.
Save dnevera/30bffcbfe182a43981058db252437e49 to your computer and use it in GitHub Desktop.
/// Программируем рендеринг материала в GPU на Metal
let program:SCNProgram = {
let p = SCNProgram()
p.vertexFunctionName = "projectionVertex"
p.fragmentFunctionName = "materialFragment"
p.isOpaque = false;
return p
}()
/// Создаем материал который будем рендерить в шейдерах Metal
lazy var material:SCNMaterial = {
let m = SCNMaterial()
if self.renderCube {
m.program = self.program
}
return m
}()
///
/// Задаем геометрию "монолитного" RGB-куба
///
lazy var meshGeometry:SCNGeometry = {
///
/// В качестве исходной фигуры можно было бы задать объект кубической формы.
/// Но он содержит по умолчанию всего 8 сегментов, что мало для визуально-различимого
/// рендеринга "дефектов" LUT. Для этого нам придется "накидать" на каждую сторону побольше разрешения:
///
/// let g = SCNBox(width: 2, height: 2, length: 2, chamferRadius: 0)
/// let segments = 64
/// g.widthSegmentCount = segments
/// g.heightSegmentCount = segments
/// g.lengthSegmentCount = segments
///
/// Но мы выбираем сферу как более детализорованно-собранный mesh с более простой формой настройки:)
/// А деформировать нам по сути все равно какой объект.
///
let g = SCNSphere(radius: 2);
/// Повышаем детализацию "монолита"
g.segmentCount = 128
///
/// Определяем материал геометрии, который будем рендерить и заодно деформировать в программе на MSL
///
g.materials = [self.material]
return g
}()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment