BlobbyCloudSupport.h
// |
// Author: Jon Kennedy |
// Copyright: 2002-2006 3Dlabs Inc. Ltd. All rights reserved. |
// License: see 3Dlabs-license.txt |
// |
#ifndef BLOBBYCLOUD_H |
#define BLOBBYCLOUD_H |
#ifdef __cplusplus |
#include "Vector.h" |
#include "Surface.h" |
#include <vector> |
#include "os.h" |
// structure used for qsort algorithm. |
struct TBlobby { |
float distSqr; |
int blob; |
}; |
typedef std::vector<vec3> TPositions; |
typedef std::vector<vec3> TVelocities; |
typedef std::vector<TBlobby> TBlobbies; |
// vertex shader based blobby cloud |
class TBlobbyCloud { |
public: |
TBlobbyCloud(double startTime); |
void Draw(GLhandleARB program_object) const; |
void Update(double elapsedTime); |
void Reset(); |
void Load(GLhandleARB program_object); |
private: |
static const int blobCount = 10; |
static const int maxNearestBlobs = 5; |
TPositions positions; |
TVelocities velocities; |
vec3 limit; // bounding cube the blobs bounce around within |
double previousTime; // used for animation |
mutable GLint count; // number of blobs to test against |
mutable TPositions blobbyPos; |
mutable TBlobbies nearestBlobs; // list of neighbouring blobby positions to pass to the current blob getting rendered |
float blobbyCutoff; // the radius squared distance used to help determine the nearest neighbours |
}; |
#endif |
#ifdef __cplusplus |
extern "C" { |
#endif |
void* newCloud(GLhandleARB program_object, double time); |
void updateDrawCloud(void* cloud, GLhandleARB program_object, double time); |
void deleteCloud(void* cloud); |
#ifdef __cplusplus |
} |
#endif |
#endif |
Copyright © 2006 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2006-07-17