Я работаю со SceneKit, и у меня есть проблема: Когда я делаю два куба, один внутри другого, один из которых имеет полупрозрачную текстуру, куб внутри не рисуется.
Как это должно быть (сцена создана в XCode)
Как на самом деле (сделал несколько пикселей с альфой 0, чтобы понять, что нужно видеть)
Редактировать: Нашел проблему, связанную с блендером, но очень похожую на мою Ссылка
Блоки @ZAY с текстурой создаются из элементов пользовательской геометрии 'SCNGeometry *geometry = [SCNGeometrymetryгеометрияWithSources:@[vertexSource, normalSource, uvSource]: @[indicesElement]];' красные линии по краям куба — стандартное поле с модифицированным шейдером для отрисовки только по краям Конфигурация сцены '_sceneView.scene = scene; _sceneView.antialiasingMode = SCCNAntialiasingModeNone; _sceneView.autoenablesDefaultLighting = ДА; _sceneView.allowsCameraControl = ДА; _sceneView.contentMode = UIViewContentModeScaleAspectFit;'
это может быть шейдерная программа (SCNProgram), которую вы используете, потому что она заменит все шейдеры, поставляемые с scenekit. Если вы хотите что-то вроде первого примера изображения, вы сможете сделать это с помощью стандартных шейдеров из scenekit. Попробуйте создать разные материалы для двух кубов, настройте их модели освещения и придайте внешнему кубу прозрачность 0,3 или 0,4.
Я наконец нашел причину. Все зависит от того, в каком порядке добавляются кубики. если сначала добавить маленькую, то все будет работать, если большую - то маленькую не будет видно. Самая большая проблема в том, что приложение представляет собой 3D-редактор, и порядок элементов задается пользователем. Я постараюсь найти решение.
Для тех, кто столкнется с той же проблемой, что и я: она решена, но не полностью.
Решение заключается в расчете порядка рендеринга в зависимости от размера в геометрии. Результат не стабильный, но лучше, чем ничего.
cubeDict[@"render_order"] = @((sizeX + inflateDouble) + (sizeY + inflateDouble) + (sizeZ + inflateDouble));
Можете ли вы показать нам свой код для настройки сцены и кубов?