parent
a5d2a63ef3
commit
90ad883d9e
1 changed files with 190 additions and 82 deletions
@ -1,82 +1,190 @@ |
|||||||
///////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
/// OpenGL Mathematics (glm.g-truc.net)
|
/// OpenGL Mathematics (glm.g-truc.net)
|
||||||
///
|
///
|
||||||
/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||||
/// Permission is hereby granted, free of charge, to any person obtaining a copy
|
/// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
/// of this software and associated documentation files (the "Software"), to deal
|
/// of this software and associated documentation files (the "Software"), to deal
|
||||||
/// in the Software without restriction, including without limitation the rights
|
/// in the Software without restriction, including without limitation the rights
|
||||||
/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
/// copies of the Software, and to permit persons to whom the Software is
|
/// copies of the Software, and to permit persons to whom the Software is
|
||||||
/// furnished to do so, subject to the following conditions:
|
/// furnished to do so, subject to the following conditions:
|
||||||
///
|
///
|
||||||
/// The above copyright notice and this permission notice shall be included in
|
/// The above copyright notice and this permission notice shall be included in
|
||||||
/// all copies or substantial portions of the Software.
|
/// all copies or substantial portions of the Software.
|
||||||
///
|
///
|
||||||
/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
/// THE SOFTWARE.
|
/// THE SOFTWARE.
|
||||||
///
|
///
|
||||||
/// @ref core
|
/// @ref core
|
||||||
/// @file glm/core/dummy.cpp
|
/// @file glm/core/dummy.cpp
|
||||||
/// @date 2011-01-19 / 2011-06-15
|
/// @date 2011-01-19 / 2011-06-15
|
||||||
/// @author Christophe Riccio
|
/// @author Christophe Riccio
|
||||||
///
|
///
|
||||||
/// GLM is a header only library. There is nothing to compile.
|
/// GLM is a header only library. There is nothing to compile.
|
||||||
/// dummy.cpp exist only a wordaround for CMake file.
|
/// dummy.cpp exist only a wordaround for CMake file.
|
||||||
///////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#define GLM_FORCE_RADIANS |
#define GLM_FORCE_RADIANS |
||||||
#define GLM_MESSAGES |
#define GLM_MESSAGES |
||||||
#include "../glm.hpp" |
#include "../glm.hpp" |
||||||
#include <limits> |
#include <limits> |
||||||
/*
|
|
||||||
#if(GLM_ARCH & GLM_ARCH_SSE2) |
struct material |
||||||
struct float4 |
{ |
||||||
{ |
glm::vec4 emission; // Ecm
|
||||||
union
|
glm::vec4 ambient; // Acm
|
||||||
{ |
glm::vec4 diffuse; // Dcm
|
||||||
struct {float r, g, b, a;}; |
glm::vec4 specular; // Scm
|
||||||
struct {float s, t, p, q;}; |
float shininess; // Srm
|
||||||
struct {float x, y, z, w;}; |
};
|
||||||
__m128 data; |
struct light |
||||||
}; |
{ |
||||||
}; |
glm::vec4 ambient; // Acli
|
||||||
|
glm::vec4 diffuse; // Dcli
|
||||||
int test_simd() |
glm::vec4 specular; // Scli
|
||||||
{ |
glm::vec4 position; // Ppli
|
||||||
float4 f; |
glm::vec4 halfVector; // Derived: Hi
|
||||||
|
glm::vec3 spotDirection; // Sdli
|
||||||
|
float spotExponent; // Srli
|
||||||
|
float spotCutoff; // Crli
|
||||||
return 0; |
// (range: [0.0,90.0], 180.0)
|
||||||
} |
float spotCosCutoff; // Derived: cos(Crli)
|
||||||
|
// (range: [1.0,0.0],-1.0)
|
||||||
#endif//GLM_ARCH
|
float constantAttenuation; // K0
|
||||||
*/ |
float linearAttenuation; // K1
|
||||||
|
float quadraticAttenuation;// K2
|
||||||
template <class T = int> |
};
|
||||||
class C; |
|
||||||
|
// Sample 1
|
||||||
template <class T> |
#include <glm/vec3.hpp>// glm::vec3 |
||||||
class C |
#include <glm/geometric.hpp>// glm::cross, glm::normalize |
||||||
{ |
|
||||||
public: |
glm::vec3 computeNormal |
||||||
T value; |
( |
||||||
}; |
glm::vec3 const & a, |
||||||
|
glm::vec3 const & b, |
||||||
int main() |
glm::vec3 const & c |
||||||
{ |
) |
||||||
/*
|
{ |
||||||
# if(GLM_ARCH & GLM_ARCH_SSE2) |
return glm::normalize(glm::cross(c - a, b - a)); |
||||||
test_simd(); |
} |
||||||
# endif |
|
||||||
*/
|
typedef unsigned int GLuint; |
||||||
|
#define GL_FALSE 0 |
||||||
C<> c; |
void glUniformMatrix4fv(GLuint, int, int, float*){} |
||||||
|
|
||||||
return 0; |
// Sample 2
|
||||||
} |
#include <glm/vec3.hpp> // glm::vec3 |
||||||
|
#include <glm/vec4.hpp> // glm::vec4, glm::ivec4 |
||||||
|
#include <glm/mat4x4.hpp> // glm::mat4 |
||||||
|
#include <glm/gtc/matrix_transform.hpp> // glm::translate, glm::rotate, glm::scale, glm::perspective |
||||||
|
#include <glm/gtc/type_ptr.hpp> // glm::value_ptr |
||||||
|
void func(GLuint LocationMVP, float Translate, glm::vec2 const & Rotate) |
||||||
|
{ |
||||||
|
glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.f); |
||||||
|
glm::mat4 ViewTranslate = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, -Translate)); |
||||||
|
glm::mat4 ViewRotateX = glm::rotate(ViewTranslate, Rotate.y, glm::vec3(-1.0f, 0.0f, 0.0f)); |
||||||
|
glm::mat4 View = glm::rotate(ViewRotateX, Rotate.x, glm::vec3(0.0f, 1.0f, 0.0f)); |
||||||
|
glm::mat4 Model = glm::scale(glm::mat4(1.0f), glm::vec3(0.5f)); |
||||||
|
glm::mat4 MVP = Projection * View * Model; |
||||||
|
glUniformMatrix4fv(LocationMVP, 1, GL_FALSE, glm::value_ptr(MVP)); |
||||||
|
} |
||||||
|
|
||||||
|
// Sample 3
|
||||||
|
#include <glm/vec2.hpp>// glm::vec2 |
||||||
|
#include <glm/packing.hpp>// glm::packUnorm2x16 |
||||||
|
#include <glm/integer.hpp>// glm::uint |
||||||
|
#include <glm/gtc/type_precision.hpp>// glm::i8vec2, glm::i32vec2 |
||||||
|
std::size_t const VertexCount = 4; |
||||||
|
// Float quad geometry
|
||||||
|
std::size_t const PositionSizeF32 = VertexCount * sizeof(glm::vec2); |
||||||
|
glm::vec2 const PositionDataF32[VertexCount] = |
||||||
|
{ |
||||||
|
glm::vec2(-1.0f,-1.0f), |
||||||
|
glm::vec2( 1.0f,-1.0f), |
||||||
|
glm::vec2( 1.0f, 1.0f), |
||||||
|
glm::vec2(-1.0f, 1.0f) |
||||||
|
}; |
||||||
|
// Half-float quad geometry
|
||||||
|
std::size_t const PositionSizeF16 = VertexCount * sizeof(glm::uint); |
||||||
|
glm::uint const PositionDataF16[VertexCount] = |
||||||
|
{ |
||||||
|
glm::uint(glm::packUnorm2x16(glm::vec2(-1.0f, -1.0f))), |
||||||
|
glm::uint(glm::packUnorm2x16(glm::vec2( 1.0f, -1.0f))), |
||||||
|
glm::uint(glm::packUnorm2x16(glm::vec2( 1.0f, 1.0f))), |
||||||
|
glm::uint(glm::packUnorm2x16(glm::vec2(-1.0f, 1.0f))) |
||||||
|
}; |
||||||
|
// 8 bits signed integer quad geometry
|
||||||
|
std::size_t const PositionSizeI8 = VertexCount * sizeof(glm::i8vec2); |
||||||
|
glm::i8vec2 const PositionDataI8[VertexCount] = |
||||||
|
{ |
||||||
|
glm::i8vec2(-1,-1), |
||||||
|
glm::i8vec2( 1,-1), |
||||||
|
glm::i8vec2( 1, 1), |
||||||
|
glm::i8vec2(-1, 1) |
||||||
|
}; |
||||||
|
// 32 bits signed integer quad geometry
|
||||||
|
std::size_t const PositionSizeI32 = VertexCount * sizeof(glm::i32vec2); |
||||||
|
glm::i32vec2 const PositionDataI32[VertexCount] = |
||||||
|
{ |
||||||
|
glm::i32vec2 (-1,-1), |
||||||
|
glm::i32vec2 ( 1,-1), |
||||||
|
glm::i32vec2 ( 1, 1), |
||||||
|
glm::i32vec2 (-1, 1) |
||||||
|
}; |
||||||
|
|
||||||
|
struct intersection |
||||||
|
{ |
||||||
|
glm::vec4 position; |
||||||
|
glm::vec3 normal; |
||||||
|
}; |
||||||
|
|
||||||
|
/*
|
||||||
|
// Sample 4
|
||||||
|
#include <glm/vec3.hpp>// glm::vec3 |
||||||
|
#include <glm/geometric.hpp>// glm::normalize, glm::dot, glm::reflect |
||||||
|
#include <glm/exponential.hpp>// glm::pow |
||||||
|
#include <glm/gtc/random.hpp>// glm::vecRand3 |
||||||
|
glm::vec3 lighting |
||||||
|
( |
||||||
|
intersection const & Intersection, |
||||||
|
material const & Material, |
||||||
|
light const & Light, |
||||||
|
glm::vec3 const & View |
||||||
|
) |
||||||
|
{ |
||||||
|
glm::vec3 Color(0.0f); |
||||||
|
glm::vec3 LightVertor(glm::normalize( |
||||||
|
Light.position - Intersection.position + |
||||||
|
glm::vecRand3(0.0f, Light.inaccuracy)); |
||||||
|
|
||||||
|
if(!shadow(Intersection.position, Light.position, LightVertor)) |
||||||
|
{ |
||||||
|
float Diffuse = glm::dot(Intersection.normal, LightVector); |
||||||
|
if(Diffuse <= 0.0f) |
||||||
|
return Color; |
||||||
|
if(Material.isDiffuse()) |
||||||
|
Color += Light.color() * Material.diffuse * Diffuse; |
||||||
|
if(Material.isSpecular()) |
||||||
|
{ |
||||||
|
glm::vec3 Reflect(glm::reflect( |
||||||
|
glm::normalize(-LightVector), |
||||||
|
glm::normalize(Intersection.normal))); |
||||||
|
float Dot = glm::dot(Reflect, View); |
||||||
|
float Base = Dot > 0.0f ? Dot : 0.0f; |
||||||
|
float Specular = glm::pow(Base, Material.exponent); |
||||||
|
Color += Material.specular * Specular; |
||||||
|
} |
||||||
|
} |
||||||
|
return Color; |
||||||
|
} |
||||||
|
*/ |
||||||
|
int main() |
||||||
|
{ |
||||||
|
return 0; |
||||||
|
} |
||||||
|
Loading…
Reference in New Issue