J'ai été chargé de résoudre un problème qui est en dehors de mon domaine de connaissances et j'espérais pouvoir obtenir des conseils de dépannage de quelqu'un plus expérimenté avec openGL (j'ai très peu d'expérience avec OpenGL). Nous travaillons sur une application multiplateforme implémentée dans une implémentation Lisp commune appelée ccl. Dans cette application, nous avons besoin d'afficher des objets 3D qui affichent du texte. Sur le mac, tout le texte s'affiche bien mais sur le PC au lieu d'afficher le texte il affiche une autre texture. Au début, je pensais que la texture n'était peut-être pas juste référencée, alors j'ai essayé de changer le numéro de texture mais aucune des textures de la liste ne semblait être le texte (ou si la texture était déformée et ne ressemblait pas à du texte). Je sais que ce problème est très vague et je ne cherche pas quelqu'un pour poster une solution, mais je me demandais si les gens pourraient suggérer des endroits que je pourrais chercher pour essayer de résoudre ce problème.Résolution de problèmes textures de texte openGL ne s'affichent pas correctement plateforme croisée
Voici la méthode qui finit par créer la texture à partir d'un fichier (désolé le code est écrit en Lisp en utilisant le cocoa/cocotron) aussi quand j'ai ajouté les instructions d'impression pour imprimer les pixels larges et les pixels élevés. puissances de 2 (512):
(defun CREATE-IMAGE-FROM-FILE (Filename &key Verbose Forced-Depth (Flip-Vertical t)) "
in: Filename string-or-pathname, &key Verbose boolean, Forced-Depth int,
out: Pixels byte-vector,
Width Height Forced-Depth int; Has-Alpha boolean.
Create an image buffer from <Filename>
- File must be 32 bit ARGB compatible, e.g., .png with mask or 24 bit RGB."
(print "CREATE IMAGE FROM FILE")
(print Filename)
(when Verbose (format t "CREATE-IMAGE-FROM-FILE: ~A~%" Filename))
(let* ((Image-Representation (#/retain (ns-image-rep-from-file (native-string (namestring (translate-logical-pathname Filename)))))))
;; should massage data: GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV for best performance
;; http://developer.apple.com/documentation/graphicsimaging/Conceptual/OpenGL-MacProgGuide/opengl_texturedata/opengl_texturedata.html
(when (%null-ptr-p Image-Representation)
(format t "~%missing texture ~S" Filename)
(return-from create-image-from-file))
;; do the OpenGL vertical image flip
(when Flip-Vertical
(flip-vertical-buffer
(#/bitmapData Image-Representation)
(* (#/bytesPerRow Image-Representation) (#/pixelsHigh Image-Representation))
(#/bytesPerRow Image-Representation)))
(print (#/pixelsWide Image-Representation))
(print (#/pixelsHigh Image-Representation))
(values
(#/bitmapData Image-Representation)
(#/pixelsWide Image-Representation)
(#/pixelsHigh Image-Representation)
(#/bitsPerPixel Image-Representation)
(#/hasAlpha Image-Representation)
(#/bitmapFormat Image-Representation))))
(defmethod DISPLAY-VERTEX-ARRAYS ((Self string-shape))
(glEnable gl_texture_2d)
(cond
;; Color!
((color-vector Self)
(glcolor3ubv (color-vector Self))
(gltexenvi gl_texture_env gl_texture_env_mode gl_blend))
;; Black
(t
(gltexenvi gl_texture_env gl_texture_env_mode gl_modulate)))
(glbindtexture gl_texture_2d (texture (font Self)))
(glInterleavedArrays GL_T2F_V3F (va-stride Self) (vertex-arrays Self))
(glDrawArrays gl_quads 0 (va-elements-count Self))
(gltexenvi gl_texture_env gl_texture_env_mode gl_modulate)
(glDisable gl_texture_2d)
;; if color was use better reset to white?
(when (color-vector Self) (glColor3f 1.0 1.0 1.0)))
alt text http://www.freeimagehosting.net/uploads/e2eaeeca57.png
alt text http://www.freeimagehosting.net/uploads/0a84c32403.png
On dirait que vous ne gérez pas correctement votre mémoire. Pouvez-vous fournir au moins des extraits de code ou des captures d'écran? –
J'ai ajouté quelques screenshots la première capture d'écran est un de nos exemples fonctionnant sur OSX (le texte apparaît bien), le second exemple est exécuté sur windows 7 (il semble que les objets texte utilisent la texture au lieu d'utiliser la texture correcte des boîtes). J'aurais du mal à poster des extraits de code parce que je ne sais toujours pas où le problème se produit dans le code. – Mike2012