12
votes

OpenGL ES Les textures de PNGS avec transparence sont rendu avec des artefacts étranges et me conduisant à des noix!

Je commence à travailler sur ma première application iPhone OpenGL, mais j'ai frappé un spray précoce.

J'ai une petite texture très simple que je veux utiliser comme un sprite dans un jeu 2D, mais il rend Avec des pixels de couleur «aléatoirement» bizarre de haut en haut.

http: //i40.tinyypic. com / 2s7c9ro.png <- Capture d'écran ici

Je pense avoir le sentiment que c'est la faute de Photoshop, alors si quelqu'un à ce sujet s'il vous plaît faites le moi savoir.

Si ce n'est pas Photoshop, il doit être mon code ... Voici donc le code en question ... xxx

}

Cette fonction de mélange a donné les meilleurs résultats.

S'il vous plaît, permettez-moi de savoir ce que vous pensez être faux.

Merci beaucoup, ce problème m'a conduit à Noix.


0 commentaires

3 Réponses :


19
votes

Un problème que je peux voir à partir du code est que vous n'effectuez pas votre contexte avant de dessiner l'image. Étant donné que votre image contient des zones transparentes et est composée à l'arrière-plan, vous voyez simplement ce qui est dans la mémoire allouée par Malloc. Essayez de définir le mode de mélange de quartz pour copier avant de dessiner l'image: xxx

Vous pouvez également utiliser calloc au lieu de malloc, car CalloC vous donne la mémoire à zéro.

Votre mélange opengl est correct: xxx

vous donne Porter-duff "sur", ce que vous voulez habituellement.


3 commentaires

VOUS ÊTES GÉNIAL! Cette réponse me rend totalement heureux et a du sens pour moi! J'avais eu le sentiment que ces artefacts étaient une sorte de gauche sur la mémoire mais je ne l'avais pas pensé. Merci encore beaucoup Sooooooo! Vous réglez!


Tourner le rouge ... content de pouvoir aider.


Merci aussi! Je ne pouvais pas comprendre pourquoi j'ai eu tous ces artefacts, maintenant ça a fière allure.



1
votes

Essayez d'effacer votre CGContextref d'abord:

CGContextSetRGBFillColor(ctxt, 1, 1, 1, 0);
CGContextFillRect(ctxt, CGRectMake(0, 0, w, h));


0 commentaires

0
votes

La plupart probablement votre image a des pixels colorés avec une valeur alpha zéro, mais en raison de la fonction de mélange, vous leur montrez. Essayez xxx


1 commentaires

Ce mélange Func ne donne de bons résultats que pour les non-prémultes alpha, qui est rarement en quartz.