mirror of
https://github.com/g-truc/glm.git
synced 2024-11-13 22:01:46 +00:00
Added glm.g-truc.net code samples
This commit is contained in:
parent
a5d2a63ef3
commit
90ad883d9e
@ -33,50 +33,158 @@
|
|||||||
#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
|
|
||||||
{
|
{
|
||||||
union
|
glm::vec4 emission; // Ecm
|
||||||
{
|
glm::vec4 ambient; // Acm
|
||||||
struct {float r, g, b, a;};
|
glm::vec4 diffuse; // Dcm
|
||||||
struct {float s, t, p, q;};
|
glm::vec4 specular; // Scm
|
||||||
struct {float x, y, z, w;};
|
float shininess; // Srm
|
||||||
__m128 data;
|
|
||||||
};
|
};
|
||||||
|
struct light
|
||||||
|
{
|
||||||
|
glm::vec4 ambient; // Acli
|
||||||
|
glm::vec4 diffuse; // Dcli
|
||||||
|
glm::vec4 specular; // Scli
|
||||||
|
glm::vec4 position; // Ppli
|
||||||
|
glm::vec4 halfVector; // Derived: Hi
|
||||||
|
glm::vec3 spotDirection; // Sdli
|
||||||
|
float spotExponent; // Srli
|
||||||
|
float spotCutoff; // Crli
|
||||||
|
// (range: [0.0,90.0], 180.0)
|
||||||
|
float spotCosCutoff; // Derived: cos(Crli)
|
||||||
|
// (range: [1.0,0.0],-1.0)
|
||||||
|
float constantAttenuation; // K0
|
||||||
|
float linearAttenuation; // K1
|
||||||
|
float quadraticAttenuation;// K2
|
||||||
};
|
};
|
||||||
|
|
||||||
int test_simd()
|
// Sample 1
|
||||||
|
#include <glm/vec3.hpp>// glm::vec3
|
||||||
|
#include <glm/geometric.hpp>// glm::cross, glm::normalize
|
||||||
|
|
||||||
|
glm::vec3 computeNormal
|
||||||
|
(
|
||||||
|
glm::vec3 const & a,
|
||||||
|
glm::vec3 const & b,
|
||||||
|
glm::vec3 const & c
|
||||||
|
)
|
||||||
{
|
{
|
||||||
float4 f;
|
return glm::normalize(glm::cross(c - a, b - a));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif//GLM_ARCH
|
typedef unsigned int GLuint;
|
||||||
*/
|
#define GL_FALSE 0
|
||||||
|
void glUniformMatrix4fv(GLuint, int, int, float*){}
|
||||||
|
|
||||||
template <class T = int>
|
// Sample 2
|
||||||
class C;
|
#include <glm/vec3.hpp> // glm::vec3
|
||||||
|
#include <glm/vec4.hpp> // glm::vec4, glm::ivec4
|
||||||
template <class T>
|
#include <glm/mat4x4.hpp> // glm::mat4
|
||||||
class C
|
#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)
|
||||||
{
|
{
|
||||||
public:
|
glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.f);
|
||||||
T value;
|
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()
|
int main()
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
# if(GLM_ARCH & GLM_ARCH_SSE2)
|
|
||||||
test_simd();
|
|
||||||
# endif
|
|
||||||
*/
|
|
||||||
|
|
||||||
C<> c;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user