Skip to content

Instantly share code, notes, and snippets.

@zester
Created April 17, 2012 01:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zester/2402725 to your computer and use it in GitHub Desktop.
Save zester/2402725 to your computer and use it in GitHub Desktop.
Panda3D C++ Example
//g++ main.cpp -o main -I/usr/include/panda3d -L/usr/lib/panda3d -I/usr/include/python2.7
//-lp3framework -lpanda -lpandafx -lpandaexpress -lp3dtoolconfig -lp3dtool -lp3pystub -lp3direct
#include "pandaFramework.h"
#include "pandaSystem.h"
#include "genericAsyncTask.h"
#include "asyncTaskManager.h"
#include "cIntervalManager.h"
#include "cLerpNodePathInterval.h"
#include "cMetaInterval.h"
// Global stuff
PandaFramework framework;
PT(AsyncTaskManager) taskMgr = AsyncTaskManager::get_global_ptr();
PT(ClockObject) globalClock = ClockObject::get_global_clock();
NodePath camera;
// Task to move the camera
AsyncTask::DoneStatus SpinCameraTask(GenericAsyncTask* task, void* data) {
double time = globalClock->get_real_time();
double angledegrees = time * 6.0;
double angleradians = angledegrees * (3.14 / 180.0);
camera.set_pos(20*sin(angleradians),-20.0*cos(angleradians),3);
camera.set_hpr(angledegrees, 0, 0);
return AsyncTask::DS_cont;
}
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
WindowFramework *window = framework.open_window();
camera = window->get_camera_group(); // Get the camera and store it
// 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());
// Load the walk animation
window->load_model(pandaActor, "panda-walk4");
window->loop_animations(0);
// Create the lerp intervals needed to walk back and forth
PT(CLerpNodePathInterval) pandaPosInterval1, pandaPosInterval2,
pandaHprInterval1, pandaHprInterval2;
pandaPosInterval1 = new CLerpNodePathInterval("pandaPosInterval1",
13.0, CLerpInterval::BT_no_blend,
true, false, pandaActor, NodePath());
pandaPosInterval1->set_start_pos(LPoint3f(0, 10, 0));
pandaPosInterval1->set_end_pos(LPoint3f(0, -10, 0));
pandaPosInterval2 = new CLerpNodePathInterval("pandaPosInterval2",
13.0, CLerpInterval::BT_no_blend,
true, false, pandaActor, NodePath());
pandaPosInterval2->set_start_pos(LPoint3f(0, -10, 0));
pandaPosInterval2->set_end_pos(LPoint3f(0, 10, 0));
pandaHprInterval1 = new CLerpNodePathInterval("pandaHprInterval1", 3.0,
CLerpInterval::BT_no_blend,
true, false, pandaActor, NodePath());
pandaHprInterval1->set_start_hpr(LPoint3f(0, 0, 0));
pandaHprInterval1->set_end_hpr(LPoint3f(180, 0, 0));
pandaHprInterval2 = new CLerpNodePathInterval("pandaHprInterval2", 3.0,
CLerpInterval::BT_no_blend,
true, false, pandaActor, NodePath());
pandaHprInterval2->set_start_hpr(LPoint3f(180, 0, 0));
pandaHprInterval2->set_end_hpr(LPoint3f(0, 0, 0));
// Create and play the sequence that coordinates the intervals
PT(CMetaInterval) pandaPace;
pandaPace = new CMetaInterval("pandaPace");
pandaPace->add_c_interval(pandaPosInterval1, 0,
CMetaInterval::RS_previous_end);
pandaPace->add_c_interval(pandaHprInterval1, 0,
CMetaInterval::RS_previous_end);
pandaPace->add_c_interval(pandaPosInterval2, 0,
CMetaInterval::RS_previous_end);
pandaPace->add_c_interval(pandaHprInterval2, 0,
CMetaInterval::RS_previous_end);
pandaPace->loop();
// Add our task.
taskMgr->add(new GenericAsyncTask("Spins the camera",
&SpinCameraTask, (void*) NULL));
// This is a simpler way to do stuff every frame,
// if you're too lazy to create a task.
Thread *current_thread = Thread::get_current_thread();
while(framework.do_frame(current_thread)) {
// Step the interval manager
CIntervalManager::get_global_ptr()->step();
}
framework.close_framework();
return (0);
}
@bkeys
Copy link

bkeys commented Apr 30, 2016

How do you compile this?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment