Transparence avec Quartz

ChachaChacha Membre
16:34 modifié dans API AppKit #1
Salut,

La doc d'Apple explique des choses sur la transparence avec Quartz, mais je n'ai pas réussi à  faire la chose suivante :
Je voudrais dessiner deux rectangles qui se coupent, avec chacun une couleur un peu transparente. Je m'attends donc à  ce que l'intersection soit un peu plus opaque, mais je n'ai pas réussi à  obtenir cet effet.
Aves vous des idées ?
(j'ai essayé le CGContextSetBlendMode, le CGContextSetAlpha, et, bien sûr, le CGContextSetRGBFillColor avec un alpha <1, mais peut-être n'ai-je pas trouvé la bonne combinaison).

+
Chacha

Réponses

  • 16:34 modifié #2
    Tu n'as pas essayé des NSBezierPath avec une couleur qui a une composante alpha <1 ?
  • ChachaChacha Membre
    septembre 2005 modifié #3
    Le problème, ce n'est pas de dessiner des formes avec un degré de transparence, c'est de faire en sorte que leurs intersections se comportent comme attendu; moi je n'obtiens qu'une couleur uniforme.
    +
    Chacha

    [edit]
    Exemple : chaque face de ce cube a la couleur RGBA (1, 1, 1, .25)
    Mais quand deux faces se recouvrent, j'aimerais que l'opacité augmente !
    [/edit]

    [Fichier joint supprimé par l'administrateur]
  • 16:34 modifié #4
    Avec ce que je dis, tu as l'effet attendu:
    [tt] [[NSColor colorWithDeviceRed:0.0 green:0.0 blue:0.0 alpha:0.25] set];
    [[NSBezierPath bezierPathWithRect:NSMakeRect(50,50,100,100)] fill];
    [[NSBezierPath bezierPathWithRect:NSMakeRect(75,75,100,100)] fill];[/tt]




    [Fichier joint supprimé par l'administrateur]
  • ChachaChacha Membre
    16:34 modifié #5
    Ah, ok, j'avais pas compris.
    Cela dit, c'est bizarre, je n'observe pas la même chose !


    [Fichier joint supprimé par l'administrateur]
  • AliGatorAliGator Membre, Modérateur
    16:34 modifié #6
    Et quel est ton code pour créer ton cube ?
    Pur OpenGL ?
    (si c'est le cas l'OpenGL ne gère sans doute pas la transparence pareil que le bezierPath ?)

    Ou avec des BezierPath partout ? (rien à  voir avec le nain de fort-boyard  ;D)
    Tu crées un seul gros bezierPath avec dse addBezierPath ou tu en fait un pour chacune des 6 faces en faisant un fill pour chacun des 6 ?
  • ChachaChacha Membre
    16:34 modifié #7
    dans 1126785526:

    Et quel est ton code pour créer ton cube ?
    Pur OpenGL ?

    Non, pur Quartz. Je suis dans une NSView (custom view) et je travaille dans un CGContext, avec des commandes CoreGraphics.
    Pour chaque face de mon cube (mise dan sun bezierpath), je fais:
        [[NSColor colorWithDeviceRed:0 green:0 blue:0 alpha:.25] set];
        [bezierPath fill];
        [[NSColor colorWithDeviceRed:0 green:0 blue:0 alpha:1] set];
        [bezierPath stroke];

    +
    Chacha
  • 16:34 modifié #8
    Mais là ,toutes les faces de devant ont une autre face derrière... donc le coupé de renaud (mode blague aligator) s'applique de partout ?
  • ChachaChacha Membre
    16:34 modifié #9
    dans 1126786218:

    Mais là ,toutes les faces de devant ont une autre face derrière... donc le coupé de renaud (mode blague aligator) s'applique de partout ?

    Mais... c'est vrai, ça !
    Mon dieu, je suis stupide !
    Intuitivement, je pensais que le centre serait plus opaque. Argh ! Merci quand même...
    +
    Chacha
  • elfelf Membre
    16:34 modifié #10
    Au cas où tu supprime une face pour faire la différence...
  • ChachaChacha Membre
    16:34 modifié #11
    dans 1126886151:

    Au cas où tu supprime une face pour faire la différence...

    Oui, oui, en fait ça marchait très bien depuis le début : je suis juste stupide.
    Merci à  tous, au fait (de m'avoir fait affronter la dure réalité)

    +
    Chacha
  • AliGatorAliGator Membre, Modérateur
    16:34 modifié #12
    dans 1126897595:

    dans 1126886151:

    Au cas où tu supprime une face pour faire la différence...

    Oui, oui, en fait ça marchait très bien depuis le début : je suis juste stupide.
    Merci à  tous, au fait (de m'avoir fait affronter la dure réalité)

    +
    Chacha
    Ben nan on a tous été stupides (sauf supermic) parce qu'on n'y a pas pensé plus tôt...
    Je me suis fait avoir comme toi, moi : même alors que t'as posté ton cube rose moi aussi je m'attendais à  avoir une zone plus sombre que les autres ou en tout cas pas tout aussi uniforme.

    Mais en fait je pense que c'est aussi parce qu'il n'y a pas d'effet de lumière : si tu as dans la réalité un cube en verre avec une quelconque source lumineuse dans la pièce, tu verrais les faces différement puisque pas exposées avec le même angle à  la source lumineuse.

    Etant habitués à  ce réalisme, on s'attend donc à  avoir ce genre de chose dans ton cas, donc des faces aux rendus un peu différents ou en tout cas un effet de transparence qui rende la zone centrale différente, plus sombre, etc...
    Enfin je pense que c'est un peu pour ça qu'inconsciemment on s'attendais à  avoir des effets différents selon les faces et leurs "superpositions", en tout cas moi je n'y aurais pas pensé non plus sans que mic nous titille sur ce point ;)
Connectez-vous ou Inscrivez-vous pour répondre.