Forum Linux.gui double précision dans Opengl

Posté par .
Tags : aucun
0
2
juil.
2008
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 (page perso) . Évalué à 1.

    Quelle carte graphique avec quel driver ?

    Certaines cartes et leur driver fonctionnent peut-être en interne en simple précision...
    • [^] # Re: Matériel ?

      Posté par . Évalué à 2.

      Et certain utilise même des flottant 24 bits :)

      "La première sécurité est la liberté"

      • [^] # Re: Matériel ?

        Posté par . Évalué à 1.

        Bonjour,

        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 . Évalué à 2.

          Les moteurs 3D que j'ai vu prépare les données avant de les envoyer a la carte. Tu ne peux pas demander 8 chiffres de précision de déplacement sur des donnees pour un écran qui fait 2000 pixel de large maximum.

          "La première sécurité est la liberté"

          • [^] # Re: Matériel ?

            Posté par . Évalué à 1.

            Heu... j'ai pas tout compris mais pour les déplacements, la fonction glTranslated te permet de faire une translation.
            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 . Évalué à 2.

              Je connais mal opengl mais il faut se renseigner sur ce qui execute la fonction en question : le driver 3D ou la lib.

              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 à ceux qui les ont postés. Nous n'en sommes pas responsables.