J'ai utilisé le code dans Ce lien pour mapper des textures de visages humains. Ce code utilise Glkit Strong> pour rendre les images. Le code fonctionne bien dans le simulateur, mais le même code si je cours dans le périphérique, il ne fonctionne pas. Les images ci-dessous sont les coups d'écran des images où il fonctionne dans le périphérique et non dans mon iPad. Code I utilisé pour charger la texture: p> image de simulateur: < / p> Le même code dans le périphérique donne ce qui suit Sortie: p> y a-t-il quelque chose que je veux m manquant? p> p>
p>
p>
3 Réponses :
Utilisez la méthode intégrée de 1 ligne intégrée d'Apple pour charger - n'écrivez pas votre propre implémentation (cassée)! P>
ou, si vous devez le faire vous-même, vous avez deux parties suspectes: p>
2.1. Débarrassez-vous de cette ligne: p>
GLTEXPARAMETRI (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); P>
2.2. Cette ligne utilise un numéro hors portée, ce qui n'est pas génial: p>
glgentextures (1, & _texture); p> li> ol>
Si, pour une raison quelconque, vous ne pouvez pas utiliser le code d'Apple (par exemple, vous souhaitez charger des données brutes de l'image en mémoire), voici une copie / colle de code de travail: p>
NSData* imageData = ... // fill this yourself CGSize* imageSize = ... // fill this yourself GLuint integerForOpenGLToFill; glGenTextures(1, &integerForOpenGLToFill); glBindTexture( GL_TEXTURE_2D, integerForOpenGLToFill); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); unsigned char* pixelData = (unsigned char*) malloc( [imageData length] * sizeof(unsigned char) ); [imageData getBytes:pixelData]; glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, imageSize.width, imageSize.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixelData);
Êtes-vous sûr de votre solution @Adam? J'ai écrit le code de chargement de la texture d'origine et je l'ai remplacé par votre suggestion dans une autre application, mais le résultat est encore pire. Je ne suis pas expert OpenGL, alors ma mise en œuvre peut encore être fausse, mais ce code ne fonctionne pas non plus. Bon appel au numéro hors de portée.
Voici un Capture d'écran de mes résultats à l'aide des deux méthodes (Application différente, iPhone Simulator W / Retina Affichage) .
@Ricardorendoncepeda quel bit? Ma principale suggestion est d'utiliser le code d'Apple, car cela fonctionne! Toujours!
Le code Copy / Coller en bas est pour les cas où vous générez les données en direct en mémoire (dont Apple prend uniquement en charge partiellement) et est une performance beaucoup plus élevée que le code d'Apple. Dans ce cas, vous devez comprendre votre format de données et s'adapter au format que je suis arrivé (RGBA) ou modifier les informations que vous donnez à OpenGL - mais si vous utilisez un format de données d'image non standard personnalisé, je suppose. Vous savez ce que vous faites et savez comment faire face à cela :) ...
Nope, j'utilise aussi Standard RGBA. Pour être juste, je n'ai pas apporté à ce projet une attention appropriée dans un moment et était heureuse avec son objectif initial (en outre, aucun iPad = pas de test complet). J'ai commencé à utiliser OpenGL ES 2.0 avant Glkit, j'ai également besoin de regarder GlktexTreLoader plus en détail.
Ma source de données d'image en mémoire est la suivante: Créez un contexte graphique bitmap et utilisez la méthode Apple pour obtenir les octets bruts en tant que nsdata. Ce que vous obtenez est W * H * (octets par pixel) octets - pas d'en-tête, pas de pied de page, etc. Le code ci-dessus en suppose (c'est la représentation brute la plus standard des données d'image :)). Le système d'Apple nécessite un en-tête JPG ou PNG (ceci n'est pas documenté, mais je l'ai eu des ingénieurs Apple via une demande de support technique)
regarder les captures d'écran ... Je me demande si le problème est que vous allez d'iPhone à iPad? P>
I.e. rétine à la non-rétine? P>
me semble que votre image Loading pourrait être em> ignorer l'échelle de la rétine, de sorte que la carte de texture soit "2x trop grande" sur l'iPad. p>
Utiliser la méthode d'Apple (mon autre réponse) doit résoudre ce problème automatiquement, mais sinon: vous pouvez essayer de faire deux copies de l'image, une à la taille actuelle (nommée "image@2x.png") et une à la moitié de la taille ( Redimensionner dans Photoshop / Preview.app / etc) (nommé "image.png") p>
Merci pour votre réponse. Le problème est entre simulateur et l'appareil. I imulator Ça marche et dans l'appareil, il ne :(
Que se passe-t-il si vous utilisez un simulateur de rétine par rapport à un simulateur non rétine? (Utilisez le menu matériel pour changer)
Je suis finalement cédé et basculé sur GLKTexTreLoader. Comme Adam mentionne, c'est assez robuste.
Voici une implémentation qui pourrait fonctionner pour vous: p> Je vais le changer pour le mtl2opengl code> Projet sur GitHub ... P> P>
Merci pour votre réponse Ricardo. Je vais essayer de vous revenir bientôt. Merci beaucoup.\
Quelqu'un peut-il répondre à ma question !!
Vérifiez: Stackoverflow.com/a/7952288/2128327