How I do “3d object click”? I’ve tried but i couldn’t…
Can you write a sample code?
pls help me
“LPoint2f mpos = mouseWatcher->get_mouse();”
While the program is running, error gives
It would be easier to help you if you described the error.
the program stops working. program not gives error
can you write a sample code? plss
Hmm…Could you post your code, please?
PandaFramework framework;
NodePath camera;
PT(MouseWatcher) mouseWatcher;
PT(CollisionRay) pickerRay;
WindowFramework *window;
CollisionTraverser myTraverser = CollisionTraverser("ctraverser");
PT(CollisionHandlerQueue) myHandler;
PT(CollisionNode) pickerNode;
PT(CollisionHandlerQueue) handlePickedObject;
NodePath pickerNP;
NodePath pickedObj;
void myFunction(){
pickerRay->set_from_lens(window->get_camera(0), window->get_graphics_window()->get_pointer(0).get_x()
, window->get_graphics_window()->get_pointer(0).get_y());
myTraverser.traverse(window->get_render());
if(myHandler->get_num_entries() > 0)
{
myHandler->sort_entries();
pickedObj = myHandler->get_entry(0)->get_into_node_path();
pickedObj = pickedObj.find_net_tag("myObjectTag");
}
}
void mousee(const Event * theEvent, void * data)
{
myFunction();
}
int main(int argc, char **argv) {
// Open a new window framework and set the title
framework.open_framework(argc, argv);
framework.set_window_title("My Panda3D Window");
// Open the window
window = framework.open_window();
camera = window->get_camera_group(); // Get the camera and store it
window->enable_keyboard();
window->setup_trackball();
pickerNode = new CollisionNode("mouseRay");
pickerNP = camera.attach_new_node (pickerNode);
pickerNode->set_from_collide_mask(GeomNode::get_default_collide_mask());
pickerRay = new CollisionRay();
pickerNode->add_solid(pickerRay);
myHandler = new CollisionHandlerQueue();
myTraverser.add_collider(pickerNP, myHandler);
framework.define_key("mouse1", "click", mousee, 0);
// Load the environment model
NodePath environ = window->load_model(framework.get_models(), "models/environment");
environ.reparent_to(window->get_render());
environ.set_scale(0.25 , 0.25, 0.25);
environ.set_pos(-8, 42, 0);
// Load our panda
NodePath pandaActor = window->load_model(framework.get_models(), "panda-model");
pandaActor.set_scale(0.005);
pandaActor.reparent_to(window->get_render());
pandaActor.set_tag("myObjectTag", "1");
// Load the walk animation
window->load_model(pandaActor, "panda-walk4");
window->loop_animations(0);
Thread *current_thread = Thread::get_current_thread();
while (framework.do_frame(current_thread))
{
}
framework.close_framework();
return (0);
}
how must I do?
I triyed it, no error found !
It’s run perfectly