201 lines
6.0 KiB
JavaScript
201 lines
6.0 KiB
JavaScript
defineSuite([
|
|
'Scene/EllipsoidPrimitive',
|
|
'Core/Cartesian3',
|
|
'Core/defined',
|
|
'Core/Matrix4',
|
|
'Scene/Material',
|
|
'Specs/createScene'
|
|
], function(
|
|
EllipsoidPrimitive,
|
|
Cartesian3,
|
|
defined,
|
|
Matrix4,
|
|
Material,
|
|
createScene) {
|
|
'use strict';
|
|
|
|
var scene;
|
|
var ellipsoid;
|
|
|
|
beforeAll(function() {
|
|
scene = createScene();
|
|
scene.primitives.destroyPrimitives = false;
|
|
scene.frameState.scene3DOnly = false;
|
|
});
|
|
|
|
afterAll(function() {
|
|
scene.destroyForSpecs();
|
|
});
|
|
|
|
beforeEach(function() {
|
|
ellipsoid = new EllipsoidPrimitive();
|
|
var offset = new Cartesian3(1.02, 0.0, 0.0);
|
|
scene.camera.lookAtTransform(Matrix4.IDENTITY, offset);
|
|
});
|
|
|
|
afterEach(function() {
|
|
scene.primitives.removeAll();
|
|
if (defined(ellipsoid) && !ellipsoid.isDestroyed()) {
|
|
ellipsoid = ellipsoid.destroy();
|
|
}
|
|
});
|
|
|
|
it('gets the default properties', function() {
|
|
expect(ellipsoid.show).toEqual(true);
|
|
expect(ellipsoid.center).toEqual(Cartesian3.ZERO);
|
|
expect(ellipsoid.radii).toBeUndefined();
|
|
expect(ellipsoid.modelMatrix).toEqual(Matrix4.IDENTITY);
|
|
expect(ellipsoid.material.type).toEqual(Material.ColorType);
|
|
expect(ellipsoid.debugShowBoundingVolume).toEqual(false);
|
|
});
|
|
|
|
it('Constructs with options', function() {
|
|
var material = Material.fromType(Material.StripeType);
|
|
var e = new EllipsoidPrimitive({
|
|
center : new Cartesian3(1.0, 2.0, 3.0),
|
|
radii : new Cartesian3(4.0, 5.0, 6.0),
|
|
modelMatrix : Matrix4.fromUniformScale(2.0),
|
|
show : false,
|
|
material : material,
|
|
id : 'id',
|
|
debugShowBoundingVolume : true
|
|
});
|
|
|
|
expect(e.center).toEqual(new Cartesian3(1.0, 2.0, 3.0));
|
|
expect(e.radii).toEqual(new Cartesian3(4.0, 5.0, 6.0));
|
|
expect(e.modelMatrix).toEqual(Matrix4.fromUniformScale(2.0));
|
|
expect(e.show).toEqual(false);
|
|
expect(e.material).toBe(material);
|
|
expect(e.id).toEqual('id');
|
|
expect(e.debugShowBoundingVolume).toEqual(true);
|
|
|
|
e.destroy();
|
|
});
|
|
|
|
it('renders with the default material', function() {
|
|
ellipsoid.radii = new Cartesian3(1.0, 1.0, 1.0);
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(ellipsoid);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('renders with a custom modelMatrix', function() {
|
|
ellipsoid.radii = new Cartesian3(0.1, 0.1, 0.1);
|
|
ellipsoid.modelMatrix = Matrix4.fromScale(new Cartesian3(10.0, 10.0, 10.0));
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(ellipsoid);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('renders two with a vertex array cache hit', function() {
|
|
ellipsoid.radii = new Cartesian3(1.0, 1.0, 1.0);
|
|
var ellipsoid2 = new EllipsoidPrimitive();
|
|
ellipsoid2.radii = new Cartesian3(1.0, 1.0, 1.0);
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(ellipsoid);
|
|
var result;
|
|
expect(scene).toRenderAndCall(function(rgba) {
|
|
result = rgba;
|
|
expect(rgba).not.toEqual([0, 0, 0, 255]);
|
|
});
|
|
|
|
expect(scene).toRender(result);
|
|
|
|
scene.primitives.add(ellipsoid2);
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
expect(scene).notToRender(result);
|
|
|
|
ellipsoid2.destroy();
|
|
});
|
|
|
|
it('renders bounding volume with debugShowBoundingVolume', function() {
|
|
var scene = createScene();
|
|
scene.primitives.add(new EllipsoidPrimitive({
|
|
radii : new Cartesian3(1.0, 1.0, 1.0),
|
|
debugShowBoundingVolume : true
|
|
}));
|
|
|
|
var camera = scene.camera;
|
|
camera.position = new Cartesian3(1.02, 0.0, 0.0);
|
|
camera.direction = Cartesian3.negate(Cartesian3.UNIT_X, new Cartesian3());
|
|
camera.up = Cartesian3.clone(Cartesian3.UNIT_Z);
|
|
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
scene.destroyForSpecs();
|
|
});
|
|
|
|
it('does not render when show is false', function() {
|
|
ellipsoid.radii = new Cartesian3(1.0, 1.0, 1.0);
|
|
ellipsoid.show = false;
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('does not render without radii', function() {
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('does not render when not in view due to center', function() {
|
|
ellipsoid.radii = new Cartesian3(1.0, 1.0, 1.0);
|
|
ellipsoid.center = new Cartesian3(10.0, 0.0, 0.0);
|
|
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
|
|
scene.primitives.add(ellipsoid);
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
});
|
|
|
|
it('is picked', function() {
|
|
ellipsoid.radii = new Cartesian3(1.0, 1.0, 1.0);
|
|
ellipsoid.id = 'id';
|
|
|
|
scene.primitives.add(ellipsoid);
|
|
|
|
expect(scene).toPickAndCall(function(result) {
|
|
expect(result.primitive).toEqual(ellipsoid);
|
|
expect(result.id).toEqual('id');
|
|
});
|
|
});
|
|
|
|
it('is not picked (show === false)', function() {
|
|
ellipsoid.radii = new Cartesian3(1.0, 1.0, 1.0);
|
|
ellipsoid.show = false;
|
|
|
|
scene.primitives.add(ellipsoid);
|
|
|
|
expect(scene).notToPick();
|
|
});
|
|
|
|
it('is not picked (alpha === 0.0)', function() {
|
|
ellipsoid.radii = new Cartesian3(1.0, 1.0, 1.0);
|
|
ellipsoid.material.uniforms.color.alpha = 0.0;
|
|
|
|
scene.primitives.add(ellipsoid);
|
|
|
|
expect(scene).notToPick();
|
|
});
|
|
|
|
it('isDestroyed', function() {
|
|
expect(ellipsoid.isDestroyed()).toEqual(false);
|
|
ellipsoid.destroy();
|
|
expect(ellipsoid.isDestroyed()).toEqual(true);
|
|
});
|
|
|
|
it('throws when rendered without a material', function() {
|
|
ellipsoid.radii = new Cartesian3(1.0, 1.0, 1.0);
|
|
ellipsoid.material = undefined;
|
|
|
|
scene.primitives.add(ellipsoid);
|
|
|
|
expect(function() {
|
|
scene.renderForSpecs();
|
|
}).toThrowDeveloperError();
|
|
});
|
|
}, 'WebGL');
|