Use bounds to choose projection targets

This commit is contained in:
Andrew Cassidy 2020-06-11 21:01:01 -07:00
parent 23c309fa9a
commit b09695d602
3 changed files with 25 additions and 17 deletions

View File

@ -142,6 +142,7 @@ namespace ConformalDecals {
private Material _decalMaterial; private Material _decalMaterial;
private Material _previewMaterial; private Material _previewMaterial;
private BoxCollider _boundsCollider;
internal bool _shouldRender; internal bool _shouldRender;
@ -320,6 +321,8 @@ namespace ConformalDecals {
var boundsBehaviour = decalBoundsTransform.gameObject.AddComponent<DecalBoundsBehaviour>(); var boundsBehaviour = decalBoundsTransform.gameObject.AddComponent<DecalBoundsBehaviour>();
boundsBehaviour.decalRenderer = this; boundsBehaviour.decalRenderer = this;
_boundsCollider = decalBoundsTransform.GetComponent<BoxCollider>();
UpdateMaterials(); UpdateMaterials();
if (HighLogic.LoadedSceneIsGame) { if (HighLogic.LoadedSceneIsGame) {
@ -481,7 +484,7 @@ namespace ConformalDecals {
// update projection // update projection
foreach (var target in _targets) { foreach (var target in _targets) {
target.Project(_orthoMatrix, decalProjectorTransform, useBaseNormal); target.Project(_orthoMatrix, decalProjectorTransform, _boundsCollider.bounds, useBaseNormal);
} }
} }
else { else {

View File

@ -20,9 +20,10 @@ namespace ConformalDecals {
_decalMPB = new MaterialPropertyBlock(); _decalMPB = new MaterialPropertyBlock();
} }
public void Project(Matrix4x4 orthoMatrix, Transform projector, bool useBaseNormal) { public void Project(Matrix4x4 orthoMatrix, Transform projector, Bounds projectorBounds, bool useBaseNormal) {
_projectionEnabled = true;
if (projectorBounds.Intersects(_targetRenderer.bounds)) {
_projectionEnabled = true;
var targetMaterial = _targetRenderer.sharedMaterial; var targetMaterial = _targetRenderer.sharedMaterial;
var projectorToTargetMatrix = target.worldToLocalMatrix * projector.localToWorldMatrix; var projectorToTargetMatrix = target.worldToLocalMatrix * projector.localToWorldMatrix;
@ -46,6 +47,10 @@ namespace ConformalDecals {
_decalMPB.SetTexture(DecalPropertyIDs._BumpMap, DecalConfig.BlankNormal); _decalMPB.SetTexture(DecalPropertyIDs._BumpMap, DecalConfig.BlankNormal);
} }
} }
else {
_projectionEnabled = false;
}
}
public bool Render(Material decalMaterial, MaterialPropertyBlock partMPB, Camera camera) { public bool Render(Material decalMaterial, MaterialPropertyBlock partMPB, Camera camera) {
if (_projectionEnabled) { if (_projectionEnabled) {