Cuando se ejecuta MATLAB en un modo discontinuo sin pantalla (por ejemplo, con el medio ambiente $DISPLAY
UNIX variables definida, o con la bandera matlab -nodisplay
en el arranque), normalmente no se puede utilizar el procesador de opengl
. En su lugar, debe conformarse con el renderizador painters
. Por ejemplo:Todo el texto se pierde cuando se utiliza renderizador OpenGL en modo batch
>> print -dpng -opengl fig.png
Warning: OpenGL mode can not be used in terminal emulation mode; ignoring option.
Desafortunadamente, painters
menudo da malos resultados cuando se trabaja con escenas 3D con parches, la iluminación, la transparencia, etc .. Aquí es un ejemplo simple (utilizando una pantalla por ahora), donde se pierde la alfa:
peaks
alpha(0.5)
print -dpng -opengl peaks_opengl.png
print -dpng -painters peaks_painters.png
Debido a estas limitaciones, yo estaba muy emocionado de encontrar la mayoría indocumentado-hardcopy()
función incorporada de MATLAB, que hace de alguna manera le permite usar el representador opengl
sin una pantalla. Esta función es la base de la excelente función export_fig()
. Ahora puedo guardar muy rápidamente figuras 3D de alta calidad en modo por lotes.
Sin embargo, hay una trampa: Todo el texto se pierde cuando se pasa la figura a través de la función hardcopy()
. Por ejemplo:
plot(1,1)
title('TEST')
>> A = hardcopy(gcf, '-Dopengl', '-r300');
Warning: Failed to draw text string
> In /Applications/MATLAB_R2010b.app/toolbox/matlab/graphics/hardcopy.p>hardcopy at 21
La cifra de producción se carece por completo cualquier texto (sin eje garrapatas etiquetas y ningún título):
export_fig axis.png -opengl
Así que lo que estoy preguntando es: ¿Cómo puedo hacer que el renderizador opengl
trabaje con texto en modo por lotes? ¿Hay alguna forma de que pueda hacer que el texto funcione con la función hardcopy()
? ¿Quizás una forma de rasterizar el texto de antemano? O una forma de combinar una copia impresa del texto painters
y una copia impresa opengl
de la trama? Alternativamente, ¿existe una ruta completamente diferente para hacer que esto funcione que la función hardcopy()
? También tenga en cuenta que es poco probable que el problema sea con la configuración de mi sistema, ya que es reproducible en Mac OS y Ubuntu.
¿Has leído esta [publicación de Mathworks] (http://www.mathworks.com/matlabcentral/newsreader/view_thread/300393) sobre una fuente de texto faltante? –
@JuanMellado Gracias por buscar. Encontré ese hilo antes, pero no creo que la fuente sea un problema aquí. Puedo usar cualquiera de mis fuentes en 'listfonts' y exportan bien con pintores tanto en modo interactivo como por lotes, y con OpenGL en modo interactivo. No puedo estar seguro, pero ese otro hilo podría haber confundido 2 problemas separados. –