Цезий: Пользовательский материал на прямоугольном объекте

Я пытаюсь добавить объект, который имеет несколько различных свойств, таких как материал (в основном альфа) и вращение. RectangleGraphics имеет вращение и работает, когда я устанавливаю материал для представления текстуры.

viewer.entities.add({ 
  name: 'Site Layer', 
  rectangle: { 
    coordinates: rectangle, 
    material: 'Image.jpg', 
    rotation: Cesium.Math.toRadians(13)     
  }
});

Однако, когда я попытался реализовать прозрачность с помощью пользовательского Материала (используя https://github.com/AnalyticalGraphicsInc/cesium/issues/2484) отображается как белая текстура вместо желаемого результата... что-то вроде:

material = new Cesium.Material({
    fabric : {
        type : 'Color',
            uniforms : {
                image : 'Image.jpg',
                alpha : 0.5
            }
             components : {
                 diffuse : 'texture2D(image, materialInput.st).rgb',
                 alpha : 'texture2D(image, materialInput.st).a * alpha'
            }
        }
    }
);
viewer.entities.add({ 
  rectangle: { 
    coordinates: rectangle, 
    material: material,
    rotation: Cesium.Math.toRadians(13)     
  }
});

Читая документы, материал в прямоугольнике кажется Cesium.MaterialProperty, а не Cesium.Material... значит ли это, что я не могу просто назначить материал прямоугольнику? А если нет, могу ли я каким-то образом обернуть материал внутри пользовательского свойства материала, чтобы он работал?

И для любопытства, в чем функциональная разница между Material и MaterialProperty?

p.s. У меня GroundPrimitive не работает, потому что один из основных браузеров, которые мне нужно поддерживать (Safari), сообщает GroundPrimitives.isSupported = false

Также опубликовано здесь https://groups.google.com/forum/#!topic/cesium-dev/1IPjHD7G_NA


person zai chang    schedule 30.11.2015    source источник


Ответы (1)


Ханна ответила на это на форуме. Я скопирую ее ответ здесь ниже, но сначала добавлю свои заметки о том, почему MaterialProperty отличается от Material.

Версия Property, как и все Cesium Entity Properties, предназначена для описать, как определение чего-либо меняется со временем, когда цезий оживляет. Например, MaterialProperty может обозначать сплошной цвет в течение одного временного интервала и полосатый материал в течение отдельного временного интервала. Фактический базовый Material может быть уничтожен, и в результате этого во время анимации будет создана замена.

В вашем случае, если вам действительно нужен специально созданный Материал, лучшим вариантом в настоящее время является отказ от Entity API и его динамических свойств во времени, а просто использование графического примитива с классом Material напрямую. Но, как отмечает Ханна, вам не нужно это для простого альфа-смешивания изображений. Ханна пишет:


Это должно быть исправлено в следующем выпуске (1.16). Вы можете использовать этот код для создания полупрозрачного изображения:

var viewer = new Cesium.Viewer('cesiumContainer');
viewer.entities.add({
    rectangle: {
        coordinates: Cesium.Rectangle.fromDegrees(-125,30,-110,40),
        material: new Cesium.ImageMaterialProperty({
            image: '../images/Cesium_Logo_Color.jpg',
            alpha: 0.5
        }),
    }
});
person emackey    schedule 04.12.2015
comment
Спасибо за объяснение свойств. Для повернутого изображения с альфой это работает, хотя в долгосрочной перспективе я также хочу добавить к нему карту рельефа, поэтому я попробовал собственный примитив, но, похоже, он не работает с различными CallbackProperty, к которым я присоединялся. значения ползунка. Думаю, это единственное, чего я хочу от системы Entity. Я попытался реализовать пользовательское свойство MaterialProperty, как в этом примере: groups.google.com /forum/#!topic/cesium-dev/L05gq_SZ4uI, но я не вижу, чтобы Материал возвращался в течение заданного времени. - person zai chang; 12.12.2015