2015-02-12 2 views
0

Я реализую приложение Away3D 4.x, где у меня есть некоторые сетки, которые должны отбрасывать тени. Я настраиваю DirectionalLight и FilteredShadowMapMethod, а затем применяю метод к материалам. Однако, как вы можете видеть на скриншоте, свет, как будто игнорирует объекты, близкие к земле (их Y-положение мало) и только отбрасывает тени для объектов, которые находятся выше определенной координаты Y. Вы можете увидеть это красиво на кирпичах справа. enter image description hereAway3D - тени от DirectionalLight отключены

Я не понимаю, что я делаю неправильно, может ли кто-то помочь? Это основная часть моего кода:

light1 = new DirectionalLight(0, -3, -5); 
light1.ambient = 0.5; 
light1.diffuse = 1.0; 
light1.specular = 1.0; 

lightPicker = new StaticLightPicker([light1]);  
this.scene.addChild(light1);   
shadowMapMethod = new FilteredShadowMapMethod(light1); 

groundCloseMaterial = new TextureMaterial(Cast.bitmapTexture(GroundDiffuseClose)); 
groundCloseMaterial.lightPicker = lightPicker; 
groundCloseMaterial.specular = 0; 
groundCloseMaterial.ambient = 1; 
groundCloseMaterial.shadowMethod = shadowMapMethod; 
groundCloseMaterial.repeat = true; 
groundCloseMaterial.mipmap = false; 

groundClose = new Mesh(new PlaneGeometry(MAX_WORLD_X*2, MAX_WORLD_Z*2), groundCloseMaterial); 
groundClose.geometry.scaleUV(20, 20); 
groundClose.y = 0.1; 


//-- create bricks 
greyBrickMaterial = new TextureMaterial(Cast.bitmapTexture(BrickDiffuse)); 
greyBrickMaterial.specularMap = Cast.bitmapTexture(BrickSpecular); 
greyBrickMaterial.normalMap = Cast.bitmapTexture(BrickNormals); 
greyBrickMaterial.lightPicker = lightPicker; 
greyBrickMaterial.mipmap = false; 
greyBrickMaterial.specular = 1; 
greyBrickMaterial.ambient = 1; 
greyBrickMaterial.shadowMethod = shadowMapMethod; 

Кирпичи создаются как кубики с кирпичным материалом. Аналогично, некоторые SphereMeshes имеют свой собственный материал, который создается так же, как greyBrickMaterial, летает и один огромный CubeMesh на расстоянии.

Обратите внимание также на странный световой эффект на большой коричневый куб - такое освещение просто не имеет смысла!

ответ

0

Хорошо с помощью члена сообщества на форумах Away3d, я нашел решение.

Короче говоря, значения положения светового должны быть < 1,0 для предотвращения сильных отражений на некоторых поверхностях:

light1 = new DirectionalLight(0., -0.7, -0.7); 

Во-вторых, играя с атрибутом epsi; в shadowMapMethod помогает принести тени, чтобы начать, откуда они следует, вместо того, чтобы быть компенсированы:

shadowMapMethod = new FilteredShadowMapMethod(light1); 
shadowMapMethod.epsilon = 0.08; 

Длинный ответ здесь: http://away3d.com/forum/viewthread/5787/

Смежные вопросы