WIP organization of library

This commit is contained in:
Kearwood Kip Gilbert
2017-07-29 01:07:21 -07:00
parent 3ca57d56ee
commit 18b74bcbe4
47 changed files with 292 additions and 309 deletions

View File

@@ -6,10 +6,9 @@
// Copyright (c) 2012 Kearwood Software. All rights reserved.
//
#include "KRAABB.h"
#include "KRMat4.h"
#include "KRVector2.h"
#include "public/kraken.h"
#include "assert.h"
#include "KRHelpers.h"
KRAABB::KRAABB()
{

View File

@@ -35,7 +35,6 @@
#include "KRDataBlock.h"
#include "KRAudioBuffer.h"
#include "KRContext.h"
#include "KRVector2.h"
#include "KRCollider.h"
#include "KRDSP.h"

View File

@@ -36,7 +36,6 @@
#include "KRContextObject.h"
#include "KRDataBlock.h"
#include "KRMat4.h"
#include "KRAudioSource.h"
#include "KRDSP.h"

View File

@@ -30,7 +30,6 @@
//
#include "KREngine-common.h"
#include "KRVector2.h"
#include "KRCamera.h"
#include "KRStockGeometry.h"
#include "KRDirectionalLight.h"

View File

@@ -34,9 +34,6 @@
#include "KREngine-common.h"
#include "KRMat4.h"
#include "KRVector2.h"
#include "KRAABB.h"
#include "KRShader.h"
#include "KRContextObject.h"
#include "KRTexture.h"

View File

@@ -33,7 +33,6 @@
#include "KRCollider.h"
#include "KRContext.h"
#include "KRMesh.h"
#include "KRQuaternion.h"
KRCollider::KRCollider(KRScene &scene, std::string collider_name, std::string model_name, unsigned int layer_mask, float audio_occlusion) : KRNode(scene, collider_name) {

View File

@@ -38,8 +38,6 @@
#define KRAKEN_COLLIDER_AUDIO 2
#include "KRMesh.h"
#include "KRMat4.h"
#include "KRVector3.h"
#include "KRModel.h"
#include "KRCamera.h"
#include "KRMeshManager.h"

View File

@@ -11,8 +11,6 @@
#include "KRDirectionalLight.h"
#include "KRShader.h"
#include "KRContext.h"
#include "KRMat4.h"
#include "KRQuaternion.h"
#include "assert.h"
#include "KRStockGeometry.h"

View File

@@ -10,7 +10,6 @@
#define KREngine_KRDirectionalLight_h
#include "KRLight.h"
#include "KRMat4.h"
class KRDirectionalLight : public KRLight {

View File

@@ -11,9 +11,8 @@
#ifndef KRENGINE_COMMON_H
#define KRENGINE_COMMON_H
float const PI = 3.141592653589793f;
float const D2R = PI * 2 / 360;
#include "public/kraken.h"
#include "KRHelpers.h"
#include <stdint.h>
#include <vector>
@@ -224,20 +223,14 @@ fprintf(stderr, "Error at line number %d, in file %s. Returned %d for call %s\n"
#endif
#define KRMIN(x,y) ((x) < (y) ? (x) : (y))
#define KRMAX(x,y) ((x) > (y) ? (x) : (y))
#define KRCLAMP(x, min, max) (KRMAX(KRMIN(x, max), min))
#define KRALIGN(x) ((x + 3) & ~0x03)
typedef enum {
STREAM_LEVEL_OUT,
STREAM_LEVEL_IN_LQ,
STREAM_LEVEL_IN_HQ
} kraken_stream_level;
#include "KRVector4.h"
#include "KRVector3.h"
#include "KRVector2.h"
#include "KRBehavior.h"
#endif
using namespace kraken;

View File

@@ -6,9 +6,9 @@
// Copyright (c) 2013 Kearwood Software. All rights reserved.
//
#include "KRFloat.h"
#include "public\kraken.h"
float KRFloat::SmoothStep(float a, float b, float t)
float kraken::SmoothStep(float a, float b, float t)
{
float d = (3.0 * t * t - 2.0 * t * t * t);
return a * (1.0f - d) + b * d;

View File

@@ -32,7 +32,9 @@
#ifndef KRHITINFO_H
#define KRHITINFO_H
#include "KRVector3.h"
#include "public/kraken.h"
using namespace kraken;
class KRNode;
@@ -51,7 +53,6 @@ public:
KRHitInfo& operator =(const KRHitInfo& b);
private:
KRNode *m_node;
KRVector3 m_position;

View File

@@ -11,8 +11,6 @@
#include "KRLight.h"
#include "KRNode.h"
#include "KRMat4.h"
#include "KRVector3.h"
#include "KRCamera.h"
#include "KRContext.h"

View File

@@ -31,8 +31,7 @@
#include "KREngine-common.h"
#include "KRMat4.h"
#include "KRQuaternion.h"
#include "public/KRMat4.h"
KRMat4::KRMat4() {
// Default constructor - Initialize with an identity matrix
@@ -418,11 +417,6 @@ KRMat4 KRMat4::Transpose(const KRMat4 &m)
return matTranspose;
}
void KRMat4::setUniform(GLint location) const
{
if(location != -1) GLDEBUG(glUniformMatrix4fv(location, 1, GL_FALSE, c));
}
KRMat4 KRMat4::Translation(const KRVector3 &v)
{
KRMat4 m;

View File

@@ -36,8 +36,6 @@
#include "KRShader.h"
#include "KRCamera.h"
#include "KRResource.h"
#include "KRVector2.h"
#include "KRVector3.h"
#include "KRScene.h"
#include "KRBone.h"

View File

@@ -34,8 +34,6 @@
#include "KRMesh.h"
#include "KRVector3.h"
#include "KRTriangle3.h"
#include "KRShader.h"
#include "KRShaderManager.h"
#include "KRContext.h"

View File

@@ -30,14 +30,14 @@
//
#include "KREngine-common.h"
#include "KRVector2.h"
#include "KRMat4.h"
#include "KRContext.h"
#include "KRBone.h"
#include "KRMeshManager.h"
#include "KREngine-common.h"
using namespace kraken;
#define MAX_VBO_SIZE 65535
#define KRENGINE_MAX_BONE_WEIGHTS_PER_VERTEX 4
#define KRENGINE_MAX_NAME_LENGTH 256
@@ -55,8 +55,6 @@
class KRMaterial;
class KRNode;
class KRTriangle3;
class KRMesh : public KRResource {

View File

@@ -34,7 +34,6 @@
#include "KRModel.h"
#include "KRContext.h"
#include "KRMesh.h"
#include "KRQuaternion.h"
KRModel::KRModel(KRScene &scene, std::string instance_name, std::string model_name, std::string light_map, float lod_min_coverage, bool receives_shadow, bool faces_camera, KRVector3 rim_color, float rim_power) : KRNode(scene, instance_name) {
m_lightMap = light_map;
@@ -80,7 +79,7 @@ tinyxml2::XMLElement *KRModel::saveXML( tinyxml2::XMLNode *parent)
e->SetAttribute("lod_min_coverage", m_min_lod_coverage);
e->SetAttribute("receives_shadow", m_receivesShadow ? "true" : "false");
e->SetAttribute("faces_camera", m_faces_camera ? "true" : "false");
m_rim_color.setXMLAttribute("rim_color", e, KRVector3::Zero());
kraken::setXMLAttribute("rim_color", e, m_rim_color, KRVector3::Zero());
e->SetAttribute("rim_power", m_rim_power);
return e;
}

View File

@@ -29,16 +29,12 @@
// or implied, of Kearwood Gilbert.
//
#include "KREngine-common.h"
#ifndef KRMODEL_H
#define KRMODEL_H
#include "KRMesh.h"
#include "KRMat4.h"
#include "KRVector3.h"
#include "KRModel.h"
#include "KRCamera.h"
#include "KRMeshManager.h"

View File

@@ -18,8 +18,6 @@
#include "KRCollider.h"
#include "KRParticleSystem.h"
#include "KRParticleSystemNewtonian.h"
#include "KRAABB.h"
#include "KRQuaternion.h"
#include "KRBone.h"
#include "KRLocator.h"
#include "KRAudioSource.h"
@@ -125,17 +123,15 @@ tinyxml2::XMLElement *KRNode::saveXML(tinyxml2::XMLNode *parent) {
tinyxml2::XMLElement *e = doc->NewElement(getElementName().c_str());
tinyxml2::XMLNode *n = parent->InsertEndChild(e);
e->SetAttribute("name", m_name.c_str());
m_localTranslation.setXMLAttribute("translate", e, KRVector3::Zero());
m_localScale.setXMLAttribute("scale", e, KRVector3::One());
(m_localRotation * (180.0f / M_PI)).setXMLAttribute("rotate", e, KRVector3::Zero());
m_rotationOffset.setXMLAttribute("rotate_offset", e, KRVector3::Zero());
m_scalingOffset.setXMLAttribute("scale_offset", e, KRVector3::Zero());
m_rotationPivot.setXMLAttribute("rotate_pivot", e, KRVector3::Zero());
m_scalingPivot.setXMLAttribute("scale_pivot", e, KRVector3::Zero());
(m_preRotation * (180.0f / M_PI)).setXMLAttribute("pre_rotate", e, KRVector3::Zero());
(m_postRotation * (180.0f / M_PI)).setXMLAttribute("post_rotate", e, KRVector3::Zero());
kraken::setXMLAttribute("translate", e, m_localTranslation, KRVector3::Zero());
kraken::setXMLAttribute("scale", e, m_localScale, KRVector3::One());
kraken::setXMLAttribute("rotate", e, (m_localRotation * (180.0f / M_PI)), KRVector3::Zero());
kraken::setXMLAttribute("rotate_offset", e, m_rotationOffset, KRVector3::Zero());
kraken::setXMLAttribute("scale_offset", e, m_scalingOffset, KRVector3::Zero());
kraken::setXMLAttribute("rotate_pivot", e, m_rotationPivot, KRVector3::Zero());
kraken::setXMLAttribute("scale_pivot", e, m_scalingPivot, KRVector3::Zero());
kraken::setXMLAttribute("pre_rotate", e, (m_preRotation * (180.0f / M_PI)), KRVector3::Zero());
kraken::setXMLAttribute("post_rotate", e, (m_postRotation * (180.0f / M_PI)), KRVector3::Zero());
for(std::set<KRNode *>::iterator itr=m_childNodes.begin(); itr != m_childNodes.end(); ++itr) {
KRNode *child = (*itr);
@@ -146,21 +142,19 @@ tinyxml2::XMLElement *KRNode::saveXML(tinyxml2::XMLNode *parent) {
void KRNode::loadXML(tinyxml2::XMLElement *e) {
m_name = e->Attribute("name");
m_localTranslation.getXMLAttribute("translate", e, KRVector3::Zero());
m_localScale.getXMLAttribute("scale", e, KRVector3::One());
m_localRotation.getXMLAttribute("rotate", e, KRVector3::Zero());
m_localTranslation = kraken::getXMLAttribute("translate", e, KRVector3::Zero());
m_localScale = kraken::getXMLAttribute("scale", e, KRVector3::One());
m_localRotation = kraken::getXMLAttribute("rotate", e, KRVector3::Zero());
m_localRotation *= M_PI / 180.0f; // Convert degrees to radians
m_preRotation.getXMLAttribute("pre_rotate", e, KRVector3::Zero());
m_preRotation = kraken::getXMLAttribute("pre_rotate", e, KRVector3::Zero());
m_preRotation *= M_PI / 180.0f; // Convert degrees to radians
m_postRotation.getXMLAttribute("post_rotate", e, KRVector3::Zero());
m_postRotation = kraken::getXMLAttribute("post_rotate", e, KRVector3::Zero());
m_postRotation *= M_PI / 180.0f; // Convert degrees to radians
m_rotationOffset.getXMLAttribute("rotate_offset", e, KRVector3::Zero());
m_scalingOffset.getXMLAttribute("scale_offset", e, KRVector3::Zero());
m_rotationPivot.getXMLAttribute("rotate_pivot", e, KRVector3::Zero());
m_scalingPivot.getXMLAttribute("scale_pivot", e, KRVector3::Zero());
m_rotationOffset = kraken::getXMLAttribute("rotate_offset", e, KRVector3::Zero());
m_scalingOffset = kraken::getXMLAttribute("scale_offset", e, KRVector3::Zero());
m_rotationPivot = kraken::getXMLAttribute("rotate_pivot", e, KRVector3::Zero());
m_scalingPivot = kraken::getXMLAttribute("scale_pivot", e, KRVector3::Zero());
m_initialLocalTranslation = m_localTranslation;
m_initialLocalScale = m_localScale;
@@ -434,7 +428,7 @@ KRNode *KRNode::LoadXML(KRScene &scene, tinyxml2::XMLElement *e) {
rim_power = 0.0f;
}
KRVector3 rim_color = KRVector3::Zero();
rim_color.getXMLAttribute("rim_color", e, KRVector3::Zero());
rim_color = kraken::getXMLAttribute("rim_color", e, KRVector3::Zero());
new_node = new KRModel(scene, szName, e->Attribute("mesh"), e->Attribute("light_map"), lod_min_coverage, receives_shadow, faces_camera, rim_color, rim_power);
} else if(strcmp(szElementName, "collider") == 0) {
new_node = new KRCollider(scene, szName, e->Attribute("mesh"), 65535, 1.0f);

View File

@@ -10,20 +10,24 @@
#define KRNODE_H
#include "KRResource.h"
#include "KRVector3.h"
#include "KRViewport.h"
#include "KROctreeNode.h"
#include "KRBehavior.h"
using namespace kraken;
namespace kraken {
class KRMat4;
class KRAABB;
} // namespace kraken
class KRCamera;
class KRShaderManager;
class KRMeshManager;
class KRMaterialManager;
class KRMat4;
class KRTextureManager;
class KRContext;
class KRScene;
class KRAABB;
class KRNode;
class KRPointLight;
class KRSpotLight;

View File

@@ -11,7 +11,6 @@
#include "KREngine-common.h"
#include "KROctreeNode.h"
#include "KRMat4.h"
#include "KRHitInfo.h"
class KRNode;

View File

@@ -10,8 +10,6 @@
#define KROCTREENODE_H
#include "KREngine-common.h"
#include "KRVector3.h"
#include "KRAABB.h"
#include "KRHitInfo.h"
class KRNode;

View File

@@ -6,8 +6,9 @@
// Copyright (c) 2012 Kearwood Software. All rights reserved.
//
#include "KREngine-common.h"
#include "KRParticleSystemNewtonian.h"
#include "KRAABB.h"
#include "KRTexture.h"
#include "KRContext.h"

View File

@@ -9,8 +9,6 @@
#include "KREngine-common.h"
#include "KRPointLight.h"
#include "KRMat4.h"
#include "KRVector3.h"
#include "KRCamera.h"
#include "KRContext.h"
#include "KRStockGeometry.h"

View File

@@ -10,7 +10,6 @@
#define KRPOINTLIGHT_H
#include "KRLight.h"
#include "KRMat4.h"
class KRPointLight : public KRLight {

View File

@@ -29,8 +29,11 @@
// or implied, of Kearwood Gilbert.
//
#include "KRQuaternion.h"
#include "KRVector3.h"
#include "public/kraken.h"
#include "KRHelpers.h"
namespace kraken {
KRQuaternion::KRQuaternion() {
m_val[0] = 1.0;
@@ -358,3 +361,5 @@ KRQuaternion KRQuaternion::Slerp(const KRQuaternion &a, const KRQuaternion &b, f
return (c * sin((1.0f - t) * halftheta) + b * sin(t * halftheta)) / sin(halftheta);
}
} // namespace kraken

View File

@@ -22,7 +22,6 @@
#include "KRSpotLight.h"
#include "KRNode.h"
#include "KRScene.h"
#include "KRQuaternion.h"
#include "KRBone.h"
#include "KRLocator.h"
#include "KRBundle.h"

View File

@@ -30,8 +30,6 @@
//
#include "KREngine-common.h"
#include "KRVector3.h"
#include "KRMat4.h"
#include "KRLight.h"
@@ -41,7 +39,6 @@
#include "KRDirectionalLight.h"
#include "KRSpotLight.h"
#include "KRPointLight.h"
#include "KRQuaternion.h"
#include "KRAudioManager.h"
const long KRENGINE_OCCLUSION_TEST_EXPIRY = 10;

View File

@@ -35,7 +35,6 @@
#include "KREngine-common.h"
#include "KRModel.h"
#include "KRMat4.h"
#include "KRMesh.h"
#include "KRCamera.h"
#include "KRMeshManager.h"

View File

@@ -36,7 +36,6 @@
#include "KREngine-common.h"
#include "KRShader.h"
#include "KRMat4.h"
#include "KRCamera.h"
#include "KRNode.h"
#include "KRViewport.h"

View File

@@ -11,8 +11,6 @@
#include "KRSprite.h"
#include "KRNode.h"
#include "KRMat4.h"
#include "KRVector3.h"
#include "KRCamera.h"
#include "KRContext.h"

View File

@@ -6,21 +6,87 @@
// Copyright (c) 2014 Kearwood Software. All rights reserved.
//
#include "KRTriangle3.h"
#include "KRVector3.h"
#include "public/kraken.h"
using namespace kraken;
namespace {
bool _intersectSphere(const KRVector3 &start, const KRVector3 &dir, const KRVector3 &sphere_center, float sphere_radius, float &distance)
{
// dir must be normalized
// From: http://archive.gamedev.net/archive/reference/articles/article1026.html
// TODO - Move to another class?
KRVector3 Q = sphere_center - start;
float c = Q.magnitude();
float v = KRVector3::Dot(Q, dir);
float d = sphere_radius * sphere_radius - (c * c - v * v);
if (d < 0.0) {
// No intersection
return false;
}
// Return the distance to the [first] intersecting point
distance = v - sqrt(d);
if (distance < 0.0f) {
return false;
}
return true;
}
bool _sameSide(const KRVector3 &p1, const KRVector3 &p2, const KRVector3 &a, const KRVector3 &b)
{
// TODO - Move to KRVector3 class?
// From: http://stackoverflow.com/questions/995445/determine-if-a-3d-point-is-within-a-triangle
KRVector3 cp1 = KRVector3::Cross(b - a, p1 - a);
KRVector3 cp2 = KRVector3::Cross(b - a, p2 - a);
if (KRVector3::Dot(cp1, cp2) >= 0) return true;
return false;
}
KRVector3 _closestPointOnLine(const KRVector3 &a, const KRVector3 &b, const KRVector3 &p)
{
// From: http://stackoverflow.com/questions/995445/determine-if-a-3d-point-is-within-a-triangle
// Determine t (the length of the vector from a to p)
KRVector3 c = p - a;
KRVector3 V = KRVector3::Normalize(b - a);
float d = (a - b).magnitude();
float t = KRVector3::Dot(V, c);
// Check to see if t is beyond the extents of the line segment
if (t < 0) return a;
if (t > d) return b;
// Return the point between a and b
return a + V * t;
}
} // anonymous namespace
namespace kraken {
KRTriangle3::KRTriangle3(const KRVector3 &v1, const KRVector3 &v2, const KRVector3 &v3)
{
m_c[0] = v1;
m_c[1] = v2;
m_c[2] = v3;
vert[0] = v1;
vert[1] = v2;
vert[2] = v3;
}
KRTriangle3::KRTriangle3(const KRTriangle3 &tri)
{
m_c[0] = tri[0];
m_c[1] = tri[1];
m_c[3] = tri[3];
vert[0] = tri[0];
vert[1] = tri[1];
vert[3] = tri[3];
}
@@ -31,31 +97,31 @@ KRTriangle3::~KRTriangle3()
bool KRTriangle3::operator ==(const KRTriangle3& b) const
{
return m_c[0] == b[0] && m_c[1] == b[1] && m_c[2] == b[2];
return vert[0] == b[0] && vert[1] == b[1] && vert[2] == b[2];
}
bool KRTriangle3::operator !=(const KRTriangle3& b) const
{
return m_c[0] != b[0] || m_c[1] != b[1] || m_c[2] != b[2];
return vert[0] != b[0] || vert[1] != b[1] || vert[2] != b[2];
}
KRTriangle3& KRTriangle3::operator =(const KRTriangle3& b)
{
m_c[0] = b[0];
m_c[1] = b[1];
m_c[3] = b[3];
vert[0] = b[0];
vert[1] = b[1];
vert[3] = b[3];
return *this;
}
KRVector3& KRTriangle3::operator[](unsigned i)
KRVector3& KRTriangle3::operator[](unsigned int i)
{
return m_c[i];
return vert[i];
}
KRVector3 KRTriangle3::operator[](unsigned i) const
KRVector3 KRTriangle3::operator[](unsigned int i) const
{
return m_c[i];
return vert[i];
}
@@ -68,13 +134,13 @@ bool KRTriangle3::rayCast(const KRVector3 &start, const KRVector3 &dir, KRVector
float r, a, b; // params to calc ray-plane intersect
// get triangle edge vectors and plane normal
u = m_c[1] - m_c[0];
v = m_c[2] - m_c[0];
u = vert[1] - vert[0];
v = vert[2] - vert[0];
n = KRVector3::Cross(u, v); // cross product
if (n == KRVector3::Zero()) // triangle is degenerate
return false; // do not deal with this case
w0 = start - m_c[0];
w0 = start - vert[0];
a = -KRVector3::Dot(n, w0);
b = KRVector3::Dot(n,dir);
if (fabs(b) < SMALL_NUM) { // ray is parallel to triangle plane
@@ -99,7 +165,7 @@ bool KRTriangle3::rayCast(const KRVector3 &start, const KRVector3 &dir, KRVector
uu = KRVector3::Dot(u,u);
uv = KRVector3::Dot(u,v);
vv = KRVector3::Dot(v,v);
w = plane_hit_point - m_c[0];
w = plane_hit_point - vert[0];
wu = KRVector3::Dot(w,u);
wv = KRVector3::Dot(w,v);
D = uv * uv - uu * vv;
@@ -120,78 +186,17 @@ bool KRTriangle3::rayCast(const KRVector3 &start, const KRVector3 &dir, KRVector
KRVector3 KRTriangle3::calculateNormal() const
{
KRVector3 v1 = m_c[1] - m_c[0];
KRVector3 v2 = m_c[2] - m_c[0];
KRVector3 v1 = vert[1] - vert[0];
KRVector3 v2 = vert[2] - vert[0];
return KRVector3::Normalize(KRVector3::Cross(v1, v2));
}
bool _intersectSphere(const KRVector3 &start, const KRVector3 &dir, const KRVector3 &sphere_center, float sphere_radius, float &distance)
{
// dir must be normalized
// From: http://archive.gamedev.net/archive/reference/articles/article1026.html
// TODO - Move to another class?
KRVector3 Q = sphere_center - start;
float c = Q.magnitude();
float v = KRVector3::Dot(Q, dir);
float d = sphere_radius * sphere_radius - (c * c - v * v);
if(d < 0.0) {
// No intersection
return false;
}
// Return the distance to the [first] intersecting point
distance = v - sqrt(d);
if(distance < 0.0f) {
return false;
}
return true;
}
bool _sameSide(const KRVector3 &p1, const KRVector3 &p2, const KRVector3 &a, const KRVector3 &b)
{
// TODO - Move to KRVector3 class?
// From: http://stackoverflow.com/questions/995445/determine-if-a-3d-point-is-within-a-triangle
KRVector3 cp1 = KRVector3::Cross(b - a, p1 - a);
KRVector3 cp2 = KRVector3::Cross(b - a, p2 - a);
if(KRVector3::Dot(cp1, cp2) >= 0) return true;
return false;
}
KRVector3 _closestPointOnLine(const KRVector3 &a, const KRVector3 &b, const KRVector3 &p)
{
// From: http://stackoverflow.com/questions/995445/determine-if-a-3d-point-is-within-a-triangle
// Determine t (the length of the vector from a to p)
KRVector3 c = p - a;
KRVector3 V = KRVector3::Normalize(b - a);
float d = (a - b).magnitude();
float t = KRVector3::Dot(V, c);
// Check to see if t is beyond the extents of the line segment
if (t < 0) return a;
if (t > d) return b;
// Return the point between a and b
return a + V * t;
}
KRVector3 KRTriangle3::closestPointOnTriangle(const KRVector3 &p) const
{
KRVector3 a = m_c[0];
KRVector3 b = m_c[1];
KRVector3 c = m_c[2];
KRVector3 a = vert[0];
KRVector3 b = vert[1];
KRVector3 c = vert[2];
KRVector3 Rab = _closestPointOnLine(a, b, p);
KRVector3 Rbc = _closestPointOnLine(b, c, p);
@@ -218,7 +223,7 @@ bool KRTriangle3::sphereCast(const KRVector3 &start, const KRVector3 &dir, float
KRVector3 tri_normal = calculateNormal();
float d = KRVector3::Dot(tri_normal, m_c[0]);
float d = KRVector3::Dot(tri_normal, vert[0]);
float e = KRVector3::Dot(tri_normal, start) - radius;
float cotangent_distance = e - d;
@@ -277,10 +282,10 @@ bool KRTriangle3::containsPoint(const KRVector3 &p) const
// From: http://stackoverflow.com/questions/995445/determine-if-a-3d-point-is-within-a-triangle
const float SMALL_NUM = 0.00000001f; // anything that avoids division overflow
// KRVector3 A = m_c[0], B = m_c[1], C = m_c[2];
if (_sameSide(p, m_c[0], m_c[1], m_c[2]) && _sameSide(p, m_c[1], m_c[0], m_c[2]) && _sameSide(p, m_c[2], m_c[0], m_c[1])) {
KRVector3 vc1 = KRVector3::Cross(m_c[0] - m_c[1], m_c[0] - m_c[2]);
if(fabs(KRVector3::Dot(m_c[0] - p, vc1)) <= SMALL_NUM) {
// KRVector3 A = vert[0], B = vert[1], C = vert[2];
if (_sameSide(p, vert[0], vert[1], vert[2]) && _sameSide(p, vert[1], vert[0], vert[2]) && _sameSide(p, vert[2], vert[0], vert[1])) {
KRVector3 vc1 = KRVector3::Cross(vert[0] - vert[1], vert[0] - vert[2]);
if(fabs(KRVector3::Dot(vert[0] - p, vc1)) <= SMALL_NUM) {
return true;
}
}
@@ -290,9 +295,9 @@ bool KRTriangle3::containsPoint(const KRVector3 &p) const
// From: http://blogs.msdn.com/b/rezanour/archive/2011/08/07/barycentric-coordinates-and-point-in-triangle-tests.aspx
KRVector3 A = m_c[0];
KRVector3 B = m_c[1];
KRVector3 C = m_c[2];
KRVector3 A = vert[0];
KRVector3 B = vert[1];
KRVector3 C = vert[2];
KRVector3 P = p;
// Prepare our barycentric variables
@@ -323,5 +328,4 @@ bool KRTriangle3::containsPoint(const KRVector3 &p) const
return (r + t <= 1);
}
} // namespace kraken

View File

@@ -6,9 +6,9 @@
// Copyright (c) 2012 Kearwood Software. All rights reserved.
//
#include "KREngine-common.h"
#include "public/kraken.h"
#include "KRVector2.h"
namespace kraken {
KRVector2::KRVector2() {
x = 0.0;
@@ -212,7 +212,4 @@ float KRVector2::Dot(const KRVector2 &v1, const KRVector2 &v2) {
return v1.x * v2.x + v1.y * v2.y;
}
void KRVector2::setUniform(GLint location) const
{
if(location != -1) GLDEBUG(glUniform2f(location, x, y));
}
} // namepsace kraken

View File

@@ -30,7 +30,7 @@
//
#include "KREngine-common.h"
#include "KRVector3.h"
#include "public/kraken.h"
const KRVector3 KRVECTOR3_ZERO(0.0f, 0.0f, 0.0f);
@@ -412,35 +412,3 @@ bool KRVector3::operator <(const KRVector3& b) const
return false;
}
}
void KRVector3::setUniform(GLint location) const
{
if(location != -1) GLDEBUG(glUniform3f(location, x, y, z));
}
void KRVector3::setXMLAttribute(const std::string &base_name, tinyxml2::XMLElement *e, const KRVector3 &default_value)
{
// TODO - Increase number of digits after the decimal in floating point format (6 -> 12?)
// FINDME, TODO - This needs optimization...
if(*this != default_value) {
e->SetAttribute((base_name + "_x").c_str(), x);
e->SetAttribute((base_name + "_y").c_str(), y);
e->SetAttribute((base_name + "_z").c_str(), z);
}
}
void KRVector3::getXMLAttribute(const std::string &base_name, tinyxml2::XMLElement *e, const KRVector3 &default_value)
{
float new_x = 0.0f;
float new_y = 0.0f;
float new_z = 0.0f;
if(e->QueryFloatAttribute((base_name + "_x").c_str(), &new_x) == tinyxml2::XML_SUCCESS
&& e->QueryFloatAttribute((base_name + "_y").c_str(), &new_y) == tinyxml2::XML_SUCCESS
&& e->QueryFloatAttribute((base_name + "_z").c_str(), &new_z) == tinyxml2::XML_SUCCESS) {
x = new_x;
y = new_y;
z = new_z;
} else {
*this = default_value;
}
}

View File

@@ -31,6 +31,8 @@
#include "public/kraken.h"
namespace kraken {
const KRVector4 KRVECTOR4_ZERO(0.0f, 0.0f, 0.0f, 0.0f);
//default constructor
@@ -297,3 +299,5 @@ bool KRVector4::operator <(const KRVector4& b) const
if(w != b.w) return w < b.w;
return false;
}
} // namespace kraken

View File

@@ -16,6 +16,8 @@
#include "KRVector2.h"
#include "KRVector3.h"
namespace kraken {
class KRMat4;
class KRAABB {
@@ -58,14 +60,16 @@ public:
KRVector3 nearestPoint(const KRVector3 & v) const;
};
} // namespace kraken
namespace std {
template<>
struct hash<KRAABB> {
struct hash<kraken::KRAABB> {
public:
size_t operator()(const KRAABB &s) const
size_t operator()(const kraken::KRAABB &s) const
{
size_t h1 = hash<KRVector3>()(s.min);
size_t h2 = hash<KRVector3>()(s.max);
size_t h1 = hash<kraken::KRVector3>()(s.min);
size_t h2 = hash<kraken::KRVector3>()(s.max);
return h1 ^ ( h2 << 1 );
}
};

View File

@@ -32,8 +32,10 @@
#ifndef KRFLOAT_H
#define KRFLOAT_H
namespace KRFloat {
namespace kraken {
float SmoothStep(float a, float b, float t);
};
}; // namespace kraken
#endif /* defined(KRFLOAT_H) */

View File

@@ -36,6 +36,8 @@
#ifndef KRMAT4_H
#define KRMAT4_H
namespace kraken {
typedef enum {
X_AXIS,
Y_AXIS,
@@ -108,4 +110,6 @@ class KRMat4 {
static KRMat4 Scaling(const KRVector3 &v);
};
} // namespace kraken
#endif // KRMAT4_H

9
kraken/KRQuaternion.h → kraken/public/KRQuaternion.h Executable file → Normal file
View File

@@ -32,10 +32,9 @@
#ifndef KRQUATERNION_H
#define KRQUATERNION_H
#include "KREngine-common.h"
#include "KRMat4.h"
#include "KRVector3.h"
class KRVector3;
namespace kraken {
class KRQuaternion {
public:
@@ -86,4 +85,6 @@ private:
float m_val[4];
};
#endif
} // namespace kraken
#endif // KRQUATERNION_H

View File

@@ -34,6 +34,8 @@
#include "KRVector3.h"
namespace kraken {
class KRTriangle3
{
public:
@@ -58,4 +60,6 @@ public:
KRVector3 closestPointOnTriangle(const KRVector3 &p) const;
};
} // namespace kraken
#endif // KRTRIANGLE3_H

View File

@@ -34,6 +34,8 @@
#include <functional> // for hash<>
namespace kraken {
class KRVector2 {
public:
@@ -95,18 +97,20 @@ public:
static KRVector2 One();
};
} // namespace kraken
namespace std {
template<>
struct hash<KRVector2> {
struct hash<kraken::KRVector2> {
public:
size_t operator()(const KRVector2 &s) const
size_t operator()(const kraken::KRVector2 &s) const
{
size_t h1 = hash<float>()(s.x);
size_t h2 = hash<float>()(s.y);
return h1 ^ ( h2 << 1 );
return h1 ^ (h2 << 1);
}
};
};
}
#endif // KRVECTOR2_H
#endif

View File

@@ -34,8 +34,9 @@
#include <functional> // for hash<>
class KRVector2;
class KRVector4;
#include "KRVector4.h"
namespace kraken {
class KRVector3 {
@@ -125,18 +126,20 @@ public:
static void OrthoNormalize(KRVector3 &normal, KRVector3 &tangent); // Gram-Schmidt Orthonormalization
};
} // namespace kraken
namespace std {
template<>
struct hash<KRVector3> {
struct hash<kraken::KRVector3> {
public:
size_t operator()(const KRVector3 &s) const
size_t operator()(const kraken::KRVector3 &s) const
{
size_t h1 = hash<float>()(s.x);
size_t h2 = hash<float>()(s.y);
size_t h3 = hash<float>()(s.z);
return h1 ^ ( h2 << 1 ) ^ (h3 << 2);
return h1 ^ (h2 << 1) ^ (h3 << 2);
}
};
};
}
#endif // KRVECTOR3_H

View File

@@ -34,6 +34,8 @@
#include <functional> // for hash<>
namespace kraken {
class KRVector3;
class KRVector4 {
@@ -100,4 +102,21 @@ public:
static void OrthoNormalize(KRVector4 &normal, KRVector4 &tangent); // Gram-Schmidt Orthonormalization
};
} // namespace kraken
namespace std {
template<>
struct hash<kraken::KRVector4> {
public:
size_t operator()(const kraken::KRVector4 &s) const
{
size_t h1 = hash<float>()(s.x);
size_t h2 = hash<float>()(s.y);
size_t h3 = hash<float>()(s.z);
size_t h4 = hash<float>()(s.w);
return h1 ^ (h2 << 1) ^ (h3 << 2) ^ (h4 << 3);
}
};
}
#endif // KRVECTOR4_H

View File

@@ -6,6 +6,7 @@
#include "KRVector3.h"
#include "KRVector4.h"
#include "KRMat4.h"
#include "KRQuaternion.h"
#include "KRAABB.h"
#include "KRTriangle3.h"

View File

@@ -73,11 +73,15 @@
<TargetExt>.lib</TargetExt>
<OutDir>$(SolutionDir)\build\output\$(Platform)\$(Configuration)\</OutDir>
<IntDir>build\intermediate\$(Platform)\$(Configuration)\</IntDir>
<IncludePath>C:\Program Files\Autodesk\FBX\FBX SDK\2018.1.1\include;$(IncludePath)</IncludePath>
<LibraryPath>C:\Program Files\Autodesk\FBX\FBX SDK\2018.1.1\lib\vs2015\x64\release;$(LibraryPath)</LibraryPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<TargetExt>.lib</TargetExt>
<OutDir>$(SolutionDir)\build\output\$(Platform)\$(Configuration)\</OutDir>
<IntDir>build\intermediate\$(Platform)\$(Configuration)\</IntDir>
<IncludePath>C:\Program Files\Autodesk\FBX\FBX SDK\2018.1.1\include;$(IncludePath)</IncludePath>
<LibraryPath>C:\Program Files\Autodesk\FBX\FBX SDK\2018.1.1\lib\vs2015\x64\release;$(LibraryPath)</LibraryPath>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
@@ -146,6 +150,7 @@
<ClCompile Include="..\kraken\KRDSP_slow.cpp" />
<ClCompile Include="..\kraken\KRDSP_vDSP.cpp" />
<ClCompile Include="..\kraken\KRFloat.cpp" />
<ClCompile Include="..\kraken\KRHelpers.cpp" />
<ClCompile Include="..\kraken\KRHitInfo.cpp" />
<ClCompile Include="..\kraken\KRLight.cpp" />
<ClCompile Include="..\kraken\KRLocator.cpp" />
@@ -198,7 +203,6 @@
<ItemGroup>
<ClInclude Include="..\3rdparty\forsyth\forsyth.h" />
<ClInclude Include="..\3rdparty\tinyxml2\tinyxml2.h" />
<ClInclude Include="..\kraken\KRAABB.h" />
<ClInclude Include="..\kraken\kraken.h" />
<ClInclude Include="..\kraken\KRAmbientZone.h" />
<ClInclude Include="..\kraken\KRAnimation.h" />
@@ -224,13 +228,12 @@
<ClInclude Include="..\kraken\KRDSP.h" />
<ClInclude Include="..\kraken\KREngine-common.h" />
<ClInclude Include="..\kraken\KREngine.h" />
<ClInclude Include="..\kraken\KRFloat.h" />
<ClInclude Include="..\kraken\KRHelpers.h" />
<ClInclude Include="..\kraken\KRHitInfo.h" />
<ClInclude Include="..\kraken\KRLight.h" />
<ClInclude Include="..\kraken\KRLocator.h" />
<ClInclude Include="..\kraken\KRLODGroup.h" />
<ClInclude Include="..\kraken\KRLODSet.h" />
<ClInclude Include="..\kraken\KRMat4.h" />
<ClInclude Include="..\kraken\KRMaterial.h" />
<ClInclude Include="..\kraken\KRMaterialManager.h" />
<ClInclude Include="..\kraken\KRMesh.h" />
@@ -245,7 +248,6 @@
<ClInclude Include="..\kraken\KRParticleSystem.h" />
<ClInclude Include="..\kraken\KRParticleSystemNewtonian.h" />
<ClInclude Include="..\kraken\KRPointLight.h" />
<ClInclude Include="..\kraken\KRQuaternion.h" />
<ClInclude Include="..\kraken\KRRenderSettings.h" />
<ClInclude Include="..\kraken\KRResource+blend.h" />
<ClInclude Include="..\kraken\KRResource.h" />
@@ -266,13 +268,18 @@
<ClInclude Include="..\kraken\KRTextureManager.h" />
<ClInclude Include="..\kraken\KRTexturePVR.h" />
<ClInclude Include="..\kraken\KRTextureTGA.h" />
<ClInclude Include="..\kraken\KRTriangle3.h" />
<ClInclude Include="..\kraken\KRUnknown.h" />
<ClInclude Include="..\kraken\KRUnknownManager.h" />
<ClInclude Include="..\kraken\KRVector2.h" />
<ClInclude Include="..\kraken\KRVector3.h" />
<ClInclude Include="..\kraken\KRVector4.h" />
<ClInclude Include="..\kraken\KRViewport.h" />
<ClInclude Include="..\kraken\public\KRAABB.h" />
<ClInclude Include="..\kraken\public\kraken.h" />
<ClInclude Include="..\kraken\public\KRFloat.h" />
<ClInclude Include="..\kraken\public\KRMat4.h" />
<ClInclude Include="..\kraken\public\KRQuaternion.h" />
<ClInclude Include="..\kraken\public\KRTriangle3.h" />
<ClInclude Include="..\kraken\public\KRVector2.h" />
<ClInclude Include="..\kraken\public\KRVector3.h" />
<ClInclude Include="..\kraken\public\KRVector4.h" />
<ClInclude Include="3rdparty\glew\glew-1.13.0\include\GL\glew.h" />
<ClInclude Include="3rdparty\glew\glew-1.13.0\include\GL\glxew.h" />
<ClInclude Include="3rdparty\glew\glew-1.13.0\include\GL\wglew.h" />

View File

@@ -16,12 +16,12 @@
<Filter Include="Header Files\3rdparty">
<UniqueIdentifier>{1ccb2d2f-3dba-4fa4-a77f-5aef119ca916}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files\3rdparty\ffts">
<UniqueIdentifier>{218ed471-6978-45cb-9a64-c25d07ecdcc1}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files\3rdparty\forsyth.h">
<UniqueIdentifier>{b1389da0-01b5-4d0b-bb62-bf912979a845}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files\public">
<UniqueIdentifier>{4ebfb66f-4752-486a-bfcf-8b438e8ad64b}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\3rdparty\tinyxml2\tinyxml2.cpp">
@@ -249,41 +249,20 @@
<ClCompile Include="..\kraken\KRDSP_vDSP.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\kraken\KRHelpers.cpp">
<Filter>Header Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\3rdparty\tinyxml2\tinyxml2.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\kraken\KRVector2.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\kraken\KREngine-common.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\kraken\KRVector3.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\kraken\KRVector4.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\kraken\KRMat4.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\kraken\KRFloat.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\kraken\KRTriangle3.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\kraken\KRAABB.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\kraken\KRViewport.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\kraken\KRQuaternion.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\kraken\KRDataBlock.h">
<Filter>Header Files</Filter>
</ClInclude>
@@ -491,5 +470,35 @@
<ClInclude Include="..\kraken\KRDSP.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\kraken\KRHelpers.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\kraken\public\KRFloat.h">
<Filter>Header Files\public</Filter>
</ClInclude>
<ClInclude Include="..\kraken\public\KRMat4.h">
<Filter>Header Files\public</Filter>
</ClInclude>
<ClInclude Include="..\kraken\public\KRVector2.h">
<Filter>Header Files\public</Filter>
</ClInclude>
<ClInclude Include="..\kraken\public\KRVector3.h">
<Filter>Header Files\public</Filter>
</ClInclude>
<ClInclude Include="..\kraken\public\KRVector4.h">
<Filter>Header Files\public</Filter>
</ClInclude>
<ClInclude Include="..\kraken\public\kraken.h">
<Filter>Header Files\public</Filter>
</ClInclude>
<ClInclude Include="..\kraken\public\KRAABB.h">
<Filter>Header Files\public</Filter>
</ClInclude>
<ClInclude Include="..\kraken\public\KRTriangle3.h">
<Filter>Header Files\public</Filter>
</ClInclude>
<ClInclude Include="..\kraken\public\KRQuaternion.h">
<Filter>Header Files\public</Filter>
</ClInclude>
</ItemGroup>
</Project>