Update of /cvsroot/artoolkit/artoolkit/lib/SRC/ARvrml
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2066
Added Files:
arViewerCapi.cpp Makefile.in arViewer.cpp arViewer.h
Log Message:
Added libARvrml.
--- NEW FILE: Makefile.in ---
UNAME = $(shell uname)
AR_HOME = ../../..
AR_CPPFLAGS = -I$(AR_HOME)/include
VRML_HOME = /usr
ifeq "$(UNAME)" "Darwin"
VRML_HOME = /sw
endif
VRML_CPPFLAGS = -I$(VRML_HOME)/include/openvrml -I/usr/X11R6/include
CPPFLAGS = $(AR_CPPFLAGS) $(VRML_CPPFLAGS)
CFLAGS = @CFLAG@
CXXFLAGS = @CFLAG@
AR = ar
ARFLAGS = @ARFLAG@
RANLIB = @RANLIB@
TARGET = $(AR_HOME)/lib/libARvrml.a
HEADERS = \
$(AR_HOME)/include/AR/arvrml.h \
arViewer.h
OBJS = \
arViewer.o \
arViewerCapi.o
# Implicit rule, to compile C++ files with the .cpp suffix (rule already exists for .cc).
%.o : %.cpp
$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $< -o $@
default build all: $(TARGET)
$(OBJS): $(HEADERS)
$(TARGET): $(OBJS)
$(AR) $(ARFLAGS) $@ $^
$(RANLIB) $@
clean:
-rm -f *.o *~ *.bak
-rm $(TARGET)
allclean:
-rm -f *.o *~ *.bak
-rm $(TARGET)
-rm -f Makefile
--- NEW FILE: arViewer.cpp ---
/*
modif:
version 0.14.3
remove vrmlScene since we use reference now.
remove culling pb
*/
/*
*
* This file is part of ARToolKit.
*
* ARToolKit is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* ARToolKit is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with ARToolKit; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
//#ifdef _WIN32
//# include <windows.h>
//#endif
//#include <stdio.h>
//#include <string.h>
#include <iostream>
#include <math.h>
#ifdef __APPLE__
# include <GLUT/glut.h>
#else
# include <GL/glut.h>
#endif
#include "arViewer.h"
using namespace openvrml;
arVrmlViewer::arVrmlViewer(openvrml::browser& browser) : gl::viewer(browser)
{
internal_light = true;
translation[0] = 0.0;
translation[1] = 0.0;
translation[2] = 0.0;
rotation[0] = 0.0;
rotation[1] = 0.0;
rotation[2] = 0.0;
rotation[3] = 0.0;
scale[0] = 1.0;
scale[1] = 1.0;
scale[2] = 1.0;
}
arVrmlViewer::~arVrmlViewer()
{
}
void arVrmlViewer::timerUpdate()
{
this->update(0.0);
}
void arVrmlViewer::setInternalLight(bool flag)
{
internal_light = flag;
}
void arVrmlViewer::redraw()
{
double start = browser::current_time();
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glTranslated( translation[0], translation[1], translation[2] );
if( rotation[0] != 0.0 ) {
glRotated( rotation[0], rotation[1], rotation[2], rotation[3] );
}
glScaled( scale[0], scale[1], scale[2] );
#if USE_STENCIL_SHAPE
glEnable(GL_STENCIL_TEST);
glStencilFunc(GL_ALWAYS, 1, 1);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
#endif
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable( GL_FOG ); // this is a global attribute
glDisable( GL_TEXTURE_2D );
glEnable( GL_CULL_FACE );
glFrontFace( GL_CCW );
glCullFace( GL_BACK );
if( internal_light ) {
if (lit) glEnable( GL_LIGHTING );
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
glEnable(GL_NORMALIZE);
glDisable( GL_COLOR_MATERIAL );
glDisable(GL_BLEND);
glShadeModel( GL_SMOOTH );
for(int i=0; i<max_lights; ++i) {
light_info_[i].type = light_unused;
GLenum light = (GLenum) (GL_LIGHT0 + i);
glDisable( light );
}
}
objects = 0;
nested_objects = 0;
sensitive = 0;
this->browser.render(*this);
if( internal_light ) {
if (lit) glDisable( GL_LIGHTING );
}
glDisable(GL_BLEND);
glDisable( GL_CULL_FACE );
glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE );
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
}
void arVrmlViewer::post_redraw()
{
}
void arVrmlViewer::set_cursor(cursor_style c)
{
}
void arVrmlViewer::swap_buffers()
{
}
void arVrmlViewer::set_timer(double t)
{
}
void arVrmlViewer::set_viewpoint(const openvrml::vec3f & position,
const openvrml::rotation & orientation,
float fieldOfView,
float avatarSize,
float visibilityLimit)
{
}
viewer::object_t arVrmlViewer::insert_background(const std::vector<float> & groundAngle,
const std::vector<openvrml::color> & groundColor,
const std::vector<float> & skyAngle,
const std::vector<openvrml::color> & skyColor,
size_t * whc,
unsigned char ** pixels)
{
return 0;
}
viewer::object_t arVrmlViewer::insert_dir_light(float ambientIntensity,
float intensity,
const openvrml::color & color,
const openvrml::vec3f & direction)
{
if( internal_light ) return gl::viewer::insert_dir_light(ambientIntensity,intensity,color,direction);
return 0;
}
viewer::object_t arVrmlViewer::insert_point_light(float ambientIntensity,
const openvrml::vec3f & attenuation,
const openvrml::color & color,
float intensity,
const openvrml::vec3f & location,
float radius)
{
if( internal_light ) return gl::viewer::insert_point_light(ambientIntensity,attenuation,color,intensity,location,radius);
return 0;
}
viewer::object_t arVrmlViewer::insert_spot_light(float ambientIntensity,
const openvrml::vec3f & attenuation,
float beamWidth,
const openvrml::color & color,
float cutOffAngle,
const openvrml::vec3f & direction,
float intensity,
const openvrml::vec3f & location,
float radius)
{
if( internal_light ) return gl::viewer::insert_spot_light(ambientIntensity,attenuation,beamWidth,color,cutOffAngle, direction, intensity, location, radius);
return 0;
}
bounding_volume::intersection
arVrmlViewer::intersect_view_volume(const bounding_volume & bvolume) const
{
// if( d_cull ) {
//return openvrml::viewer::intersect_view_volume(bvolume);
// }
// else {
return bounding_volume::inside;
//}
}
--- NEW FILE: arViewerCapi.cpp ---
/*
*
* This file is part of ARToolKit.
*
* ARToolKit is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* ARToolKit is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with ARToolKit; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include <AR/arvrml.h>
#include "arViewer.h"
#include <iostream>
#include <vector>
#include <string>
#ifdef __APPLE__
# include <GLUT/glut.h>
#else
# include <GL/glut.h>
#endif
#include <stdio.h>
#include <string.h>
//extern "C" {
//}
#define AR_VRML_MAX 100
static arVrmlViewer *viewer[AR_VRML_MAX];
static int init = 1;
static int vrID = -1;
static char *get_buff( char *buf, int n, FILE *fp );
int arVrmlLoadFile( char *file )
{
FILE *fp;
openvrml::browser * myBrowser = 0;
char buf[256], buf1[256];
char buf2[256];
int id;
int i;
if( init ) {
for( i = 0; i < AR_VRML_MAX; i++ ) viewer[i] = NULL;
init = 0;
}
for( i = 0; i < AR_VRML_MAX; i++ ) {
if( viewer[i] == NULL ) break;
}
if( i == AR_VRML_MAX ) return -1;
id = i;
if( (fp=fopen(file, "r")) == NULL ) return -1;
get_buff(buf, 256, fp);
if( sscanf(buf, "%s", buf1) != 1 ) {fclose(fp); return -1;}
for( i = 0; file[i] != '\0'; i++ ) buf2[i] = file[i];
for( ; i >= 0; i-- ) {
if( buf2[i] == '/' ) break;
}
buf2[i+1] = '\0';
sprintf(buf, "%s%s", buf2, buf1);
myBrowser = new openvrml::browser(std::cout, std::cerr);
if( !myBrowser) {fclose(fp); return -1;}
std::vector<std::string> uri(1, buf);
std::vector<std::string> parameter;
myBrowser->load_url(uri, parameter);
viewer[id] = new arVrmlViewer(*myBrowser);
if(!viewer[id])
{
delete myBrowser;
fclose(fp);
return -1;
}
strcpy( viewer[id]->filename, buf );
get_buff(buf, 256, fp);
if( sscanf(buf, "%lf %lf %lf", &viewer[id]->translation[0],
&viewer[id]->translation[1], &viewer[id]->translation[2]) != 3 ) {
delete viewer[id];
viewer[id] = NULL;
fclose(fp);
return -1;
}
get_buff(buf, 256, fp);
if( sscanf(buf, "%lf %lf %lf %lf", &viewer[id]->rotation[0],
&viewer[id]->rotation[1], &viewer[id]->rotation[2], &viewer[id]->rotation[3]) != 4 ) {
delete viewer[id];
viewer[id] = NULL;
fclose(fp);
return -1;
}
get_buff(buf, 256, fp);
if( sscanf(buf, "%lf %lf %lf", &viewer[id]->scale[0], &viewer[id]->scale[1],
&viewer[id]->scale[2]) != 3 ) {
delete viewer[id];
viewer[id] = NULL;
fclose(fp);
return -1;
}
fclose(fp);
return id;
}
int arVrmlFree( int id )
{
if( viewer[id] == NULL ) return -1;
delete viewer[id];
viewer[id] = NULL;
if( vrID == id ) {
vrID = -1;
}
return 0;
}
int arVrmlTimerUpdate()
{
int i;
for( i = 0; i < AR_VRML_MAX; i++ ) {
if( viewer[i] == NULL ) continue;
viewer[i]->timerUpdate();
}
return 0;
}
int arVrmlDraw( int id )
{
if( viewer[id] == NULL ) return -1;
viewer[id]->redraw();
return 0;
}
int arVrmlSetInternalLight( int flag )
{
int i;
if( flag ) {
for( i = 0; i < AR_VRML_MAX; i++ ) {
if( viewer[i] == NULL ) continue;
viewer[i]->setInternalLight(true);
}
}
else {
for( i = 0; i < AR_VRML_MAX; i++ ) {
if( viewer[i] == NULL ) continue;
viewer[i]->setInternalLight(false);
}
}
return 0;
}
static char *get_buff( char *buf, int n, FILE *fp )
{
char *ret, buf1[256];
for(;;) {
ret = fgets( buf, n, fp );
if( ret == NULL ) return(NULL);
if( sscanf(buf, "%s", buf1) != 1 ) continue;
if( buf1[0] != '#' ) return(ret);
}
}
--- NEW FILE: arViewer.h ---
// -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 4; -*-
/*
*
* This file is part of ARToolKit.
*
* ARToolKit is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* ARToolKit is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with ARToolKit; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#ifndef AR_VRMLINT_H
#define AR_VRMLINT_H
#include <openvrml/browser.h>
#include <openvrml/gl/viewer.h>
#include <openvrml/bounding_volume.h>
class arVrmlViewer : public openvrml::gl::viewer {
public:
arVrmlViewer(openvrml::browser& browser);
~arVrmlViewer();
char filename[512];
double translation[3];
double rotation[4];
double scale[3];
bool internal_light;
void timerUpdate();
void redraw();
void setInternalLight( bool f );
protected:
virtual void post_redraw();
virtual void set_cursor(openvrml::gl::viewer::cursor_style c);
virtual void swap_buffers();
virtual void set_timer(double);
virtual void set_viewpoint(const openvrml::vec3f & position,
const openvrml::rotation & orientation,
float fieldOfView,
float avatarSize,
float visibilityLimit);
virtual viewer::object_t insert_background(const std::vector<float> & groundAngle,
const std::vector<openvrml::color> & groundColor,
const std::vector<float> & skyAngle,
const std::vector<openvrml::color> & skyColor,
size_t * whc = 0,
unsigned char ** pixels = 0);
virtual viewer::object_t insert_dir_light(float ambientIntensity,
float intensity,
const openvrml::color & color,
const openvrml::vec3f & direction);
virtual viewer::object_t insert_point_light(float ambientIntensity,
const openvrml::vec3f & attenuation,
const openvrml::color & color,
float intensity,
const openvrml::vec3f & location,
float radius);
virtual viewer::object_t insert_spot_light(float ambientIntensity,
const openvrml::vec3f & attenuation,
float beamWidth,
const openvrml::color & color,
float cutOffAngle,
const openvrml::vec3f & direction,
float intensity,
const openvrml::vec3f & location,
float radius);
virtual openvrml::bounding_volume::intersection
intersect_view_volume(const openvrml::bounding_volume & bvolume) const;
};
#endif
|