Fixed tangent generation and added Vector4 type.
This commit is contained in:
@@ -36,6 +36,22 @@ concept Vector3 = requires(const std::decay_t<T> constObject, std::decay_t<T> no
|
||||
{ mijin::Vector3Traits<std::decay_t<T>>{}.setZ(nonConstObject, 0.f) };
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
struct Vector4Traits;
|
||||
|
||||
template<typename T>
|
||||
concept Vector4 = requires(const std::decay_t<T> constObject, std::decay_t<T> nonConstObject)
|
||||
{
|
||||
{ mijin::Vector4Traits<std::decay_t<T>>{}.getX(constObject) } -> std::convertible_to<float>;
|
||||
{ mijin::Vector4Traits<std::decay_t<T>>{}.getY(constObject) } -> std::convertible_to<float>;
|
||||
{ mijin::Vector4Traits<std::decay_t<T>>{}.getZ(constObject) } -> std::convertible_to<float>;
|
||||
{ mijin::Vector4Traits<std::decay_t<T>>{}.getW(constObject) } -> std::convertible_to<float>;
|
||||
{ mijin::Vector4Traits<std::decay_t<T>>{}.setX(nonConstObject, 0.f) };
|
||||
{ mijin::Vector4Traits<std::decay_t<T>>{}.setY(nonConstObject, 0.f) };
|
||||
{ mijin::Vector4Traits<std::decay_t<T>>{}.setZ(nonConstObject, 0.f) };
|
||||
{ mijin::Vector4Traits<std::decay_t<T>>{}.setW(nonConstObject, 0.f) };
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
concept Index = std::convertible_to<T, std::size_t>;
|
||||
|
||||
@@ -51,12 +67,21 @@ concept Vector3Iterator = requires(T object)
|
||||
{ std::iterator_traits<T>::value_type } -> Vector3;
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
concept Vector4Iterator = requires(T object)
|
||||
{
|
||||
{ std::iterator_traits<T>::value_type } -> Vector4;
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
concept Vector2Range = std::ranges::random_access_range<T> && Vector2<std::ranges::range_value_t<T>>;
|
||||
|
||||
template<typename T>
|
||||
concept Vector3Range = std::ranges::random_access_range<T> && Vector3<std::ranges::range_value_t<T>>;
|
||||
|
||||
template<typename T>
|
||||
concept Vector4Range = std::ranges::random_access_range<T> && Vector4<std::ranges::range_value_t<T>>;
|
||||
|
||||
template<typename T>
|
||||
concept IndexRange = std::ranges::random_access_range<T> && Index<std::ranges::range_value_t<T>>;
|
||||
|
||||
@@ -83,10 +108,11 @@ concept Mesh3DWithNormals = Mesh3D<T> && requires(const T constObject, T nonCons
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
concept Mesh3DWithTangents = Mesh3D<T> && requires(const T constObject, T nonConstObject, mijin::Mesh3DTraits<T>::index_t index, mijin::Mesh3DTraits<T>::vector3_t vec3Value)
|
||||
concept Mesh3DWithTangents = Mesh3D<T> && requires(const T constObject, T nonConstObject, mijin::Mesh3DTraits<T>::index_t index, mijin::Mesh3DTraits<T>::vector4_t vec4Value)
|
||||
{
|
||||
{ mijin::Mesh3DTraits<T>{}.getTangent(constObject, index, index) } -> Vector3;
|
||||
{ mijin::Mesh3DTraits<T>{}.setTangent(nonConstObject, index, index, vec3Value) };
|
||||
{ typename mijin::Mesh3DTraits<T>::vector4_t() } -> Vector4;
|
||||
{ mijin::Mesh3DTraits<T>{}.getTangent(constObject, index, index) } -> Vector4;
|
||||
{ mijin::Mesh3DTraits<T>{}.setTangent(nonConstObject, index, index, vec4Value) };
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
|
||||
Reference in New Issue
Block a user