2017-07-12 2 views
1

J'ai un rendu SCNScene dans un SCNView. J'ai quelques modèles * .dae qui sont rendus/se déplaçant dans la scène. J'ai un cube transparent, quand un de mes modèles le suit, je voudrais que le modèle ne soit pas rendu, parce que pour l'instant, comme le cube est transparent, vous pouvez le voir à travers le cube.SceneKit Culling Plane

Y at-il une propriété/paramètre/shader que je peux appliquer au cube transparent afin que tout ce qui se trouve derrière ne soit pas rendu?

Exemple:

Mon oeil est le point vert, le cube est le carré bleu, mon modèle est le cercle rouge, mais la partie du cercle caché par le cube est violet ... ce serait en fait invisible. Le carré bleu serait invisible aussi.

Cull

Ce développeur a un shader occlusion qui fait ce que j'ai besoin, mais il est l'unité: https://youtu.be/MK3D91kCKzM

Cordialement

Chris

+0

Que voulez-vous voir à la place? Une capture d'écran et un croquis aideraient beaucoup. –

+0

J'ai ajouté une image pour avoir une meilleure idée de ce dont j'ai besoin. – Chris

+0

Eh bien, quelque chose doit être rendu là; "invisible" n'est pas une couleur. Dans la partie de la boule rouge/mauve qui est cachée par le cube transparent, que faut-il dessiner? Noir? Blanc? Un objet derrière la balle? Pouvez-vous poster une capture d'écran de ce que vous avez maintenant, et décrire comment c'est différent de ce que vous voulez? –

Répondre

7

est ici une solution

  1. Pour le cube, utilisez un matériau avec constant en tant que lightingModel. C'est le moins cher.
  2. Ce matériau aura writesToDepthBuffer défini sur true et colorBufferWriteMask sur [] (jeu d'options vide). De cette façon, le cube écrira dans le tampon de profondeur, mais ne dessinera rien à l'écran.
  3. Définissez le renderingOrder du cube sur -1 afin qu'il soit dessiné avant tout autre nœud de la scène. Cela fera que le cube écrira dans le buffer de profondeur avant tout autre objet, ce qui empêchera leur dessiccation s'ils sont derrière le cube.
+0

Avez-vous un échantillon? Je l'ai essayé ceci: si laisser cube = scene.rootNode.childNode (withName: "invisible", récursive: true) { let matériau = SCNMaterial() material.lightingModel = .constant material.writesToDepthBuffer = true material.colorBufferWriteMask = [] cube.geometry? .materials = [matériel] cube.renderingOrder = -1 } – Chris

+0

a obtenu, il ne fonctionnait pas sur un plan, mais un cube plat si bien travaillé! – Chris

+0

Cela devrait fonctionner aussi bien avec'SCNPlane'. Assurez-vous simplement qu'il est correctement orienté pour qu'il soit face à la caméra. – mnuages