Change project structure;
Added new c# binding;
This commit is contained in:
44
native/header/Geometry/GeometryUtilities.h
Normal file
44
native/header/Geometry/GeometryUtilities.h
Normal file
@@ -0,0 +1,44 @@
|
||||
#ifndef GEOMETRY_UTILITIES_H
|
||||
#define GEOMETRY_UTILITIES_H
|
||||
|
||||
#include "Triangle.h"
|
||||
|
||||
inline void quad_create(vec3s center, vec3s forward, vec3s up, float size, uint8_t material_id, triangle_collection_t* collection)
|
||||
{
|
||||
float half_size = size / 2.0f;
|
||||
vec3s right = glms_vec3_cross(forward, up);
|
||||
|
||||
vec3s scaled_right = glms_vec3_scale(right, half_size);
|
||||
vec3s scaled_up = glms_vec3_scale(up, half_size);
|
||||
|
||||
vec3s temp_sub = glms_vec3_sub(center, scaled_right);
|
||||
vec3s temp_add = glms_vec3_add(center, scaled_right);
|
||||
|
||||
vec3s top_left = glms_vec3_add(temp_sub, scaled_up);
|
||||
vec3s top_right = glms_vec3_add(temp_add, scaled_up);
|
||||
vec3s bottom_right = glms_vec3_sub(temp_add, scaled_up);
|
||||
vec3s bottom_left = glms_vec3_sub(temp_sub, scaled_up);
|
||||
|
||||
vec2s uv0 = {0.0f, 0.0f};
|
||||
vec2s uv1 = {1.0f, 0.0f};
|
||||
vec2s uv2 = {1.0f, 1.0f};
|
||||
vec2s uv3 = {0.0f, 1.0f};
|
||||
|
||||
vec3s dp1 = glms_vec3_sub(top_right, top_left);
|
||||
vec3s dp2 = glms_vec3_sub(bottom_right, top_left);
|
||||
vec2s duv1 = glms_vec2_sub(uv1, uv0);
|
||||
vec2s duv2 = glms_vec2_sub(uv3, uv0);
|
||||
|
||||
float r = 1.0f / (duv1.x * duv2.y - duv1.y * duv2.x);
|
||||
vec3s tangent = glms_vec3_scale(glms_vec3_sub(glms_vec3_scale(dp1, duv2.y), glms_vec3_scale(dp2, duv1.y)), r);
|
||||
|
||||
vertex_t vertex_0 = {.position = top_left, .normal = forward, .tangent = tangent, .uv = {0.0f, 0.0f}};
|
||||
vertex_t vertex_1 = {.position = top_right, .normal = forward, .tangent = tangent, .uv = {1.0f, 0.0f}};
|
||||
vertex_t vertex_2 = {.position = bottom_right, .normal = forward, .tangent = tangent, .uv = {1.0f, 1.0f}};
|
||||
vertex_t vertex_3 = {.position = bottom_left, .normal = forward, .tangent = tangent, .uv = {0.0f, 1.0f}};
|
||||
|
||||
triangle_create(vertex_0, vertex_1, vertex_3, material_id, collection);
|
||||
triangle_create(vertex_1, vertex_2, vertex_3, material_id, collection);
|
||||
}
|
||||
|
||||
#endif // GEOMETRY_UTILITIES_H
|
||||
Reference in New Issue
Block a user