forked from panda3d/panda3d
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathINSTALL-PP
More file actions
885 lines (692 loc) · 37.6 KB
/
INSTALL-PP
File metadata and controls
885 lines (692 loc) · 37.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
///////////////////////////////////////////////////////////////////////
// Caution: there are two separate, independent build systems:
// 'makepanda', and 'ppremake'. Use one or the other, do not attempt
// to use both. This file is part of the 'ppremake' system.
///////////////////////////////////////////////////////////////////////
Panda3D Install --- using the 'ppremake' system.
This document describes how to compile and install Panda 3D on a
system for the first time. Panda is a complex project and is not
trivial to install, although it is not really very difficult. Please
do take the time to read this document before starting.
Panda is known to build successfully on Linux, SGI Irix, and Windows
NT/2000/XP. It should also be easily portable to other Unix-based
OpenGL systems with little or no changes (please let us know if you
try this). When compiled by Windows NT/2000/XP, it will then run on a
Windows 98 system, but we have found that Windows 98 is not itself
stable enough to compile the codebase without crashing.
Before you begin to compile Panda, there are a number of optional
support libraries that you may wish to install. None of these are
essential; Panda will build successfully without them, but possibly
without some functionality.
* Python. Panda is itself a C++ project, but it can generate a
seamless Python interface layer to its C++ objects and function
calls. Since Python is an interpreted language with a command
prompt, this provides an excellent way to get interactive control
over the 3-D environment. However, it is not necessary to use the
Python interface; Panda is also perfectly useful without Python, as
a C++ 3-D library.
Other scripting language interfaces are possible, too, in theory.
Panda can generate an interface layer for itself that should be
accessible by any scripting language that can make C function calls
to an external library. We have used this in the past, for
instance, to interface Panda with Squeak, an implementation of
Smalltalk. At the present, the Python interface is the only one we
actively maintain. We use Python 2.2, but almost any version should
work; you can get Python at http://www.python.org .
* NSPR. This is the Netscape Portable Runtime library, an OS
compatibility layer written by the folks at Mozilla for support of
the Netscape browser on different platforms. Panda takes advantage
of NSPR to implement threading and network communications. At the
present, if you do not have NSPR available Panda will not be able to
fork threads and will not provide a networking interface. Aside
from that, the PStats analysis tools (which depend on networking)
will not be built without NSPR. We have compiled Panda with NSPR
version 3 and 4.0, although other versions should also work. You
can download NSPR from http://www.mozilla.org/projects/nspr/ .
* VRPN, the "Virtual Reality Peripheral Network," a peripheral
interface library designed by UNC. This is particularly useful for
interfacing Panda with external devices like trackers and joysticks;
without it, Panda can only interface with the keyboard and mouse.
You can find out about it at http://www.cs.unc.edu/Research/vrpn .
* libjpeg, libtiff, libpng. These free libraries provide support to
Panda for reading and writing JPEG, TIFF, and PNG image files, for
instance for texture images. Even without these libraries, Panda
has built-in support for pbm/pgm/ppm, SGI (rgb), TGA, BMP, and a few
other assorted image types like Alias and SoftImage native formats.
Most Linux systems come with these libraries already installed, and
the version numbers of these libraries is not likely to be
important. You can download libjpeg from the Independent JPEG group
at http://www.ijg.org , libtiff from SGI at
ftp://ftp.sgi.com/graphics/tiff , and libpng from
http://www.libpng.org .
* zlib. This very common free library provides basic
compression/decompression routines, and is the basis for the Unix
gzip tool (among many other things). If available, Panda uses it to
enable storing compressed files within its native multifile format,
as well as in a few other places here and there. It's far from
essential. If you don't have it already, you can get it at
http://www.gzip.org/zlib .
* Fmod. This is a free sound library that our friends at CMU have
recently integrated into Panda. It provides basic support for
playing WAV files, MP3 files, and MIDI files within Panda. Get it
at http://www.fmod.org .
* Freetype. This free library provides support for loading TTF font
files (as well as many other types of font files) directly for
rendering text within Panda (using Panda's TextNode interface, as
well as the whole suite of DirectGui 2-d widgets in direct). If you
do not have this library, you can still render text in Panda, but
you are limited to using fonts that have been pre-generated and
stored in egg files. There are a handful of provided font files of
this nature in the models directory (specifically, cmr12, cmss12,
and cmtt12); these were generated from some of the free fonts
supplied with TeX. This can be found at http://www.freetype.org ;
you will need at least version 2.0.
* OpenSSL. This free library provides an interface to secure SSL
communications (as well as a normal, unsecured TCP/IP library). It
is used to implement the HTTP client code in Panda for communicating
with web servers and/or loading files directly from web servers, in
both normal http and secure https modes. It also provides some
basic encryption services, allowing encrypted files to be stored in
metafiles (for instance). If you do not have any need to contact
web servers with your Panda client, and you have no interest in
encryption, you do not need to install this library. Find it at
http://www.openssl.org . We used version 0.9.6 or 0.9.7, but if
there is a more recent version it should be fine.
* FFTW, the "Fastest Fourier Transform in the West". This free
whimsically-named library provides the mathematical support for
compressing animation tables into Panda's binary bam format. If
enabled, animation tables can be compressed in a lossy form similar
to jpeg, which provides approximately a 5:1 compression ratio better
than gzip alone even at the most conservative setting. If you don't
need to have particularly small animation files, you don't need this
library. Get it at http://www.fftw.org .
* Gtk--. This is a C++ graphical toolkit library, and is only used
for one application, the PStats viewer for graphical analysis of
real-time performance, which is part of the pandatool package.
Gtk-- only compiles on Unix, and primarily Linux; it is possible to
compile it with considerable difficulty on Irix. (On Windows, you
don't need this, since you will use the pstats viewer built in the
win-stats subdirectory instead.) We have used version 1.2.1. You
can find it at http://www.gtkmm.org .
PANDA'S BUILD PHILOSOPHY
Panda is divided into a number of separate packages, each of which
compiles separately, and each of which generally depends on the ones
before it. The packages are, in order:
dtool - this defines most of the build scripts and local
configuration options for Panda. It also includes the program
"interrogate," which is used to generate the Python interface, as
well as some low-level libraries that are shared both by
interrogate and Panda. It is a fairly small package.
panda - this is the bulk of the C++ Panda code. It contains the 3-D
engine itself, as well as supporting C++ interfaces like
networking, audio, and device interfaces. Expect this package to
take from 30 to 60 minutes to build from scratch. You must build
and install dtool before you can build panda.
direct - this is the high-level Python interface to Panda. Although
there is some additional C++ interface code here, most of the code
in this package is Python; there is no reason to install this
package if you are not planning on using the Python interface.
DIRECT is an acronym, and has nothing to do with DirectX.
You must build and install dtool and panda before you can build
direct.
pandatool - this is a suite of command-line utilities, written in
C++ using the Panda libraries, that provide useful support
functionality for Panda as a whole, like model-conversion
utilities. You must build and install dtool and panda before you
can build pandatool, although it does not depend on direct.
pandaapp - this holds a few sample applications that link with panda
(and pandatool), but are not generally useful enough to justify
putting them in pandatool. Most of these are not actually
graphical applications; they just take advantage of the various
support libraries (like HTTPClient) that Panda provides. At the
moment, most people probably won't find anything useful here, but
you're welcome to browse; and we will probably add more
applications later. You must build and install dtool, panda, anda
pandatool before you can build pandaapp.
In graphical form, here are the packages along with a few extras:
+------------------------------+
| Your Python Application Here |
+------------------------------+
|
| +-----------+
| | pandaapp |
| +-----------+
| |
V V
+--------+ +-----------+ +---------------------------+
| direct | | pandatool | | Your C++ Application Here |
+--------+ +-----------+ +---------------------------+
| | |
+-------------+-------------------/
V
+-------+
| panda |
+-------+
|
V
+-------+
| dtool |
+-------+
The arrows above show dependency.
Usually, these packages will be installed as siblings of each other
within the same directory; the build scripts expect this by default,
although other installations are possible.
In order to support multiplatform builds, we do not include makefiles
or project files with the sources. Instead, all the compilation
relationships are defined in a series of files distributed throughout
the source trees, one per directory, called Sources.pp.
A separate program, called ppremake ("Panda pre-make") reads the
various Sources.pp files, as well as any local configuration
definitions you have provided, and generates the actual makefiles that
are appropriate for the current platform and configuration. It is
somewhat akin to the idea of GNU autoconf ("configure"), although it
is both less automatic and more general, and it supports non-Unix
platforms easily.
HOW TO CONFIGURE PANDA FOR YOUR ENVIRONMENT
When you run ppremake within a Panda source tree, it reads in a number
of configuration variable definitions given in the file Config.pp in
the root of the dtool package, as well as in a custom Config.pp file
that you specify. Many of the variables in dtool/Config.pp will
already have definitions that are sensible for you; some will not.
You must customize these variables before you run ppremake.
Normally, rather than modifying dtool/Config.pp directly, you should
create your own, empty Config.pp file. By default, this file should
be stored in the root of the Panda install directory, as specified
when you built ppremake, but you may put it elsewhere if you prefer by
setting the environment variable PPREMAKE_CONFIG to its full filename
path (more on this in the platform-specific installation notes,
below).
The definitions you give in your personal Config.pp file will override
those given in the file within dtool. It is also possible simply to
modify dtool/Config.pp, but this is not recommended as it makes it
difficult to remember which customizations you have made, and makes
installing updated versions of Panda problematic.
The syntax of the Config.pp file is something like a cross between the
C preprocessor and Makefile syntax. The full syntax of ppremake input
scripts is described in more detail in another document, but the most
common thing you will need to do is set the value of a variable using
the #define statement (or the mostly equivalent #defer statement).
Look in dtool/Config.pp for numerous examples of this.
Some of the variables you may define within the Config.pp file hold a
true or a false value by nature. It is important to note that you
indicate a variable is true by defining it to some nonempty string
(e.g. "yes" or "1"), and false by defining it to nothing. For
example:
#define HAVE_DX9 1
Indicates you have the DirectX SDK installed, while
#define HAVE_DX9
Indicates you do not. Do not be tempted to define HAVE_DX9 to no or 0;
since these are both nonempty strings, they are considered to
represent true! Also, don't try to use a pair of quotation marks to
represent the empty string, since the quotation marks become part of
the string (which is thus nonempty).
The comments within dtool/Config.pp describe a more complete list of
the variables you may define. The ones that you are most likely to
find useful are:
INSTALL_DIR - this is the prefix of the directory hierarchy into
which Panda should be installed. If this is not defined, the
default value is compiled into ppremake. A full description on
setting this parameter is given below in the section describing
how to build ppremake. On Unix systems this is taken from the
--prefix parameter to configure (usually /usr/local/panda); for
Windows users it is specified in config_msvc.h, and is set to
C:\Panda3d unless you modify it.
OPTIMIZE - define this to 1, 2, 3, or 4. This is not the same thing
as compiler optimization level; our four levels of OPTIMIZE define
broad combinations of compiler optimizations and debug symbols:
1 - No compiler optimizations, full debug symbols
Windows: debug heap
2 - Full compiler optimizations, debug symbols
Windows: debug heap
3 - Full compiler optimizations,
Unix: no debug symbols
Windows: non-debug heap, debug symbols available in pdb files
4 - Full optimizations, no debug symbols, and asserts removed
Windows: non-debug heap
Usually OPTIMIZE 3 is the most appropriate choice for development
work. We recommend OPTIMIZE 4 only for final QA and/or
distribution of a shippable product, never for any development or
alpha testing; and we recommend OPTIMIZE levels 1 and 2 only for
active development of the C++ code within Panda.
PYTHON_IPATH / PYTHON_LPATH / PYTHON_LIBS - the full pathname to
Python header files, if Python is installed on your system. As of
Python version 2.0, compiling Python interfaces doesn't require
linking with any special libraries, so normally PYTHON_LPATH and
PYTHON_LIBS are left empty. You definitely need to set
PYTHON_IPATH, however, if you wish to compile Panda so that it can
be used from Python.
NSPR_IPATH / NSPR_LPATH / NSPR_LIBS - the full pathname to NSPR
header and library files, and the name of the NSPR library, if
NSPR is installed on your system.
VRPN_IPATH / VRPN_LPATH / VRPN_LIBS - the full pathname to VRPN
header and library files, and the name of the VRPN libraries, if
VRPN is installed on your system.
DX9_IPATH / DX9_LPATH / DX9_LIBS - the full pathname to the
DirectX 9 SDK header and library files, if you have installed
this SDK. (You must currently install this SDK in order to
build DirectX9 support for Panda.)
GL_IPATH / GL_LPATH / GL_LIBS - You get the idea. (Normally, OpenGL
is installed in the standard system directories, so you can leave
GL_IPATH and GL_LPATH empty. But if they happen to be installed
somewhere else on your machine, you can fill in the pathnames
here.)
Similar *_IPATH / *_LPATH / *_LIBS variables for other optional
third-party libraries.
HOW TO BUILD PANDA ON A UNIX SYSTEM
First, make a subdirectory to hold the Panda sources. This can be
anywhere you like; in these examples, we'll assume you build
everything within a directory called "panda3d" in your home directory.
mkdir ~/panda3d
You should also create the directory into which panda should be
installed. The default installation directory is /usr/local/panda.
You may choose an alternate installation directory by using the
--prefix parameter to the ppremake configure script, described below.
We recommend giving yourself write permission to this directory, so
that you can run 'make install' and similar scripts that will need to
write to this installation directory, without having to be root.
su root
mkdir /usr/local/panda
chown <your-user-name> /usr/local/panda
exit
Whatever you choose for your installation directory, you should make
sure the bin directory (e.g. /usr/local/panda/bin) is included on your
search path, and the lib directory (e.g. /usr/local/panda/lib) is on
your LD_LIBRARY_PATH. If you use a C-shell derivative like tcsh, the
syntax for this is:
set path=(/usr/local/panda/bin $path)
setenv LD_LIBRARY_PATH /usr/local/panda/lib:$LD_LIBRARY_PATH
If you have a Bourne-shell derivative, e.g. bash, the syntax is:
PATH=/usr/local/panda/bin:$PATH
LD_LIBRARY_PATH=/usr/local/panda/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
You must now compile ppremake before you can begin to compile Panda
itself. Generally, you do something like the following:
cd ~/panda3d/ppremake
./configure
make
make install
If the configure script does not already exist, read the document
BUILD_FROM_CVS.txt in the ppremake source directory.
As mentioned above, the default installation directory is
/usr/local/panda. Thus, ppremake will install itself into
/usr/local/panda/bin. If you prefer, you can install Panda into
another directory by doing something like this:
./configure --prefix=/my/install/directory
make
make install
Now you should create your personal Config.pp file, as described
above, and customize whatever variables are appropriate. By default,
ppremake will look for this file in the root of the install directory,
e.g. /usr/local/panda/Config.pp. If you want to put it somewhere
else, for instance in your home directory, you must set the
PPREMAKE_CONFIG environment variable to point to it:
setenv PPREMAKE_CONFIG ~/Config.pp
In bash:
PPREMAKE_CONFIG=~/Config.pp
export PPREMAKE_CONFIG
You may find it a good idea to make this and other environment
settings in your .cshrc or .bashrc file so that they will remain set
for future sessions.
Now you can test the configuration settings in your Config.pp file:
cd ~/panda3d/dtool
ppremake
When you run ppremake within the dtool directory, it will generate a
file, dtool_config.h (as well as all of the Makefiles). This file
will be included by all of the Panda3D sources, and reveals the
settings of many of the options you have configured. You should
examine this file now to ensure that your settings have been made the
way you expect.
Note that ppremake will also try to create several subdirectories in
the install directory, so you must have write access to the install
directory in order for ppremake to run completely successfully. If
you did not choose to give yourself write access to the install
directory, you may run ppremake as root; in this case we recommend
running ppremake first as a normal user in order to compile, and then
running ppremake again as root just before running make install as
root.
Now that you have run ppremake, you can build the Panda3D sources.
Begin with dtool (the current directory):
make
make install
Once you have successfully built and installed dtool, you can then
build and install panda:
cd ~/panda3d/panda
ppremake
make
make install
After installing panda, you are almost ready to run the program
"pview," which is a basic model viewer program that demonstrates some
Panda functionality (see HOW TO RUN PANDA, below). Successfully
running pview proves that Panda is installed and configured correctly
(at least as a C++ library).
If you wish, you may also build direct. You only need to build this
if you intend to use the Python interfaces.
cd ~/panda3d/direct
ppremake
make
make install
And you may build pandatool. You only need to build this if you want
to take advantage of model conversion utilities for Panda like
maya2egg and egg2bam, or if you want to use other tools like pstats.
cd ~/panda3d/pandatool
ppremake
make
make install
HOW TO BUILD PANDA ON A WINDOWS SYSTEM, USING CYGWIN
Cygwin is a set of third-party libraries and tools that present a very
Unix-like environment for Windows systems. If you prefer to use a
Unix environment, Cygwin is the way to go. You can download Cygwin
for free from http://www.cygwin.com.
Panda can build and run within a Cygwin environment, but it does not
require it. Note that Cygwin is used strictly as a build environment;
the Cygwin compiler is not used, so no dependency on Cygwin will be
built into Panda. The Panda DLL's that you will generate within a
Cygwin environment will be exactly the same as those you would
generate in a non-Cygwin environment; once built, Panda will run
correctly on any Win32 machine, with or without Cygwin installed.
If you do not wish to install Cygwin for your build environment, see
the instructions below.
If you wish to use Cygwin, there is one important point to keep in
mind. Panda internally uses a Unix-like filename convention; that is,
forward slashes (instead of backslashes) separate directory
components, and there is no leading drive letter on any filename.
These Unix-like filenames are mapped to Windows filenames (with drive
letters and backslashes) when system calls are made.
Cygwin also uses a Unix-like filename convention, and uses a series of
mount commands to control the mapping of Unix filenames to Windows
filenames. Panda is not itself a Cygwin program, and does not read
the Cygwin mount definitions.
That's important enough it's worth repeating. Panda is not aware of
the Cygwin mount points. So a Unix-like filename that makes sense to
a Cygwin command may not be accessible by the same filename from
within Panda.
However, you can set things up so that most of the time, Cygwin and
Panda agree, which is convenient. To do this, it is important to
understand how Panda maps Unix-like filenames to Windows filenames.
* Any relative pathname (that is, a pathname that does not begin
with a leading slash) is left unchanged, except to reverse the
slashes.
* Any full pathname whose topmost directory component is *not* a
single letter is prepended with the contents of the environment
variable PANDA_ROOT.
* Any full pathname whose topmost directory component *is* a single
letter is turned into a drive letter and colon followed by the
remainder of the path. For example, /c/windows/system is turned
into C:\windows\system.
The expectation is that most of the files you will want to access
within Panda will all be within one directory structure, which you
identify by setting the PANDA_ROOT variable. Generally, when you are
using Cygwin, you will want to set this variable to be the same thing
as the root of your Cygwin tree.
For instance, typically Cygwin installs itself in C:\Cygwin. This
means that when you reference the directory /usr/local/bin within
Cygwin, you are actually referring to C:\Cygwin\usr\local\bin. You
should therefore set PANDA_ROOT to C:\Cygwin, so that /usr/local/bin
within Panda will also refer to C:\Cygwin\usr\local\bin.
To sum up: to use Panda within a Cygwin environment,
In tcsh:
setenv PANDA_ROOT 'C:\Cygwin'
or in bash:
PANDA_ROOT='C:\Cygwin'
export PANDA_ROOT
(In fact, you do not actually have to set PANDA_ROOT if Cygwin is
installed into C:\Cygwin, since this is Panda's default behavior if
C:\Cygwin exists. But it's important to understand what Panda is
doing to remap directories, and in particular that there is no
relationship to any actual Cygwin mount points.)
There is one additional point: you will need to ensure that the Visual
Studio command-line utilities (like cl.exe) are available on your
path. Set your path appropriately to point to them, if necessary (or
run vcvars32.bat to do it for you; see the paragraph below.)
Follow the instructions under HOW TO BUILD PANDA FOR A UNIX
ENVIRONMENT, above.
HOW TO BUILD PANDA ON A WINDOWS SYSTEM, WITHOUT CYGWIN
You will have to make sure that you installed the command-line
utilities on your system path when you installed Visual Studio, or you
can run the batch file vcvars32.bat to put these utilities on your
path for the current session (this batch file is in a directory like
c:\Program Files\Microsoft Visual Studio .Net\Vc7\bin).
Microsoft provides a command-line make utility with Visual Studio
called nmake, although it's nowhere near as robust as the GNU make
utility provided with Cygwin. But Panda can generate Makefiles that
follow the nmake convention, and will do so by default if your
ppremake was not built with the Cygwin tools.
You will need a directory for holding the installed Panda. This can
be anywhere you like; the default is C:\Panda3d. If you choose to
specify otherwise you should modify the INSTALL_DIR line in
ppremake\config_msvc.h before you build ppremake (below).
(Alternatively, you can leave ppremake alone and simply redefine
INSTALL_DIR in your Config.pp file, but then you will also need to
define the environment variable PPREMAKE_CONFIG to point to your
Config.pp.)
md C:\Panda3d
You will first need to build a copy of ppremake.exe. There is a
Microsoft VC7 project file in the ppremake directory that will build
this. Once it is built, copy it to the Panda bin directory (which you
will have to make yourself). This will be a directory called "bin"
below the root of the installed directory you created above; for
instance, C:\Panda3d\bin.
Make sure the Panda bin and lib directories are on your path, and set
a few environment variables for building. We suggest creating a file
called PandaEnv.bat to hold these commands; then you may invoke this
batch file before every Panda session to set up your environment
properly. Alternatively, you may make these definitions in the
registry.
path C:\Panda3d\bin;C:\Panda3d\lib;%PATH%
set PANDA_ROOT=C:\
Setting PANDA_ROOT is optional; it specifies the default drive Panda
will search for file references. (Panda internally uses a Unix-like
filename convention, which does not use leading drive letters. See
the bullet points in the Cygwin section, above, describing the rules
Panda uses to map its Unix-like filenames to Windows filenames.)
Now make a directory for building Panda. This may be different from
the directory, above, that holds the installed Panda files; or it may
be the same. In this example we assume you will be building in the
same directory, C:\Panda3d.
Now set up your personal Config.pp file to control your local
configuration settings, as described above. By default, ppremake will
look for this file in the root of the install directory,
e.g. C:\Panda3d\Config.pp; if you want to put it somewhere else you
should define the environment variable PPREMAKE_CONFIG to the full
path to your Config.pp.
Use your favorite text editor to add the appropriate lines to your
Config.pp to define the correct paths to the various third-party
packages you have installed on your system. See HOW TO CONFIGURE
PANDA FOR YOUR ENVIRONMENT, above.
edit C:\Panda3d\Config.pp
Now you can test the configuration settings in your Config.pp file:
C:
cd \Panda3d\dtool
ppremake
When you run ppremake within the dtool directory, it will generate a
file, dtool_config.h (as well as all of the Makefiles). This file
will be included by all of the Panda3D sources, and reveals the
settings of many of the options you have configured. You should
examine this file now to ensure that your settings have been made the
way you expect.
Now that you have run ppremake, you can build the Panda3D sources.
Begin with dtool (the current directory):
nmake
nmake install
Once you have successfully built and installed dtool, you can then
build and install panda:
cd \Panda3d\panda
ppremake
nmake
nmake install
After installing panda, you are almost ready to run the program
"pview," which is a basic model viewer program that demonstrates some
Panda functionality (see HOW TO RUN PANDA, below). Successfully
running pview proves that Panda is now installed and configured
correctly (at least as a C++ library).
If you wish, you may also build direct. You only need to build this
if you intend to use the Python interfaces.
cd \Panda3d\direct
ppremake
nmake
nmake install
And you may build pandatool. You only need to build this if you want
to take advantage of model conversion utilities for Panda like
maya2egg and egg2bam, or if you want to use other tools like pstats.
cd \Panda3d\pandatool
ppremake
nmake
nmake install
HOW TO RUN PANDA
Once Panda has been successfully built and installed, you should be
able to run pview to test that everything is working (you might need
to type rehash first if you use csh):
pview
If you get an error about some shared library or libraries not being
found, check that your LD_LIBRARY_PATH setting (on Unix) or your PATH
(on Windows) includes the directory in which all of the Panda
libraries have been installed. (This is normally $INSTALL_DIR/lib, or
whatever you set INSTALL_DIR to followed by "lib". On Unix, this
defaults to /usr/local/panda/lib. If you have redefined
INSTALL_LIB_DIR in your Config.pp, for instance to define Panda as a
native Python module, you should use that directory instead.)
If all goes well, pview should open up a window with a blue triangle.
You can use the mouse to move the triangle around. You can also pass
on the command line the name of an egg or bam file, if you have one
(look in the models directory for some sample egg files), and pview
will load up and display the model.
There are several files in the $INSTALL_DIR/etc directory with the
filename extension .prc; these are Panda Runtime Configuration files.
These are different from the Config.pp file, which controls the way
Panda is compiled and is only used at build time. The prc files are
read in every time Panda is started and control the way Panda behaves
at runtime.
The system-defined prc files begin with digits, so that they sort to
the top of the list and are read first (and so that you may define one
or more additional files that are read afterwards and that will
therefore override the values specified in these system files). The
digits also imply an ordering between the prc files. We recommend
that you name your own prc file(s) beginning with letters, unless for
some reason you need a file to be loaded before one of the
system-defined prc files.
We suggest creating a file in $INSTALL_DIR/etc called Config.prc, into
which you will put your own custom configuration options. For
instance, if you want to run using OpenGL instead of the Windows
default of DirectX9, you can add the line:
load-display pandagl
to your Config.prc file. If you choose not to do this at this time,
you can just leave this file empty for now; however, we do recommend
creating at least an empty Config.prc file as a placeholder into which
you can add your custom configuration options later.
The complete list of available configuration options is very large and
is not fully documented; but there are other documents that list
several particularly useful config variables. These are sometimes
referred to as "Configrc" variables because an older Panda convention
named this file Configrc instead of Config.prc.
If you want to load Config.prc from other than the compiled-in default
directory of $INSTALL_DIR/etc, set the environment variable:
PRC_DIR=/my/home/directory
export PRC_DIR
Where /my/home/directory is the name of your home directory (or
wherever you put the Config.prc file). Note that if you redefine
PRC_DIR, you will no longer automatically load the standard prc files
that were installed into $INSTALL_DIR/etc (so you should consider
copying these files into the same directory). It is possible to
configure Panda to search for prc files in more than one directory,
but that's a little more complicated and is outside the scope of this
document.
HOW TO BUILD THE PYTHON INTERFACES
You may stop now if you only intend to use Panda as a C++ library.
However, if you wish to use Panda from within Python, you must now
generate the Python interfaces.
There are two parts to the Python interface for Panda. The first part
is a series of wrapper functions that are compiled into the Panda
libraries themselves, along with associated *.in files that describe
the class hierarchy. If you defined PYTHON_IPATH correctly in your
Config.pp file, then Python should have been detected by ppremake, and
it would have generated makefiles to build these wrappers
automatically. (You would have seen the program "interrogate" running
within each directory as panda was building, and you will have a
number of *.in files now installed into $INSTALL_DIR/etc.)
If, for some reason, the interrogate program did not run, perhaps
because you defined an invalid directory in PYTHON_IPATH, you can go
back and fix this now, and simply re-run ppremake and make install
again in each of dtool, panda, and direct.
To make Panda accessible to Python, you will need to add
$INSTALL_DIR/lib to your PYTHONPATH variable, e.g.:
setenv PYTHONPATH ${PYTHONPATH}:/usr/local/panda/lib
Or, on Windows:
set PYTHONPATH=%PYTHONPATH%;C:\Panda3d\lib
We recommend the PYTHONPATH approach for most users, since it keeps
all of the Panda files within one directory and doesn't clutter up the
Python distribution. However, if you only intend to use Panda from
Python, and especially if you want to make it accessible to multiple
users, it may be more attractive to install the Panda libraries as a
standard Python module, so that it is not necessary to modify your
PYTHONPATH variable; see "Installing Panda as a standard Python
module", below.
The second part to the Python interface is a series of generated
Python wrapper classes, for each C++ class detected by interrogate.
These classes must be generated after all of the C++ code has been
compiled and installed. Execute the following command (you might need
to type rehash first if you use csh):
genPyCode
This is a script that was installed into $INSTALL_DIR/bin as part of
the build of direct. It invokes Python to read the *.in files
generated by interrogate, and generates the appropriate wrapper
functions, which are then written into $INSTALL_DIR/lib/pandac.
(There will be several hundred generated Python modules, which are
normally "squeezed" into a single file called PandaModules.pyz using
PythonWare's SqueezeTool. This squeeze step gives a significant
load-time speedup, especially on Windows; but if it causes problems,
you can use the option -n, e.g. 'genPyCode -n', to avoid it.)
You will need to re-run this script only if the Panda interface
changes, e.g. if a class is added or a method's parameters change.
You should certainly re-run it any time you update and install a new
version of Panda.
Installing Panda as a native Python module
Panda can be optionally configured to install its run-time interfaces
into the Python installation directory, instead of into the normal
$INSTALL_DIR/lib directory. This means you can run Panda from Python
without having to set your PYTHONPATH variable, but it does clutter up
your Python distribution a bit.
To do this, simply add something like the following line to your
Config.pp:
#define INSTALL_LIB_DIR /usr/lib/python2.2/site-packages
Where you give the actual path to the site-packages directory for your
particular installation of Python. On Windows, this will probably
look something like this:
#define INSTALL_LIB_DIR C:\Python22\Lib\site-packages
Then go back and re-run ppremake and make install in each of dtool,
panda, and direct, and then re-run genPyCode, to install the Panda
libraries and Python files directly into the Python site-packages
directory.
You may also need to set your LD_LIBRARY_PATH (on Unix) or PATH (on
Windows) to reference this new directory instead of $INSTALL_DIR/lib,
especially if you want to be able to run any of the Panda standalone
programs occasionally, like pview or any of the model converters.
Unix users should note that you must have write permission to the
site-packages directory in order to install files there. You may
choose to run these install steps (ppremake, make install, genPyCode)
as root to avoid this problem. If you encounter difficulty running
genPyCode as root, make sure that you still have LD_LIBRARY_PATH
defined appropriately once you have become root.
Testing the Python interface
Assuming that you have already set up your Config.prc file and tested
that pview works, as described above in HOW TO RUN PANDA, you should
now be ready to try to run Panda from within Python. Start up a
Python shell and type the following command:
Python 2.2.2 (#37, Feb 10 2003, 18:00:06) [MSC 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import direct.directbase.DirectStart
You should see a graphics window come up, very similar to the one you
saw when you ran pview. To load a particular model file into the
scene, try something like this:
>>> m = loader.loadModel('/c/Panda3d/models/smiley.egg')
>>> m.reparentTo(render)
>>> run()
Note that Panda expects a forward-slash convention for pathnames, with
no leading drive letter, even on a Windows system. See the full
description of how Panda maps these pathnames to Windows pathnames in
HOW TO BUILD PANDA ON A WINDOWS SYSTEM, USING CYGWIN, above.
You can now move the scene around with the mouse, just as in pview
(you may need to pull the camera back by dragging upwards while
holding down the right mouse button in order to see the model).
Congratulations! Panda 3D is now successfully installed. See the
online documentation available at http://www.etc.cmu.edu/panda3d/ for
more help about where to go next.