2009-04-03 7 views
1

J'ai un dessin EAGLContext dans un CAEAGLLayer (via l'exemple GLGravityView standard dans le SDK iPhone). Ce que j'essaie de faire est de placer ma vue au-dessus d'une autre vue et d'utiliser ce que je rends dans OpenGL pour masquer la vue sous-jacente. Supposons que la vue de dessous soit une image d'une fleur et que je mette ma vue OpenGL en haut et que je place la couleur claire OpenGL sur un noir opaque puis que je rende ma sphère. Je veux que la sphère coupe à travers le noir, en n'exposant qu'une section circulaire de l'image de la fleur. Mieux encore, montrer à la fois la sphère (translucide) et la fleur, coupant à travers le noir.Comment rendre ma scène en tant que masque dans OpenGL?

J'ai appelé

glView.backgroundColor = [UIColor clearColor]; 
glClearColor(0.0, 0.0, 0.0, 1.0); 

quand je mis en place la vue et l'appelé

glColor4f(1.0, 1.0, 1.0, 0.5); 

juste avant de rendre la sphère.

Cela rend juste la sphère blanc cassé et ne montre pas la fleur sous-jacente. Je ne suis pas trop surpris par ça.

Est-ce que quelqu'un sait comment créer un masque à la place?

Nous vous remercions de votre aide.

Répondre

0

J'ai fait quelque chose de similaire en utilisant simplement le "EAGLayer" ou quoi que ce soit. Dessinez d'abord l'arrière-plan puis dessinez plus de choses sur le dessus. Cela a fonctionné parce que la fonctionnalité de taraudage de la "couche" inférieure était nulle ou minimale. Quand je voulais utiliser la fonctionnalité dans le "calque" du bas, je cherchais juste des taps près de certains coords de xy (par opposition aux boutons de drag/drop comme vous le feriez avec un vrai calque.)

Cela dépend vraiment de ce que vous voulez faire avec la couche inférieure. Si tout ce que vous voulez est la photo de la fleur alors mon approche fonctionne. Si vous souhaitez faire glisser/déposer des contrôles d'interface utilisateur plus complexes, mon approche ne fonctionnera pas.

1

Vous avez probablement abandonné maintenant, mais juste au cas où ...

Je pense que votre glClearColor (0,0, 0,0, 0,0, 1,0) doit être glClearColor (0,0, 0,0, 0,0, 0,0) depuis vous voulez effacer la vue à "noir transparent" avec Alpha = 0 plutôt que "noir opaque" avec Alpha = 1.

Vous devez également vous assurer que votre vue OpenGL n'est pas marquée comme opaque.

+0

Oui, c'était la solution pour moi – Chaos