dnl check for OpenGL related libraries
+AM_CONDITIONAL(EXTGL_NEEDED, test "x$ac_cv_header_windows_h" = "xyes")
+
if test "x$HOSTTYPE" = "xmacintosh" ; then
dnl Macintosh OSX
LIBS="$LIBS -framework OpenGL -framework GLUT"
includedir = @includedir@/sky/clouds3d
+EXTRA_DIST = extlg.c
+if EXTGL_NEEDED
+ EXTGL_SOURCE = extgl.c
+else
+ EXTGL_SOURCE =
+endif
+
lib_LIBRARIES = libsgclouds3d.a
include_HEADERS = \
SkyUtil.hpp
libsgclouds3d_a_SOURCES = \
+ $(EXTRA_SOURCE) \
vec3fv.cpp \
mat16fv.cpp \
tri.cpp \
FAIL_RETURN_MSG(SKYRESULT_FAIL, "Error: SkyArchive::Load(): file name is NULL.");
}
FILE* pSrcFile = NULL;
+
+ char buf[512];
+ sprintf(buf,"SkyArchive::Load(%s)",pFileName);
+ SkyTrace(buf);
if (NULL == (pSrcFile = fopen(pFileName, "rb"))) // file opened successfully
{
SkyTrace("Error: SkyArchive::Load(): failed to open file for reading.");
color = p->GetBaseColor();
if (_bUsePhaseFunction) // use the phase function for anisotropic scattering.
- {\r
+ {
eyeDir = cam.Orig;
eyeDir -= p->GetPosition();
eyeDir.Normalize();
*
* If @a rScale does not equal 1.0, then the cloud is scaled by an amount rScale.
*/
+SKYRESULT SkyCloud::Load(const SkyArchive &archive,
+ const sgVec4 *mat,
+ float rScale /* = 1.0f */,
+ bool bLocal /* = false */)
+{
+ unsigned int iNumParticles;
+ Vec3f vecCenter = Vec3f::ZERO;
+ //Vec3f vecCenter;
+ //float rRadius;
+ //archive.FindVec3f("CldCenter", &vecCenter);
+ //archive.FindFloat32("CldRadius", &rRadius);
+
+ //_boundingBox.SetMin(vecCenter - Vec3f(rRadius, rRadius, rRadius));
+ //_boundingBox.SetMax(vecCenter + Vec3f(rRadius, rRadius, rRadius));
+
+ archive.FindUInt32("CldNumParticles", &iNumParticles);
+ if (!bLocal)
+ archive.FindVec3f("CldCenter", &vecCenter);
+
+ Vec3f *pParticlePositions = new Vec3f[iNumParticles];
+ float *pParticleRadii = new float[iNumParticles];
+ Vec4f *pParticleColors = new Vec4f[iNumParticles];
+
+ unsigned int iNumBytes;
+ archive.FindData("CldParticlePositions", ANY_TYPE, (void**const)&pParticlePositions, &iNumBytes);
+ archive.FindData("CldParticleRadii", ANY_TYPE, (void**const)&pParticleRadii, &iNumBytes);
+ archive.FindData("CldParticleColors", ANY_TYPE, (void**const)&pParticleColors, &iNumBytes);
+
+ for (unsigned int i = 0; i < iNumParticles; ++i)
+ {
+ SkyCloudParticle *pParticle = new SkyCloudParticle((pParticlePositions[i] + vecCenter) * rScale,
+ pParticleRadii[i] * rScale,
+ pParticleColors[i]);
+ _boundingBox.AddPoint(pParticle->GetPosition());
+
+ _particles.push_back(pParticle);
+ }
+ // this is just a bad hack to align cloud field from skyworks with local horizon at KSFO
+ // this "almost" works not quite the right solution okay to get some up and running
+ // we need to develop our own scheme for loading and positioning clouds
+ Mat33f rot_mat;
+ Vec3f moveit;
+
+ rot_mat.Set( 1, 0, 0,
+ 0, 0, -1,
+ 0, 1, 0);
+ // flip the y and z axis, clouds now sit in the x-y plane
+ Rotate( rot_mat );
+// rot_mat.Set(mat[0][0], mat[0][1],mat[0][2],
+// mat[1][0], mat[1][1],mat[1][2],
+// mat[2][0], mat[2][1],mat[2][2] );
+ // adjust for lon af KSFO plus -122.357
+// rot_mat.Set( -0.84473f, 0.53519f, 0.0f,
+// -0.53519f, -0.84473f, 0.0f,
+// 0.0f, 0.0f, 1.0f);
+
+ //Rotate( rot_mat );
+
+ // and about x for latitude 37.6135
+// rot_mat.Set( 1.0f, 0.0, 0.0f,
+// 0.0f, 0.7921f, -0.6103f,
+// 0.0f, 0.6103f, 0.7921f);
+
+// Rotate( rot_mat );
+
+ moveit.Set( 1000.0, 0.0, 4050.0 );
+
+ Translate( moveit );
+
+ return SKYRESULT_OK;
+}
+
SKYRESULT SkyCloud::Load(const SkyArchive &archive,
float rScale /* = 1.0f */,
bool bLocal /* = false */)
#include "SkyArchive.hpp"
#include "mat33.hpp"
+#include <plib/sg.h>
+
class SkyMaterial;
class SkyLight;
class SkyRenderableInstance;
SKYRESULT Save(SkyArchive &archive) const;
SKYRESULT Load(const SkyArchive &archive, float rScale = 1.0f, bool bLocal = false);
+ SKYRESULT Load(const SkyArchive &archive, const sgVec4 *mat,
+ float rScale = 1.0f, bool bLocal = false);
void Rotate(const Mat33f& rot);
void Translate(const Vec3f& trans);
*
* Graphics Context Interface. Initializes GL extensions, etc.
*/
+
+#ifdef HAVE_CONFIG_H
+# include <simgear_config.h>
+#endif
+
#include <GL/glut.h>
+#ifndef WIN32
#include <GL/glx.h>
+#endif
//#include "extgl.h"
// materials and structure classes
AddCurrentGLContext();
// Initialize all the extensions and load the functions - JW (file is extgl.c)
- #ifdef _WIN32
+ #ifdef WIN32
glInitialize();
InitializeExtension("GL_ARB_multitexture");
#endif
*/
SkyMaterial* SkyContext::GetCurrentMaterial()
{
- ContextMaterialIterator cmi = _currentMaterials.find(glXGetCurrentContext());
+#ifdef WIN32
+ ContextMaterialIterator cmi = _currentMaterials.find(wglGetCurrentContext());
+#else
+ ContextMaterialIterator cmi = _currentMaterials.find(glXGetCurrentContext());
+#endif
if (_currentMaterials.end() != cmi)
return cmi->second;
else
*/
SkyTextureState* SkyContext::GetCurrentTextureState()
{
- ContextTextureStateIterator ctsi = _currentTextureState.find(glXGetCurrentContext());
+#ifdef WIN32
+ ContextTextureStateIterator ctsi = _currentTextureState.find(wglGetCurrentContext());
+#else
+ ContextTextureStateIterator ctsi = _currentTextureState.find(glXGetCurrentContext());
+#endif
if (_currentTextureState.end() != ctsi)
return ctsi->second;
else
*/
SKYRESULT SkyContext::AddCurrentGLContext()
{
- SkyMaterial *pCurrentMaterial = new SkyMaterial;
- _currentMaterials.insert(std::make_pair(glXGetCurrentContext(), pCurrentMaterial));
-
- SkyTextureState *pCurrentTS = new SkyTextureState;
- _currentTextureState.insert(std::make_pair(glXGetCurrentContext() , pCurrentTS));
- return SKYRESULT_OK;
-}
+ SkyMaterial *pCurrentMaterial = new SkyMaterial;
+#ifdef WIN32
+ _currentMaterials.insert(std::make_pair(wglGetCurrentContext(), pCurrentMaterial));
+#else
+ _currentMaterials.insert(std::make_pair(glXGetCurrentContext(), pCurrentMaterial));
+#endif
+ SkyTextureState *pCurrentTS = new SkyTextureState;
+#ifdef WIN32
+ _currentTextureState.insert(std::make_pair(wglGetCurrentContext() , pCurrentTS));
+#else
+ _currentTextureState.insert(std::make_pair(glXGetCurrentContext() , pCurrentTS));
+#endif
+ return SKYRESULT_OK;
+}
//------------------------------------------------------------------------------
// Function : SkyContext::Register
#ifndef __SKYCONTEXT_HPP__
#define __SKYCONTEXT_HPP__
+#ifdef HAVE_CONFIG_H
+# include <simgear_config.h>
+#endif
+
// warning for truncation of template name for browse info
-#pragma warning( disable : 4786)
+// #pragma warning( disable : 4786)
#include "SkySingleton.hpp"
-#ifdef _WIN32
-#include "extgl.h"
-#endif
-
#include <list>
#include <map>
#include <algorithm>
-// ifdef to replace windows stuff for handles-JW
+#ifdef WIN32
+# include "extgl.h"
+#else
typedef void *HANDLE;
typedef HANDLE *PHANDLE;
#define DECLARE_HANDLE(n) typedef HANDLE n
-
DECLARE_HANDLE(HGLRC);
-// end of ifdef
+#endif
class SkyContext;
class SkyMaterial;
*
* Implementation of a class that maintains the state and operation of a light.
*/
-// #pragma warning( disable : 4786)
+
+#ifdef HAVE_CONFIG_H
+# include <simgear_config.h>
+#endif
+
+#ifdef WIN32
+# ifdef _MSC_VER
+# pragma warning( disable : 4786)
+# endif
+# include "extgl.h"
+#endif
#include "SkyLight.hpp"
#include "SkyMaterial.hpp"
FAIL_RETURN(DisplayWithoutImpostor(Camera::Camera()));
}
else
- {\r//cout << "Using impostor image\n";
+ {//cout << "Using impostor image\n";
if (!_pBackTexture || (bDisplayFrontOfSplit && !_pFrontTexture))
FAIL_RETURN_MSG(SKYRESULT_FAIL, "SkyRenderableInstanceCloud::Display(): missing texture!");
Vec3f x, y, z;
if (!_bScreenImpostor)
- {\r//cout << "Outside the cloud\n";
+ {//cout << "Outside the cloud\n";
z = _vecPosition;
z -= _impostorCam.Orig;
z.Normalize();
{
FAIL_RETURN((*ii)->Display());
}
-\r***/
+***/
_pObjectSpaceBV->Display();
glMatrixMode(GL_MODELVIEW);
bool SkySceneLoader::Load(std::string filename)
{
SkyArchive archive;
+ cout << "SkySceneLoader::Load( " << filename << " )" << endl;
if (SKYFAILED(archive.Load(filename.c_str()))) {
cout << "Archive file not found\n";
- return false; }
+ return false;
+ }
char *pFilename;
// Need to create the managers
+ cout << "GraphicsContext::Instantiate();" << endl;
GraphicsContext::Instantiate();
+ cout << " TextureManager::Instantiate();" << endl;
TextureManager::Instantiate();
+ cout << " DynamicTextureManager::Instantiate();" << endl;
DynamicTextureManager::Instantiate();
+ cout << " SceneManager::Instantiate();" << endl;
SceneManager::Instantiate();
unsigned int iNumFiles;
{
for (unsigned int i = 0; i < iNumFiles; ++i)
{
- FAIL_RETURN(archive.FindString("CloudFile", &pFilename, i));\r
+ FAIL_RETURN(archive.FindString("CloudFile", &pFilename, i));
float rScale = 1.0;
FAIL_RETURN(archive.FindFloat32("CloudScale", &rScale, i));
rScale = 30.0;
*/
SkySceneManager::SkySceneManager()
: /*_pSkyBox(NULL),
- _pTerrain(NULL),\r*/
+ _pTerrain(NULL),*/
_bDrawLights(false),
_bDrawTree(false),
_bReshadeClouds(true)
//li->second->Display();
}
- //if (_bDrawTree)\r// force the issue and draw
+ //if (_bDrawTree)// force the issue and draw
//_VisualizeCloudBVTree(cam, _cloudBVTree.GetRoot());
glLineWidth(2.0);
SkyArchive subArchive;
//iNumClouds = 5; //set this value to reduce cloud field for debugging
for (int i = 0; i < iNumClouds; ++i)
- {\rprintf("Loading # %d of %d clouds\n", i+1, iNumClouds);
+ {printf("Loading # %d of %d clouds\n", i+1, iNumClouds);
cloudArchive.FindArchive("Cloud", &subArchive, i);
SkyCloud *pCloud = new SkyCloud();
pCloud->Load(subArchive, rScale);
int i;
int iResult = CamMinMaxBoxOverlap(&cam, pNode->GetNodeBV().GetMin(), pNode->GetNodeBV().GetMax());
-\r //iResult = COMPLETEIN; // just a hack to force the issue
+ //iResult = COMPLETEIN; // just a hack to force the issue
if (COMPLETEIN == iResult)
{
// trivially add all instances
IMAGE_TGA
};
ImageType eType;
-\r/****
+/****
// first get the image type from its extension.
if (filename.find(".tga") != string.npos || filename.find(".TGA") != string.npos)
eType = IMAGE_TGA;
eType = IMAGE_PPM;
else
FAIL_RETURN_MSG(SKYRESULT_FAIL, "SkyTextureManager error: invalid image format");
- \r****/
+ ****/
// first try the filename sent in in case it includes a path.
//if (FileUtils::FileExists(filename.c_str()))
//{
break;
default:
break;
- }\r*/
+ }*/
//}
break;
default:
break;
- }\r*/
+ }*/
//if (pImageData)
//break;