2011-04-26 3 views
1

J'ai une aiguille de style boussole, libre de tourner.iOS/GLES2: Comment obtenir un effet lumineux

J'ai besoin qu'il brille quand il approche une certaine orientation, disons 55 degrés.

Je veux avoir UIView sous-classe NeedleView, donc je peux manipuler (NeedleView *) needleView comme s'il s'agissait d'un UIView, juste avoir quelques méthodes supplémentaires - (void) feedAngle: (float) theta; - (vide) feedGlow: (float) glow_01; J'ai fait un peu de recherche, j'ai trouvé que la technique courante est de prendre une copie en niveaux de gris de l'image de l'aiguille, flou, l'enregistrer comme une texture GL, puis l'envelopper sur un quad qui se trouve derrière le réel quad de l'aiguille.

alors je suis un laineux peu ....

Je suppose que je mets le RGBA sur les points d'angle pour être (r, g, b) de ma couleur de lueur souhaitée, a = glowFactorForThisFrame

puis je mis glBlendmode à quelque chose approprié

puis je dessine le quad texturé pour le flou

ce que je veux est quelque chose où Alpha est 1 partout sur l'aiguille d'origine, mais il saigne de compléter progressivement la transparence que nous s'éloigner plus loin

...

pour commencer, je voudrais trouver un code qui prend en charge le flou d'un bitmap en échelle de gris, je préférerais le faire à partir du code que dans un magasin de photo. (Je me rends compte que cela prendrait beaucoup de temps sur un appareil réel, alors peut-être je peux le calculer la première fois que l'application est exécutée, enregistrez-le dans le fichier, puis charger à partir du fichier)

Deuxièmement, je suis très sommaire sur les détails précis de ce que je dois faire.

Quelqu'un pourrait-il m'aider sur l'un ou l'autre de ces points?

+0

Préférez-vous un langage de programmation spécifique? –

+0

iOS, donc ObjC, C, C++ tous bien –

+0

Connexes: http: // stackoverflow.com/questions/6683822/ios-application-a-rgb-filtre-à-un-greyscale-png –

Répondre

0

J'ai expérimenté beaucoup d'approches ici.

Fondamentalement, j'ai besoin de deux images; un brillant et un non.

alors je peux les dessiner comme CALayers sur le dessus les uns des autres, et pirater CADisplayLink, la mise en

glowLayer.opacity = glowFac; 
dullLayer.opacity = (1 - glowFac); 

Je jouais aussi avec bidouiller dans GL shaders, en passant le facteur de lueur comme un uniforme, mais est une tonne de code pour faire essentiellement la même chose.

NB J'avais besoin de trouver un graphiste pour «luire» l'image

0

Vous pouvez créer la lueur autour de l'image dans Photoshop de l'aiguille. Il suffit de remplacer l'image dans l'application au moment de l'exécution lorsque la lueur est activée.

+0

J'ai besoin de transition en douceur entre ne pas briller et totalement rougeoyant. Je préférerais aussi déplacer autant de travail dans le code que possible, car cela donne beaucoup de flexibilité pour changer l'interface utilisateur plus tard –

+0

Compris. Cependant, quant à moi, il y a parfois un équilibre à atteindre, où la rapidité et la saleté à l'intérieur vous procurent des résultats rapides et parfaits. Si c'est le cas, la transition en douceur est obtenue en ajoutant le graphique de l'aiguille luminescente avec un alpha de zéro sur le sommet de l'aiguille normale, puis en changeant simplement alpha à 100% sur une animation temporisée. Très court et doux. L'effet sera aussi bon que le code seulement. –

Questions connexes