mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 10:54:24 -04:00
Stub code for AR Toolkit support
This commit is contained in:
parent
e32bf5cbf3
commit
a80fa17906
@ -13,6 +13,7 @@
|
||||
#define SOURCES \
|
||||
pipeOcclusionCullTraverser.I pipeOcclusionCullTraverser.h \
|
||||
cardMaker.I cardMaker.h \
|
||||
arToolKit.I arToolKit.h \
|
||||
config_grutil.h \
|
||||
ffmpegTexture.I ffmpegTexture.h \
|
||||
movieTexture.I movieTexture.h \
|
||||
@ -27,6 +28,7 @@
|
||||
|
||||
#define INCLUDED_SOURCES \
|
||||
cardMaker.cxx \
|
||||
arToolKit.cxx \
|
||||
ffmpegTexture.cxx \
|
||||
movieTexture.cxx \
|
||||
fisheyeMaker.cxx \
|
||||
@ -42,6 +44,7 @@
|
||||
|
||||
#define INSTALL_HEADERS \
|
||||
cardMaker.I cardMaker.h \
|
||||
arToolKit.I arToolKit.h \
|
||||
ffmpegTexture.I ffmpegTexture.h \
|
||||
movieTexture.I movieTexture.h \
|
||||
fisheyeMaker.I fisheyeMaker.h \
|
||||
|
19
panda/src/grutil/arToolKit.I
Normal file
19
panda/src/grutil/arToolKit.I
Normal file
@ -0,0 +1,19 @@
|
||||
// Filename: arToolKit.I
|
||||
// Created by: jyelon (01Nov2007)
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// PANDA 3D SOFTWARE
|
||||
// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved
|
||||
//
|
||||
// All use of this software is subject to the terms of the Panda 3d
|
||||
// Software license. You should have received a copy of this license
|
||||
// along with this source code; you will also find a current copy of
|
||||
// the license at http://etc.cmu.edu/panda3d/docs/license/ .
|
||||
//
|
||||
// To contact the maintainers of this program write to
|
||||
// panda3d-general@lists.sourceforge.net .
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
169
panda/src/grutil/arToolKit.cxx
Normal file
169
panda/src/grutil/arToolKit.cxx
Normal file
@ -0,0 +1,169 @@
|
||||
// Filename: arToolKit.cxx
|
||||
// Created by: jyelon (01Nov2007)
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// PANDA 3D SOFTWARE
|
||||
// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved
|
||||
//
|
||||
// All use of this software is subject to the terms of the Panda 3d
|
||||
// Software license. You should have received a copy of this license
|
||||
// along with this source code; you will also find a current copy of
|
||||
// the license at http://etc.cmu.edu/panda3d/docs/license/ .
|
||||
//
|
||||
// To contact the maintainers of this program write to
|
||||
// panda3d-general@lists.sourceforge.net .
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifdef HAVE_ARTOOLKIT
|
||||
|
||||
#include "arToolKit.h"
|
||||
#include "pandaNode.h"
|
||||
#include "camera.h"
|
||||
#include "config_grutil.h"
|
||||
extern "C" {
|
||||
#include "artools.h"
|
||||
};
|
||||
|
||||
ARToolKit::PatternTable ARToolKit::_pattern_table;
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: ARToolKit::Constructor
|
||||
// Access: Private
|
||||
// Description:
|
||||
////////////////////////////////////////////////////////////////////
|
||||
ARToolKit *ARToolKit::
|
||||
make(NodePath camera, const Filename ¶mfile) {
|
||||
if (camera.is_empty()) {
|
||||
grutil_cat.error() << "ARToolKit: invalid camera nodepath\n";
|
||||
return 0;
|
||||
}
|
||||
PandaNode *node = camera.node();
|
||||
if ((node == 0) || (node->get_type() != Camera::get_class_type())) {
|
||||
grutil_cat.error() << "ARToolKit: invalid camera nodepath\n";
|
||||
return 0;
|
||||
}
|
||||
|
||||
ARParam wparam;
|
||||
string fn = paramfile.to_os_specific();
|
||||
if( arParamLoad(fn.c_str(), 1, &wparam) < 0 ) {
|
||||
grutil_cat.error() << "Cannot load ARToolKit camera config\n";
|
||||
return 0;
|
||||
}
|
||||
|
||||
ARToolKit *result = new ARToolKit();
|
||||
result->_camera = camera;
|
||||
result->_camera_param = new ARParam;
|
||||
memcpy(result->_camera_param, &wparam, sizeof(wparam));
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: ARToolKit::cleanup
|
||||
// Access: private
|
||||
// Description: Pre-destructor deallocation and cleanup.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
void ARToolKit::
|
||||
cleanup() {
|
||||
if (_camera_param) {
|
||||
ARParam *param = (ARParam *)_camera_param;
|
||||
delete param;
|
||||
_camera_param = 0;
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: ARToolKit::Constructor
|
||||
// Access: Private
|
||||
// Description: Use ARToolKit::make to create an ARToolKit.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
ARToolKit::
|
||||
ARToolKit() {
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: ARToolKit::Destructor
|
||||
// Access: Published
|
||||
// Description:
|
||||
////////////////////////////////////////////////////////////////////
|
||||
ARToolKit::
|
||||
~ARToolKit() {
|
||||
cleanup();
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: ARToolKit::get_pattern
|
||||
// Access: Private
|
||||
// Description: Load the specified pattern into the toolkit, and
|
||||
// return the pattern index. Initially, the pattern
|
||||
// is inactive.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
int ARToolKit::
|
||||
get_pattern(const Filename &filename) {
|
||||
PatternTable::iterator ptf = _pattern_table.find(filename);
|
||||
if (ptf != _pattern_table.end()) {
|
||||
return (*ptf).second;
|
||||
}
|
||||
|
||||
string fn = filename.to_os_specific();
|
||||
int id = arLoadPatt(fn.c_str());
|
||||
if (id < 0) {
|
||||
grutil_cat.error() << "Could not load AR ToolKit Pattern: " << fn << "\n";
|
||||
return -1;
|
||||
}
|
||||
arDeactivatePatt(id);
|
||||
_pattern_table[filename] = id;
|
||||
return id;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: ARToolKit::attach_pattern
|
||||
// Access: Public
|
||||
// Description: Associates the specified glyph with the specified
|
||||
// NodePath. Each time you call analyze, ARToolKit
|
||||
// will update the NodePath's transform. If the node
|
||||
// is not visible, its scale will be set to zero.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
void ARToolKit::
|
||||
attach_pattern(const Filename &filename, NodePath path) {
|
||||
int patt = get_pattern(filename);
|
||||
if (patt < 0) return;
|
||||
_controls[patt] = path;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: ARToolKit::detach_patterns
|
||||
// Access: Public
|
||||
// Description: Dissociates all patterns from all NodePaths.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
void ARToolKit::
|
||||
detach_patterns() {
|
||||
_controls.clear();
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: ARToolKit::analyze
|
||||
// Access: Public
|
||||
// Description: Analyzes the non-pad region of the specified texture.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
void ARToolKit::
|
||||
analyze(Texture *tex, double thresh) {
|
||||
nassertv(tex->get_texture_type() == Texture::TT_2d_texture);
|
||||
nassertv(tex->get_component_type() == Texture::T_unsigned_byte);
|
||||
nassertv(tex->get_num_components() >= 3);
|
||||
|
||||
int xsize = tex->get_x_size() - tex->get_pad_x_size();
|
||||
int ysize = tex->get_y_size() - tex->get_pad_y_size();
|
||||
nassertv((xsize > 0) && (ysize > 0));
|
||||
|
||||
ARParam cparam;
|
||||
arParamChangeSize( (ARParam*)_camera_param, xsize, ysize, &cparam );
|
||||
arInitCparam( &cparam );
|
||||
|
||||
cerr << "Analyze video " << xsize << " x " << ysize << "\n";
|
||||
}
|
||||
|
||||
|
||||
#endif // HAVE_ARTOOLKIT
|
74
panda/src/grutil/arToolKit.h
Normal file
74
panda/src/grutil/arToolKit.h
Normal file
@ -0,0 +1,74 @@
|
||||
// Filename: arToolKit.h
|
||||
// Created by: jyelon (01Nov2007)
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// PANDA 3D SOFTWARE
|
||||
// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved
|
||||
//
|
||||
// All use of this software is subject to the terms of the Panda 3d
|
||||
// Software license. You should have received a copy of this license
|
||||
// along with this source code; you will also find a current copy of
|
||||
// the license at http://etc.cmu.edu/panda3d/docs/license/ .
|
||||
//
|
||||
// To contact the maintainers of this program write to
|
||||
// panda3d-general@lists.sourceforge.net .
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef ARTOOLKIT_H
|
||||
#define ARTOOLKIT_H
|
||||
|
||||
#ifdef HAVE_ARTOOLKIT
|
||||
|
||||
#include "pandabase.h"
|
||||
#include "nodePath.h"
|
||||
#include "texture.h"
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Class : ARToolKit
|
||||
// Description : ARToolKit is a software library for building
|
||||
// Augmented Reality (AR) applications. These are
|
||||
// applications that involve the overlay of virtual
|
||||
// imagery on the real world. It was developed by
|
||||
// Dr. Hirokazu Kato. Its ongoing development is
|
||||
// being supported by the Human Interface Technology
|
||||
// Laboratory (HIT Lab) at the University of
|
||||
// Washington, HIT Lab NZ at the University of
|
||||
// Canterbury, New Zealand, and ARToolworks, Inc,
|
||||
// Seattle. It is available under a GPL license.
|
||||
// It is also possible to negotiate other licenses
|
||||
// with the copyright holders.
|
||||
//
|
||||
// This class is a wrapper around the ARToolKit
|
||||
// library.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
class EXPCL_PANDA_GRUTIL ARToolKit {
|
||||
|
||||
PUBLISHED:
|
||||
static ARToolKit *make(NodePath camera, const Filename ¶mfile);
|
||||
~ARToolKit();
|
||||
|
||||
void attach_pattern(const Filename &pattern, NodePath path);
|
||||
void detach_patterns();
|
||||
void analyze(Texture *tex, double thresh);
|
||||
|
||||
private:
|
||||
static int get_pattern(const Filename &pattern);
|
||||
ARToolKit();
|
||||
void cleanup();
|
||||
|
||||
typedef pmap<Filename, int> PatternTable;
|
||||
static PatternTable _pattern_table;
|
||||
|
||||
typedef pmap<int, NodePath> Controls;
|
||||
Controls _controls;
|
||||
|
||||
NodePath _camera;
|
||||
void *_camera_param;
|
||||
};
|
||||
|
||||
#include "arToolKit.I"
|
||||
|
||||
#endif // HAVE_ARTOOLKIT
|
||||
#endif // ARTOOLKIT_H
|
@ -1,4 +1,5 @@
|
||||
#include "cardMaker.cxx"
|
||||
#include "arToolKit.cxx"
|
||||
#include "heightfieldTesselator.cxx"
|
||||
#include "config_grutil.cxx"
|
||||
#include "lineSegs.cxx"
|
||||
|
@ -233,6 +233,8 @@ recalculate_image_properties(CDWriter &cdata) {
|
||||
if (y_max > x_max) x_max = y_max;
|
||||
}
|
||||
|
||||
int x_size = x_max;
|
||||
int y_size = y_max;
|
||||
if (textures_power_2 != ATS_none) {
|
||||
x_max = up_to_power_2(x_max);
|
||||
y_max = up_to_power_2(y_max);
|
||||
@ -240,6 +242,7 @@ recalculate_image_properties(CDWriter &cdata) {
|
||||
|
||||
reconsider_image_properties(x_max, y_max, alpha?4:3,
|
||||
T_unsigned_byte, cdata->_pages.size());
|
||||
set_pad_size(x_max - x_size, y_max - y_size);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
Loading…
x
Reference in New Issue
Block a user