Bonjour à tous,
j'ai une question à propos de la double précision dans OpenGL.
Voici le contexte : j'ai une appli utilisant l'interface graphique wxwidgets. L'une des parties de mon IHM est un canevas OpenGL (wxGLCanvas) servant à afficher des données cartographiques.
Je n'ai aucune difficulté à afficher la carte, mais par contre j'ai un problème en ce qui concerne les transformations, en particulier la translation.
En effet, lorsque les valeurs que j'utilise avec glTranslated dépasse les 7 ou 8 chiffres (exemple : 450459.36) j'ai des problème de saut. La carte ne peut être translatée que par paliers de 0.01 (environ). Je comprend tout à fait le phénomène si on utilise des flottants (fonction glTranslatef) mais je ne comprend pas pourquoi j'ai toujours le problème avec des doubles.
Est-ce que cela vient le l'implémentation d'OpenGL sur Linux (la bibliothèque mesa il me semble), de la bibliothèque wxWidgets (peut probable à mon avis), d'une option à la compilation que j'aurai oublié ?
Si vous avez des idées elles sont les bienvenues !!!
Merci d'avance.
# Matériel ?
Posté par Meku (site web personnel) . Évalué à 1.
Certaines cartes et leur driver fonctionnent peut-être en interne en simple précision...
[^] # Re: Matériel ?
Posté par Nicolas Boulay (site web personnel) . Évalué à 2.
"La première sécurité est la liberté"
[^] # Re: Matériel ?
Posté par undine . Évalué à 1.
Je ne connais que ma carte graphique: une X1300Pro.
Pour le driver, si ça peut vous aider voici ce que me donne la commande lspci -v :
01:00.0 VGA compatible controller: ATI Technologies Inc Unknown device 7183 (prog-if 00 [VGA])
Subsystem: Dell Unknown device 0d02
Flags: bus master, fast devsel, latency 0, IRQ 169
Memory at c0000000 (64-bit, prefetchable) [size=256M]
Memory at dfde0000 (64-bit, non-prefetchable) [size=64K]
I/O ports at dc00 [size=256]
Expansion ROM at dfe00000 [disabled] [size=128K]
Capabilities: <access denied>
01:00.1 Display controller: ATI Technologies Inc Unknown device 71a3
Subsystem: Dell Unknown device 0d03
Flags: bus master, fast devsel, latency 0
Memory at dfdf0000 (64-bit, non-prefetchable) [size=64K]
Capabilities: <access denied>
Et voici ce que me donne glxinfo :
name of display: :0.0
display: :0 screen: 0
direct rendering: Yes
server glx vendor string: SGI
server glx version string: 1.2
server glx extensions:
GLX_ARB_multisample, GLX_EXT_visual_info, GLX_EXT_visual_rating,
GLX_EXT_import_context, GLX_EXT_texture_from_pixmap, GLX_OML_swap_method,
GLX_SGI_make_current_read, GLX_SGIS_multisample, GLX_SGIX_hyperpipe,
GLX_SGIX_swap_barrier, GLX_SGIX_fbconfig, GLX_MESA_copy_sub_buffer
client glx vendor string: ATI
client glx version string: 1.3
client glx extensions:
GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_EXT_import_context,
GLX_ARB_get_proc_address, GLX_SGI_video_sync, GLX_ARB_multisample,
GLX_ATI_pixel_format_float, GLX_ATI_render_texture
GLX version: 1.2
GLX extensions:
GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_EXT_import_context,
GLX_ARB_multisample
OpenGL vendor string: ATI Technologies Inc.
OpenGL renderer string: Generic
OpenGL version string: 2.0.6119 (8.30.3)
OpenGL extensions:
GL_ARB_multitexture, GL_EXT_texture_env_add, GL_EXT_compiled_vertex_array,
GL_S3_s3tc, GL_ARB_depth_texture, GL_ARB_fragment_program,
GL_ARB_fragment_program_shadow, GL_ARB_fragment_shader,
GL_ARB_multisample, GL_ARB_occlusion_query, GL_ARB_point_parameters,
GL_ARB_point_sprite, GL_ARB_shader_objects, GL_ARB_shading_language_100,
GL_ARB_shadow, GL_ARB_shadow_ambient, GL_ARB_texture_border_clamp,
GL_ARB_texture_compression, GL_ARB_texture_cube_map,
GL_ARB_texture_env_add, GL_ARB_texture_env_combine,
GL_ARB_texture_env_crossbar, GL_ARB_texture_env_dot3,
GL_ARB_texture_float, GL_ARB_texture_mirrored_repeat,
GL_ARB_texture_rectangle, GL_ARB_transpose_matrix, GL_ARB_vertex_blend,
GL_ARB_vertex_buffer_object, GL_ARB_vertex_program, GL_ARB_vertex_shader,
GL_ARB_window_pos, GL_ARB_draw_buffers, GL_ATI_draw_buffers,
GL_ATI_element_array, GL_ATI_envmap_bumpmap, GL_ATI_fragment_shader,
GL_ATI_map_object_buffer, GL_ATI_separate_stencil,
GL_ATI_shader_texture_lod, GL_ATI_texture_compression_3dc,
GL_ATI_texture_env_combine3, GL_ATI_texture_float,
GL_ATI_texture_mirror_once, GL_ATI_vertex_array_object,
GL_ATI_vertex_attrib_array_object, GL_ATI_vertex_streams,
GL_ATIX_texture_env_combine3, GL_ATIX_texture_env_route,
GL_ATIX_vertex_shader_output_point_size, GL_EXT_abgr, GL_EXT_bgra,
GL_EXT_blend_color, GL_EXT_blend_func_separate, GL_EXT_blend_minmax,
GL_EXT_blend_subtract, GL_EXT_clip_volume_hint,
GL_EXT_draw_range_elements, GL_EXT_fog_coord, GL_EXT_framebuffer_object,
GL_EXT_multi_draw_arrays, GL_EXT_packed_pixels, GL_EXT_point_parameters,
GL_EXT_rescale_normal, GL_EXT_secondary_color,
GL_EXT_separate_specular_color, GL_EXT_shadow_funcs, GL_EXT_stencil_wrap,
GL_EXT_texgen_reflection, GL_EXT_texture3D,
GL_EXT_texture_compression_s3tc, GL_EXT_texture_cube_map,
GL_EXT_texture_edge_clamp, GL_EXT_texture_env_combine,
GL_EXT_texture_env_dot3, GL_EXT_texture_filter_anisotropic,
GL_EXT_texture_lod_bias, GL_EXT_texture_mirror_clamp,
GL_EXT_texture_object, GL_EXT_texture_rectangle, GL_EXT_vertex_array,
GL_EXT_vertex_shader, GL_HP_occlusion_test, GL_NV_blend_square,
GL_NV_occlusion_query, GL_NV_texgen_reflection, GL_SGI_color_matrix,
GL_SGIS_generate_mipmap, GL_SGIS_texture_border_clamp,
GL_SGIS_texture_edge_clamp, GL_SGIS_texture_lod, GL_SUN_multi_draw_arrays
glu version: 1.3
glu extensions:
GLU_EXT_nurbs_tessellator, GLU_EXT_object_space_tess
visual x bf lv rg d st colorbuffer ax dp st accumbuffer ms cav
id dep cl sp sz l ci b ro r g b a bf th cl r g b a ns b eat
----------------------------------------------------------------------
0x23 24 tc 0 32 0 r y . 8 8 8 8 0 24 8 16 16 16 16 1 0 None
0x24 24 tc 0 32 0 r . . 8 8 8 8 0 24 8 16 16 16 16 1 0 None
0x25 24 tc 0 32 0 r y . 8 8 8 8 0 24 0 16 16 16 16 1 0 None
0x26 24 tc 0 32 0 r . . 8 8 8 8 0 24 0 16 16 16 16 1 0 None
0x27 24 tc 0 32 0 r y . 8 8 8 8 0 24 8 0 0 0 0 1 0 None
0x28 24 tc 0 32 0 r . . 8 8 8 8 0 24 8 0 0 0 0 1 0 None
0x29 24 tc 0 32 0 r y . 8 8 8 8 0 24 0 0 0 0 0 1 0 None
0x2a 24 tc 0 32 0 r . . 8 8 8 8 0 24 0 0 0 0 0 1 0 None
0x2b 24 tc 0 32 0 r y . 8 8 8 8 0 24 8 16 16 16 16 1 0 None
0x2c 24 tc 0 32 0 r . . 8 8 8 8 0 24 8 16 16 16 16 1 0 None
0x2d 24 tc 0 32 0 r y . 8 8 8 8 0 24 0 16 16 16 16 1 0 None
0x2e 24 tc 0 32 0 r . . 8 8 8 8 0 24 0 16 16 16 16 1 0 None
0x2f 24 tc 0 32 0 r y . 8 8 8 8 0 24 8 0 0 0 0 2 1 None
0x30 24 tc 0 32 0 r . . 8 8 8 8 0 24 8 0 0 0 0 2 1 None
0x31 24 tc 0 32 0 r y . 8 8 8 8 0 24 0 0 0 0 0 2 1 None
0x32 24 tc 0 32 0 r . . 8 8 8 8 0 24 0 0 0 0 0 2 1 None
0x33 24 tc 0 32 0 r y . 8 8 8 8 0 24 8 16 16 16 16 1 0 None
0x34 24 tc 0 32 0 r . . 8 8 8 8 0 24 8 16 16 16 16 1 0 None
0x35 24 tc 0 32 0 r y . 8 8 8 8 0 24 0 16 16 16 16 1 0 None
0x36 24 tc 0 32 0 r . . 8 8 8 8 0 24 0 16 16 16 16 1 0 None
0x37 24 tc 0 32 0 r y . 8 8 8 8 0 24 8 0 0 0 0 4 1 None
0x38 24 tc 0 32 0 r . . 8 8 8 8 0 24 8 0 0 0 0 4 1 None
0x39 24 tc 0 32 0 r y . 8 8 8 8 0 24 0 0 0 0 0 4 1 None
0x3a 24 tc 0 32 0 r . . 8 8 8 8 0 24 0 0 0 0 0 4 1 None
0x3b 24 tc 0 32 0 r y . 8 8 8 8 0 24 8 16 16 16 16 1 0 None
0x3c 24 tc 0 32 0 r . . 8 8 8 8 0 24 8 16 16 16 16 1 0 None
0x3d 24 tc 0 32 0 r y . 8 8 8 8 0 24 0 16 16 16 16 1 0 None
0x3e 24 tc 0 32 0 r . . 8 8 8 8 0 24 0 16 16 16 16 1 0 None
0x3f 24 tc 0 32 0 r y . 8 8 8 8 0 24 8 0 0 0 0 6 1 None
0x40 24 tc 0 32 0 r . . 8 8 8 8 0 24 8 0 0 0 0 6 1 None
0x41 24 tc 0 32 0 r y . 8 8 8 8 0 24 0 0 0 0 0 6 1 None
0x42 24 tc 0 32 0 r . . 8 8 8 8 0 24 0 0 0 0 0 6 1 None
0x43 24 dc 0 32 0 r y . 8 8 8 8 0 24 8 16 16 16 16 1 0 None
0x44 24 dc 0 32 0 r . . 8 8 8 8 0 24 8 16 16 16 16 1 0 None
0x45 24 dc 0 32 0 r y . 8 8 8 8 0 24 0 16 16 16 16 1 0 None
0x46 24 dc 0 32 0 r . . 8 8 8 8 0 24 0 16 16 16 16 1 0 None
0x47 24 dc 0 32 0 r y . 8 8 8 8 0 24 8 0 0 0 0 1 0 None
0x48 24 dc 0 32 0 r . . 8 8 8 8 0 24 8 0 0 0 0 1 0 None
0x49 24 dc 0 32 0 r y . 8 8 8 8 0 24 0 0 0 0 0 1 0 None
0x4a 24 dc 0 32 0 r . . 8 8 8 8 0 24 0 0 0 0 0 1 0 None
0x4b 24 dc 0 32 0 r y . 8 8 8 8 0 24 8 16 16 16 16 1 0 None
0x4c 24 dc 0 32 0 r . . 8 8 8 8 0 24 8 16 16 16 16 1 0 None
0x4d 24 dc 0 32 0 r y . 8 8 8 8 0 24 0 16 16 16 16 1 0 None
0x4e 24 dc 0 32 0 r . . 8 8 8 8 0 24 0 16 16 16 16 1 0 None
0x4f 24 dc 0 32 0 r y . 8 8 8 8 0 24 8 0 0 0 0 2 1 None
0x50 24 dc 0 32 0 r . . 8 8 8 8 0 24 8 0 0 0 0 2 1 None
0x51 24 dc 0 32 0 r y . 8 8 8 8 0 24 0 0 0 0 0 2 1 None
0x52 24 dc 0 32 0 r . . 8 8 8 8 0 24 0 0 0 0 0 2 1 None
0x53 24 dc 0 32 0 r y . 8 8 8 8 0 24 8 16 16 16 16 1 0 None
0x54 24 dc 0 32 0 r . . 8 8 8 8 0 24 8 16 16 16 16 1 0 None
0x55 24 dc 0 32 0 r y . 8 8 8 8 0 24 0 16 16 16 16 1 0 None
0x56 24 dc 0 32 0 r . . 8 8 8 8 0 24 0 16 16 16 16 1 0 None
0x57 24 dc 0 32 0 r y . 8 8 8 8 0 24 8 0 0 0 0 4 1 None
0x58 24 dc 0 32 0 r . . 8 8 8 8 0 24 8 0 0 0 0 4 1 None
0x59 24 dc 0 32 0 r y . 8 8 8 8 0 24 0 0 0 0 0 4 1 None
0x5a 24 dc 0 32 0 r . . 8 8 8 8 0 24 0 0 0 0 0 4 1 None
0x5b 24 dc 0 32 0 r y . 8 8 8 8 0 24 8 16 16 16 16 1 0 None
0x5c 24 dc 0 32 0 r . . 8 8 8 8 0 24 8 16 16 16 16 1 0 None
0x5d 24 dc 0 32 0 r y . 8 8 8 8 0 24 0 16 16 16 16 1 0 None
0x5e 24 dc 0 32 0 r . . 8 8 8 8 0 24 0 16 16 16 16 1 0 None
0x5f 24 dc 0 32 0 r y . 8 8 8 8 0 24 8 0 0 0 0 6 1 None
0x60 24 dc 0 32 0 r . . 8 8 8 8 0 24 8 0 0 0 0 6 1 None
0x61 24 dc 0 32 0 r y . 8 8 8 8 0 24 0 0 0 0 0 6 1 None
0x62 24 dc 0 32 0 r . . 8 8 8 8 0 24 0 0 0 0 0 6 1 None
[^] # Re: Matériel ?
Posté par Nicolas Boulay (site web personnel) . Évalué à 2.
"La première sécurité est la liberté"
[^] # Re: Matériel ?
Posté par undine . Évalué à 1.
Elle attend comme paramètres 3 doubles. Si tu ne peut pas avoir plus de 8 chiffres précision à quoi sert cette fonction puisqu'il existe glTranslatef qui fait le même chose mais avec des flottants (qui eux atteignent 6 ou 7 chiffres de précision) ?
[^] # Re: Matériel ?
Posté par Nicolas Boulay (site web personnel) . Évalué à 2.
Si c'est la carte 3D, il y a forcément une limitation. Le fait d'avoir 2 fonctions, c'est pour le hardware qui le gère ou pour éviter une conversion couteuse qui peut être fait plus tard.
"La première sécurité est la liberté"
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.