Re: utiliser gluUnProject dans la vue 3D ?

Posté par Fa7 le 13/3/2007 12:03:01
Je récupere les matrices modelView, projection et viewport avec des glGet qui vont bien ...
J'ai essayé d'afficher ces matrices, et elles ont l'ai correctes... En tout cas, elles ne sont pas nulles...

Voila un petit bout de code..

# SPACEHANDLER.VIEW3D.EVENT

import sys
import os


import Blender
from Blender import Draw

from Blender import BGL

def get_viewport():
    view = BGL.Buffer(BGL.GL_INT, 4)
    BGL.glGetIntegerv(BGL.GL_VIEWPORT, view)
    return view

def get_modelview_matrix():
    model_matrix = BGL.Buffer(BGL.GL_FLOAT, 16)
    BGL.glGetFloatv(BGL.GL_MODELVIEW_MATRIX, model_matrix)
    return model_matrix

def get_projection_matrix():
    proj_matrix = BGL.Buffer(BGL.GL_FLOAT, 16)
    BGL.glGetFloatv(BGL.GL_PROJECTION_MATRIX, proj_matrix)
    return proj_matrix

def mouse_coords_to_3D_view(x, y):
    
    depth = BGL.Buffer(BGL.GL_FLOAT, 1)
    BGL.glReadPixels(x, y, 1, 1, BGL.GL_DEPTH_COMPONENT, BGL.GL_FLOAT, depth)

    if (depth[0] != 1):
        world_x = BGL.Buffer(BGL.GL_FLOAT, 2)
        world_y = BGL.Buffer(BGL.GL_FLOAT, 2)
        world_z = BGL.Buffer(BGL.GL_FLOAT, 2)

        view1 = get_viewport()
        model = get_modelview_matrix()
        proj = get_projection_matrix ()
   
        BGL.gluUnProject(x, y, depth[0], 
                         model, proj,
                         view1,
                         world_x, world_y, world_z)

        return world_x[0], world_y[0], world_z[0]

evt = Blender.event
return_it = False

if (evt == Draw.LEFTMOUSE):
    coord = Blender.Window.GetMouseCoords()
    print mouse_coords_to_3D_view (coord[0],coord[1])
else:
    return_it = True

# if Blender should not process itself the passed event:
if (not return_it):
    Blender.event = None

Cette contribution était de : http://blenderclan.tuxfamily.org/html/newbb/viewtopic.php?forum=2&topic_id=8170&post_id=91466