mirror of
https://github.com/Ttanasart-pt/Pixel-Composer.git
synced 2025-02-14 14:15:29 +01:00
New 3D Mesh Extrude node.
This commit is contained in:
parent
bf0eab492f
commit
968b2e4f9c
16 changed files with 334 additions and 38 deletions
|
@ -547,9 +547,10 @@
|
|||
{"name":"d3d_light_directional","order":1,"path":"scripts/d3d_light_directional/d3d_light_directional.yy",},
|
||||
{"name":"d3d_light_point","order":2,"path":"scripts/d3d_light_point/d3d_light_point.yy",},
|
||||
{"name":"d3d_material","order":5,"path":"scripts/d3d_material/d3d_material.yy",},
|
||||
{"name":"d3d_mesh_extrude_mesh","order":19,"path":"scripts/d3d_mesh_extrude_mesh/d3d_mesh_extrude_mesh.yy",},
|
||||
{"name":"d3d_object_instancer","order":6,"path":"scripts/d3d_object_instancer/d3d_object_instancer.yy",},
|
||||
{"name":"d3d_object","order":2,"path":"scripts/d3d_object/d3d_object.yy",},
|
||||
{"name":"d3d_path_extrude","order":22,"path":"scripts/d3d_path_extrude/d3d_path_extrude.yy",},
|
||||
{"name":"d3d_path_extrude","order":24,"path":"scripts/d3d_path_extrude/d3d_path_extrude.yy",},
|
||||
{"name":"d3d_plane_bend_mesh","order":16,"path":"scripts/d3d_plane_bend_mesh/d3d_plane_bend_mesh.yy",},
|
||||
{"name":"d3d_plane_mesh","order":14,"path":"scripts/d3d_plane_mesh/d3d_plane_mesh.yy",},
|
||||
{"name":"d3d_plane","order":2,"path":"scripts/d3d_plane/d3d_plane.yy",},
|
||||
|
@ -557,12 +558,12 @@
|
|||
{"name":"d3d_rot3","order":3,"path":"scripts/d3d_rot3/d3d_rot3.yy",},
|
||||
{"name":"d3d_scene","order":3,"path":"scripts/d3d_scene/d3d_scene.yy",},
|
||||
{"name":"d3d_surface_extrude","order":18,"path":"scripts/d3d_surface_extrude/d3d_surface_extrude.yy",},
|
||||
{"name":"d3d_terrain","order":20,"path":"scripts/d3d_terrain/d3d_terrain.yy",},
|
||||
{"name":"d3d_torus","order":24,"path":"scripts/d3d_torus/d3d_torus.yy",},
|
||||
{"name":"d3d_terrain","order":22,"path":"scripts/d3d_terrain/d3d_terrain.yy",},
|
||||
{"name":"d3d_torus","order":26,"path":"scripts/d3d_torus/d3d_torus.yy",},
|
||||
{"name":"d3d_transformation","order":12,"path":"scripts/d3d_transformation/d3d_transformation.yy",},
|
||||
{"name":"d3d_uvsphere","order":8,"path":"scripts/d3d_uvsphere/d3d_uvsphere.yy",},
|
||||
{"name":"d3d_vertex","order":10,"path":"scripts/d3d_vertex/d3d_vertex.yy",},
|
||||
{"name":"d3d_wall_builder","order":26,"path":"scripts/d3d_wall_builder/d3d_wall_builder.yy",},
|
||||
{"name":"d3d_wall_builder","order":28,"path":"scripts/d3d_wall_builder/d3d_wall_builder.yy",},
|
||||
{"name":"debug","order":42,"path":"scripts/debug/debug.yy",},
|
||||
{"name":"delaunay","order":1,"path":"scripts/delaunay/delaunay.yy",},
|
||||
{"name":"dialog_management","order":2,"path":"scripts/dialog_management/dialog_management.yy",},
|
||||
|
@ -683,17 +684,18 @@
|
|||
{"name":"node_3d_mesh_cube","order":2,"path":"scripts/node_3d_mesh_cube/node_3d_mesh_cube.yy",},
|
||||
{"name":"node_3d_mesh_cylinder","order":5,"path":"scripts/node_3d_mesh_cylinder/node_3d_mesh_cylinder.yy",},
|
||||
{"name":"node_3d_mesh_export","order":15,"path":"scripts/node_3d_mesh_export/node_3d_mesh_export.yy",},
|
||||
{"name":"node_3d_mesh_extrude_mesh","order":18,"path":"scripts/node_3d_mesh_extrude_mesh/node_3d_mesh_extrude_mesh.yy",},
|
||||
{"name":"node_3d_mesh_extrude","order":17,"path":"scripts/node_3d_mesh_extrude/node_3d_mesh_extrude.yy",},
|
||||
{"name":"node_3d_mesh_obj","order":4,"path":"scripts/node_3d_mesh_obj/node_3d_mesh_obj.yy",},
|
||||
{"name":"node_3d_mesh_path_extrude","order":21,"path":"scripts/node_3d_mesh_path_extrude/node_3d_mesh_path_extrude.yy",},
|
||||
{"name":"node_3d_mesh_path_extrude","order":23,"path":"scripts/node_3d_mesh_path_extrude/node_3d_mesh_path_extrude.yy",},
|
||||
{"name":"node_3d_mesh_plane_bend","order":15,"path":"scripts/node_3d_mesh_plane_bend/node_3d_mesh_plane_bend.yy",},
|
||||
{"name":"node_3d_mesh_plane","order":13,"path":"scripts/node_3d_mesh_plane/node_3d_mesh_plane.yy",},
|
||||
{"name":"node_3d_mesh_sphere_ico","order":9,"path":"scripts/node_3d_mesh_sphere_ico/node_3d_mesh_sphere_ico.yy",},
|
||||
{"name":"node_3d_mesh_sphere_uv","order":7,"path":"scripts/node_3d_mesh_sphere_uv/node_3d_mesh_sphere_uv.yy",},
|
||||
{"name":"node_3d_mesh_stack_slice","order":7,"path":"scripts/node_3d_mesh_stack_slice/node_3d_mesh_stack_slice.yy",},
|
||||
{"name":"node_3d_mesh_terrain","order":19,"path":"scripts/node_3d_mesh_terrain/node_3d_mesh_terrain.yy",},
|
||||
{"name":"node_3d_mesh_torus","order":23,"path":"scripts/node_3d_mesh_torus/node_3d_mesh_torus.yy",},
|
||||
{"name":"node_3d_mesh_wall_builder","order":25,"path":"scripts/node_3d_mesh_wall_builder/node_3d_mesh_wall_builder.yy",},
|
||||
{"name":"node_3d_mesh_terrain","order":21,"path":"scripts/node_3d_mesh_terrain/node_3d_mesh_terrain.yy",},
|
||||
{"name":"node_3d_mesh_torus","order":25,"path":"scripts/node_3d_mesh_torus/node_3d_mesh_torus.yy",},
|
||||
{"name":"node_3d_mesh_wall_builder","order":27,"path":"scripts/node_3d_mesh_wall_builder/node_3d_mesh_wall_builder.yy",},
|
||||
{"name":"node_3d_point_affector","order":13,"path":"scripts/node_3d_point_affector/node_3d_point_affector.yy",},
|
||||
{"name":"node_3d_repeat","order":1,"path":"scripts/node_3d_repeat/node_3d_repeat.yy",},
|
||||
{"name":"node_3d_round_vertex","order":1,"path":"scripts/node_3d_round_vertex/node_3d_round_vertex.yy",},
|
||||
|
@ -1903,6 +1905,7 @@
|
|||
{"name":"s_node_3d_mesh_cone","order":9,"path":"sprites/s_node_3d_mesh_cone/s_node_3d_mesh_cone.yy",},
|
||||
{"name":"s_node_3d_mesh_cylinder","order":1,"path":"sprites/s_node_3d_mesh_cylinder/s_node_3d_mesh_cylinder.yy",},
|
||||
{"name":"s_node_3d_mesh_export","order":31,"path":"sprites/s_node_3d_mesh_export/s_node_3d_mesh_export.yy",},
|
||||
{"name":"s_node_3d_mesh_extrude_mesh","order":39,"path":"sprites/s_node_3d_mesh_extrude_mesh/s_node_3d_mesh_extrude_mesh.yy",},
|
||||
{"name":"s_node_3d_mesh_extrude","order":2,"path":"sprites/s_node_3d_mesh_extrude/s_node_3d_mesh_extrude.yy",},
|
||||
{"name":"s_node_3d_mesh_obj","order":3,"path":"sprites/s_node_3d_mesh_obj/s_node_3d_mesh_obj.yy",},
|
||||
{"name":"s_node_3d_mesh_path_extrude","order":32,"path":"sprites/s_node_3d_mesh_path_extrude/s_node_3d_mesh_path_extrude.yy",},
|
||||
|
|
|
@ -519,6 +519,7 @@
|
|||
{"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/3D/Node_3D_Mesh_Cube","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",},
|
||||
{"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/3D/Node_3D_Mesh_Cylinder","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",},
|
||||
{"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/3D/Node_3D_Mesh_Export","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",},
|
||||
{"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/3D/Node_3D_Mesh_Extrude_Mesh","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",},
|
||||
{"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/3D/Node_3D_Mesh_Extrude","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",},
|
||||
{"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/3D/Node_3D_Mesh_Obj","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",},
|
||||
{"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/3D/Node_3D_Mesh_Path_Extrude","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",},
|
||||
|
@ -1690,6 +1691,7 @@
|
|||
{"id":{"name":"d3d_light_point","path":"scripts/d3d_light_point/d3d_light_point.yy",},},
|
||||
{"id":{"name":"d3d_light","path":"scripts/d3d_light/d3d_light.yy",},},
|
||||
{"id":{"name":"d3d_material","path":"scripts/d3d_material/d3d_material.yy",},},
|
||||
{"id":{"name":"d3d_mesh_extrude_mesh","path":"scripts/d3d_mesh_extrude_mesh/d3d_mesh_extrude_mesh.yy",},},
|
||||
{"id":{"name":"d3d_object_instancer","path":"scripts/d3d_object_instancer/d3d_object_instancer.yy",},},
|
||||
{"id":{"name":"d3d_object","path":"scripts/d3d_object/d3d_object.yy",},},
|
||||
{"id":{"name":"d3d_path_extrude","path":"scripts/d3d_path_extrude/d3d_path_extrude.yy",},},
|
||||
|
@ -1846,6 +1848,7 @@
|
|||
{"id":{"name":"node_3d_mesh_cube","path":"scripts/node_3d_mesh_cube/node_3d_mesh_cube.yy",},},
|
||||
{"id":{"name":"node_3d_mesh_cylinder","path":"scripts/node_3d_mesh_cylinder/node_3d_mesh_cylinder.yy",},},
|
||||
{"id":{"name":"node_3d_mesh_export","path":"scripts/node_3d_mesh_export/node_3d_mesh_export.yy",},},
|
||||
{"id":{"name":"node_3d_mesh_extrude_mesh","path":"scripts/node_3d_mesh_extrude_mesh/node_3d_mesh_extrude_mesh.yy",},},
|
||||
{"id":{"name":"node_3d_mesh_extrude","path":"scripts/node_3d_mesh_extrude/node_3d_mesh_extrude.yy",},},
|
||||
{"id":{"name":"node_3d_mesh_obj","path":"scripts/node_3d_mesh_obj/node_3d_mesh_obj.yy",},},
|
||||
{"id":{"name":"node_3d_mesh_path_extrude","path":"scripts/node_3d_mesh_path_extrude/node_3d_mesh_path_extrude.yy",},},
|
||||
|
@ -3233,6 +3236,7 @@
|
|||
{"id":{"name":"s_node_3d_mesh_cube","path":"sprites/s_node_3d_mesh_cube/s_node_3d_mesh_cube.yy",},},
|
||||
{"id":{"name":"s_node_3d_mesh_cylinder","path":"sprites/s_node_3d_mesh_cylinder/s_node_3d_mesh_cylinder.yy",},},
|
||||
{"id":{"name":"s_node_3d_mesh_export","path":"sprites/s_node_3d_mesh_export/s_node_3d_mesh_export.yy",},},
|
||||
{"id":{"name":"s_node_3d_mesh_extrude_mesh","path":"sprites/s_node_3d_mesh_extrude_mesh/s_node_3d_mesh_extrude_mesh.yy",},},
|
||||
{"id":{"name":"s_node_3d_mesh_extrude","path":"sprites/s_node_3d_mesh_extrude/s_node_3d_mesh_extrude.yy",},},
|
||||
{"id":{"name":"s_node_3d_mesh_obj","path":"sprites/s_node_3d_mesh_obj/s_node_3d_mesh_obj.yy",},},
|
||||
{"id":{"name":"s_node_3d_mesh_path_extrude","path":"sprites/s_node_3d_mesh_path_extrude/s_node_3d_mesh_path_extrude.yy",},},
|
||||
|
|
Binary file not shown.
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"name":"Mesh Extrude",
|
||||
"tooltip":"Extrude mesh data into 3D object.",
|
||||
"spr":"s_node_3d_mesh_extrude_mesh",
|
||||
"pxc_version":118080,
|
||||
"baseNode":"Node_3D_Mesh_Extrude_Mesh",
|
||||
"io":[
|
||||
"d3Mesh",
|
||||
"mesh"
|
||||
],
|
||||
}
|
|
@ -482,6 +482,7 @@
|
|||
"Node_3D_Mesh_Terrain",
|
||||
"Node_3D_Mesh_Wall_Builder",
|
||||
"Node_3D_Mesh_Extrude",
|
||||
"Node_3D_Mesh_Extrude_Mesh",
|
||||
"Node_3D_Mesh_Path_Extrude",
|
||||
{ "label": "/Exporters" },
|
||||
"Node_3D_Mesh_Export",
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
function Mesh() constructor {
|
||||
triangles = [];
|
||||
center = [ 0, 0 ];
|
||||
bbox = [ 0, 0, 1, 1 ];
|
||||
|
||||
static getRandomPoint = function(seed) {
|
||||
random_set_seed(seed);
|
||||
|
@ -41,11 +42,11 @@ function Mesh() constructor {
|
|||
return false;
|
||||
}
|
||||
|
||||
static mergePath = function() {
|
||||
static mergePath = function(_conn = true) {
|
||||
if(array_length(triangles) == 0) return [];
|
||||
|
||||
var segments = [];
|
||||
var pointsPairs = ds_map_create();
|
||||
var pointsPairs = {};
|
||||
|
||||
for( var i = 0, n = array_length(triangles); i < n; i++ ) {
|
||||
var t = triangles[i];
|
||||
|
@ -73,28 +74,27 @@ function Mesh() constructor {
|
|||
}
|
||||
}
|
||||
|
||||
if(!_conn) return segments;
|
||||
|
||||
for( var i = 0, n = array_length(segments); i < n; i++ ) {
|
||||
var s0 = string(segments[i][0]);
|
||||
var s1 = string(segments[i][1]);
|
||||
|
||||
if(!ds_map_exists(pointsPairs, s0)) pointsPairs[? s0] = [];
|
||||
if(!ds_map_exists(pointsPairs, s1)) pointsPairs[? s1] = [];
|
||||
|
||||
array_push(pointsPairs[? s0], segments[i][1]);
|
||||
array_push(pointsPairs[? s1], segments[i][0]);
|
||||
var _s = segments[i];
|
||||
pointsPairs[$ _s[0]] = _s[1];
|
||||
pointsPairs[$ _s[1]] = _s[0];
|
||||
}
|
||||
|
||||
var path = [ segments[0][0], segments[0][1] ];
|
||||
var indx = 1;
|
||||
|
||||
for( var i = 0, n = array_length(segments); i < n; i++ ) {
|
||||
var end_point = path[array_length(path) - 1];
|
||||
var next_point = array_pop(pointsPairs[? string(end_point) ]);
|
||||
var last_point = path[indx];
|
||||
var next_point = pointsPairs[$ last_point];
|
||||
if(next_point == undefined) break;
|
||||
|
||||
array_remove(pointsPairs[? string(next_point)], end_point);
|
||||
struct_remove(pointsPairs, last_point);
|
||||
array_push(path, next_point);
|
||||
indx++;
|
||||
}
|
||||
|
||||
ds_map_destroy(pointsPairs);
|
||||
return path;
|
||||
}
|
||||
|
||||
|
@ -115,8 +115,13 @@ function Mesh() constructor {
|
|||
}
|
||||
|
||||
static calcCoM = function() {
|
||||
var _ax = 0, _ay = 0;
|
||||
var _ax = 0;
|
||||
var _ay = 0;
|
||||
var _p = 0;
|
||||
var _minx = infinity;
|
||||
var _miny = infinity;
|
||||
var _maxx = -infinity;
|
||||
var _maxy = -infinity;
|
||||
|
||||
for( var i = 0, n = array_length(triangles); i < n; i++ ) {
|
||||
var _tr = triangles[i];
|
||||
|
@ -124,6 +129,11 @@ function Mesh() constructor {
|
|||
for( var j = 0; j < 3; j++ ) {
|
||||
_ax += _tr[j].x;
|
||||
_ay += _tr[j].y;
|
||||
|
||||
_minx = min(_minx, _tr[j].x);
|
||||
_miny = min(_miny, _tr[j].y);
|
||||
_maxx = max(_maxx, _tr[j].x);
|
||||
_maxy = max(_maxy, _tr[j].y);
|
||||
_p++;
|
||||
}
|
||||
}
|
||||
|
@ -132,6 +142,7 @@ function Mesh() constructor {
|
|||
if(_p == 0) return;
|
||||
|
||||
center = [ _ax / _p, _ay / _p ];
|
||||
bbox = [ _minx, _miny, _maxx, _maxy ];
|
||||
}
|
||||
|
||||
static serialize = function() { return ""; }
|
||||
|
|
|
@ -8,7 +8,7 @@ enum SHAPE_TYPE {
|
|||
|
||||
function SHAPE_rectangle(_sca) {
|
||||
var triangles = [
|
||||
[ new __vec2(-_sca[0], -_sca[1]), new __vec2( _sca[0], -_sca[1]), new __vec2(-_sca[0], _sca[1]), c_white ],
|
||||
[ new __vec2(-_sca[0], -_sca[1]), new __vec2(-_sca[0], _sca[1]), new __vec2( _sca[0], -_sca[1]), c_white ],
|
||||
[ new __vec2( _sca[0], -_sca[1]), new __vec2(-_sca[0], _sca[1]), new __vec2( _sca[0], _sca[1]), c_white ],
|
||||
];
|
||||
var segment = [ new __vec2(-_sca[0], -_sca[1]), new __vec2( _sca[0], -_sca[1]),
|
||||
|
@ -71,7 +71,7 @@ function SHAPE_star(_sca, data = {}) {
|
|||
|
||||
var inx = lengthdir_x(inner / 2, (i - 0.5) / prec * 360) * _sca[0] * 2;
|
||||
var iny = lengthdir_y(inner / 2, (i - 0.5) / prec * 360) * _sca[1] * 2;
|
||||
array_push(triangles, [ new __vec2(0, 0), new __vec2(otx, oty), new __vec2(inx, iny), c_white ]);
|
||||
array_push(triangles, [ new __vec2(0, 0), new __vec2(inx, iny), new __vec2(otx, oty), c_white ]);
|
||||
|
||||
array_push(segment, new __vec2(inx, iny));
|
||||
array_push(segment, new __vec2(otx, oty));
|
||||
|
@ -93,8 +93,8 @@ function SHAPE_capsule(_sca, data = {}) {
|
|||
array_push(segment, new __vec2(-_sca[0] + _sca[1], _sca[1]), new __vec2( _sca[0] - hh, hh));
|
||||
|
||||
var triangles = [
|
||||
[ new __vec2(-_sca[0] + _sca[1], -_sca[1]), new __vec2( _sca[0] - hh, -hh), new __vec2(-_sca[0] + _sca[1], _sca[1]), c_white ],
|
||||
[ new __vec2( _sca[0] - hh, -hh), new __vec2(-_sca[0] + _sca[1], _sca[1]), new __vec2( _sca[0] - hh, hh), c_white ],
|
||||
[ new __vec2(-_sca[0] + _sca[1], -_sca[1]), new __vec2(-_sca[0] + _sca[1], _sca[1]), new __vec2(_sca[0] - hh, -hh), c_white ],
|
||||
[ new __vec2(_sca[0] - hh, -hh), new __vec2(-_sca[0] + _sca[1], _sca[1]), new __vec2(_sca[0] - hh, hh), c_white ],
|
||||
];
|
||||
shapes[0] = { type: SHAPE_TYPE.rectangle, triangles: triangles };
|
||||
|
||||
|
@ -108,7 +108,7 @@ function SHAPE_capsule(_sca, data = {}) {
|
|||
ny = cy + lengthdir_y(_sca[1], na);
|
||||
|
||||
if(i) {
|
||||
array_push(triangles, [ new __vec2(cx, cy), new __vec2(ox, oy), new __vec2(nx, ny), c_white ]);
|
||||
array_push(triangles, [ new __vec2(cx, cy), new __vec2(nx, ny), new __vec2(ox, oy), c_white ]);
|
||||
array_push(segment, new __vec2(ox, oy));
|
||||
}
|
||||
array_push(segment, new __vec2(nx, ny));
|
||||
|
@ -223,8 +223,8 @@ function SHAPE_gear(_sca, data = {}) {
|
|||
var tx1 = nx1 + lengthdir_x(teth, (i + 0.5 + teethT) / prec * 360) * _sca[0] * 2;
|
||||
var ty1 = ny1 + lengthdir_y(teth, (i + 0.5 + teethT) / prec * 360) * _sca[1] * 2;
|
||||
|
||||
array_push(triangles, [ new __vec2(tx0, ty0), new __vec2(nx0, ny0), new __vec2(nx1, ny1), c_white ]);
|
||||
array_push(triangles, [ new __vec2(tx0, ty0), new __vec2(nx1, ny1), new __vec2(tx1, ty1), c_white ]);
|
||||
array_push(triangles, [ new __vec2(tx0, ty0), new __vec2(nx1, ny1), new __vec2(nx0, ny0), c_white ]);
|
||||
array_push(triangles, [ new __vec2(tx0, ty0), new __vec2(tx1, ty1), new __vec2(nx1, ny1), c_white ]);
|
||||
|
||||
array_push(segment, new __vec2(tx0, ty0));
|
||||
array_push(segment, new __vec2(tx1, ty1));
|
||||
|
@ -246,28 +246,28 @@ function SHAPE_cross(_sca, data = {}) {
|
|||
var side = min(_sca[0], _sca[1]) * inner;
|
||||
|
||||
array_push(triangles,
|
||||
[ new __vec2(-side, -side), new __vec2( side, -side), new __vec2(-side, side), c_white ],
|
||||
[ new __vec2(-side, -side), new __vec2(-side, side), new __vec2( side, -side), c_white ],
|
||||
[ new __vec2( side, -side), new __vec2(-side, side), new __vec2( side, side), c_white ],
|
||||
);
|
||||
|
||||
array_push(triangles, //top
|
||||
[ new __vec2(-side, -side), new __vec2( side, -side), new __vec2(-side, -_sca[1]), c_white ],
|
||||
[ new __vec2( side, -side), new __vec2(-side, -_sca[1]), new __vec2( side, -_sca[1]), c_white ],
|
||||
[ new __vec2( side, -side), new __vec2( side, -_sca[1]), new __vec2(-side, -_sca[1]), c_white ],
|
||||
);
|
||||
|
||||
array_push(triangles, //bottom
|
||||
[ new __vec2(-side, _sca[1]), new __vec2( side, _sca[1]), new __vec2(-side, side), c_white ],
|
||||
[ new __vec2( side, _sca[1]), new __vec2(-side, side), new __vec2( side, side), c_white ],
|
||||
[ new __vec2( side, _sca[1]), new __vec2( side, side), new __vec2(-side, side), c_white ],
|
||||
);
|
||||
|
||||
array_push(triangles, //left
|
||||
[ new __vec2( -side, -side), new __vec2(-_sca[0], -side), new __vec2(-side, side), c_white ],
|
||||
[ new __vec2(-_sca[0], -side), new __vec2(-side, side), new __vec2(-_sca[0], side), c_white ],
|
||||
[ new __vec2(-_sca[0], -side), new __vec2(-_sca[0], side), new __vec2(-side, side), c_white ],
|
||||
);
|
||||
|
||||
array_push(triangles, //right
|
||||
[ new __vec2(_sca[0], -side), new __vec2( side, -side), new __vec2(_sca[0], side), c_white ],
|
||||
[ new __vec2( side, -side), new __vec2(_sca[0], side), new __vec2( side, side), c_white ],
|
||||
[ new __vec2( side, -side), new __vec2( side, side), new __vec2(_sca[0], side), c_white ],
|
||||
);
|
||||
|
||||
array_push(segment, new __vec2(-side, -side), new __vec2(-side, -_sca[1]), new __vec2( side, -_sca[1]), new __vec2(side, -side) );
|
||||
|
|
80
scripts/d3d_mesh_extrude_mesh/d3d_mesh_extrude_mesh.gml
Normal file
80
scripts/d3d_mesh_extrude_mesh/d3d_mesh_extrude_mesh.gml
Normal file
|
@ -0,0 +1,80 @@
|
|||
function __3dMeshExtrude() : __3dObject() constructor {
|
||||
VF = global.VF_POS_NORM_TEX_COL;
|
||||
render_type = pr_trianglelist;
|
||||
|
||||
object_counts = 3;
|
||||
mesh = noone;
|
||||
height = 1;
|
||||
|
||||
static initModel = function() {
|
||||
if(mesh == noone) return;
|
||||
|
||||
var _tris = mesh.triangles;
|
||||
var _bbox = mesh.bbox;
|
||||
var _minx = _bbox[0], _miny = _bbox[1];
|
||||
var _maxx = _bbox[2], _maxy = _bbox[3];
|
||||
var _boxw = _maxx - _minx;
|
||||
var _boxh = _maxy - _miny;
|
||||
|
||||
var _tria = array_length(_tris);
|
||||
if(_tria == 0) return;
|
||||
|
||||
var v0 = array_create(3 * _tria);
|
||||
var v1 = array_create(3 * _tria);
|
||||
var _h = height / 2;
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
for( var i = 0; i < _tria; i++ ) { // caps
|
||||
var _tri = _tris[i];
|
||||
var p0 = _tri[0];
|
||||
var p1 = _tri[1];
|
||||
var p2 = _tri[2];
|
||||
|
||||
var p0u = (p0.x - _minx) / _boxw;
|
||||
var p0v = (p0.y - _miny) / _boxh;
|
||||
var p1u = (p1.x - _minx) / _boxw;
|
||||
var p1v = (p1.y - _miny) / _boxh;
|
||||
var p2u = (p2.x - _minx) / _boxw;
|
||||
var p2v = (p2.y - _miny) / _boxh;
|
||||
|
||||
v0[i * 3 + 0] = new __vertex(p0u * 2 - 1, p0v * 2 - 1, _h).setNormal(0, 0, 1).setUV(p0u, p0v);
|
||||
v0[i * 3 + 1] = new __vertex(p1u * 2 - 1, p1v * 2 - 1, _h).setNormal(0, 0, 1).setUV(p1u, p1v);
|
||||
v0[i * 3 + 2] = new __vertex(p2u * 2 - 1, p2v * 2 - 1, _h).setNormal(0, 0, 1).setUV(p2u, p2v);
|
||||
|
||||
v1[i * 3 + 0] = new __vertex(p0u * 2 - 1, p0v * 2 - 1, -_h).setNormal(0, 0, -1).setUV(p0u, p0v);
|
||||
v1[i * 3 + 1] = new __vertex(p2u * 2 - 1, p2v * 2 - 1, -_h).setNormal(0, 0, -1).setUV(p2u, p2v);
|
||||
v1[i * 3 + 2] = new __vertex(p1u * 2 - 1, p1v * 2 - 1, -_h).setNormal(0, 0, -1).setUV(p1u, p1v);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
var br = mesh.mergePath(false);
|
||||
var vs = array_create(3 * array_length(br) * 2);
|
||||
|
||||
for( var i = 0, n = array_length(br); i < n; i++ ) {
|
||||
var p0 = br[i][0];
|
||||
var p1 = br[i][1];
|
||||
|
||||
var p0u = (p0.x - _minx) / _boxw;
|
||||
var p0v = (p0.y - _miny) / _boxh;
|
||||
var p1u = (p1.x - _minx) / _boxw;
|
||||
var p1v = (p1.y - _miny) / _boxh;
|
||||
|
||||
var nrm = d3_cross_product([0, 0, 1], [p1.x - p0.x, p1.y - p0.y, 0]);
|
||||
|
||||
vs[i * 6 + 0] = new __vertex(p0u * 2 - 1, p0v * 2 - 1, _h).setNormal(nrm[0], nrm[1], nrm[2]).setUV(0, 0);
|
||||
vs[i * 6 + 1] = new __vertex(p0u * 2 - 1, p0v * 2 - 1, -_h).setNormal(nrm[0], nrm[1], nrm[2]).setUV(0, 1);
|
||||
vs[i * 6 + 2] = new __vertex(p1u * 2 - 1, p1v * 2 - 1, _h).setNormal(nrm[0], nrm[1], nrm[2]).setUV(1, 0);
|
||||
|
||||
vs[i * 6 + 3] = new __vertex(p1u * 2 - 1, p1v * 2 - 1, _h).setNormal(nrm[0], nrm[1], nrm[2]).setUV(1, 0);
|
||||
vs[i * 6 + 4] = new __vertex(p0u * 2 - 1, p0v * 2 - 1, -_h).setNormal(nrm[0], nrm[1], nrm[2]).setUV(0, 1);
|
||||
vs[i * 6 + 5] = new __vertex(p1u * 2 - 1, p1v * 2 - 1, -_h).setNormal(nrm[0], nrm[1], nrm[2]).setUV(1, 1);
|
||||
}
|
||||
|
||||
vertex = [ v0, v1, vs ];
|
||||
VB = build();
|
||||
} initModel();
|
||||
|
||||
static onParameterUpdate = initModel;
|
||||
}
|
14
scripts/d3d_mesh_extrude_mesh/d3d_mesh_extrude_mesh.yy
Normal file
14
scripts/d3d_mesh_extrude_mesh/d3d_mesh_extrude_mesh.yy
Normal file
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"$GMScript":"v1",
|
||||
"%Name":"d3d_mesh_extrude_mesh",
|
||||
"isCompatibility":false,
|
||||
"isDnD":false,
|
||||
"name":"d3d_mesh_extrude_mesh",
|
||||
"parent":{
|
||||
"name":"d3d_mesh",
|
||||
"path":"folders/nodes/data/3D/d3d_mesh.yy",
|
||||
},
|
||||
"resourceType":"GMScript",
|
||||
"resourceVersion":"2.0",
|
||||
"tags":[],
|
||||
}
|
|
@ -0,0 +1,60 @@
|
|||
function Node_3D_Mesh_Extrude_Mesh(_x, _y, _group = noone) : Node_3D_Mesh(_x, _y, _group) constructor {
|
||||
name = "Mesh Extrude";
|
||||
object_class = __3dMeshExtrude;
|
||||
|
||||
newInput(in_mesh + 0, nodeValue("Mesh", self, CONNECT_TYPE.input, VALUE_TYPE.mesh, noone))
|
||||
.setVisible(true, true);
|
||||
|
||||
newInput(in_mesh + 1, nodeValue_Float("Thickness", self, 1));
|
||||
|
||||
newInput(in_mesh + 2, nodeValue_Bool("Smooth", self, false))
|
||||
|
||||
newInput(in_mesh + 3, nodeValue_Bool("Always update", self, false));
|
||||
|
||||
newInput(in_mesh + 4, nodeValue_D3Material("Face Texture", self, new __d3dMaterial()))
|
||||
.setVisible(true, true);
|
||||
|
||||
newInput(in_mesh + 5, nodeValue_D3Material("Side Texture", self, new __d3dMaterial()))
|
||||
.setVisible(true, true);
|
||||
|
||||
newInput(in_mesh + 6, nodeValue_D3Material("Back Texture", self, new __d3dMaterial()))
|
||||
.setVisible(true, true);
|
||||
|
||||
input_display_list = [ in_mesh + 3,
|
||||
__d3d_input_list_mesh,
|
||||
__d3d_input_list_transform,
|
||||
["Mesh", false], in_mesh + 0, in_mesh + 1, in_mesh + 2,
|
||||
["Render", false], in_mesh + 3, in_mesh + 4, in_mesh + 5, in_mesh + 6,
|
||||
]
|
||||
|
||||
temp_surface = [ noone, noone ];
|
||||
|
||||
setTrigger(1, "Refresh", [ THEME.refresh_20, 0, COLORS._main_value_positive ], function() /*=>*/ { for(var i = 0; i < process_amount; i++) getObject(i).initModel(); });
|
||||
|
||||
static processData = function(_output, _data, _output_index, _array_index = 0) {
|
||||
var _mesh = _data[in_mesh + 0];
|
||||
var _hght = _data[in_mesh + 1];
|
||||
var _smt = _data[in_mesh + 2];
|
||||
var _updt = _data[in_mesh + 3];
|
||||
|
||||
var _tex_crs = _data[in_mesh + 4];
|
||||
var _tex_sid = _data[in_mesh + 5];
|
||||
var _tex_bck = _data[in_mesh + 6];
|
||||
|
||||
if(!is(_mesh, Mesh)) return noone;
|
||||
|
||||
var _object = getObject(_array_index);
|
||||
_object.checkParameter( {
|
||||
mesh : _mesh,
|
||||
height : _hght,
|
||||
}, _updt);
|
||||
|
||||
_object.materials = [ _tex_crs, _tex_bck, _tex_sid ];
|
||||
|
||||
setTransform(_object, _data);
|
||||
|
||||
return _object;
|
||||
}
|
||||
|
||||
static getPreviewValues = function() { return getSingleValue(in_mesh + 0); }
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"$GMScript":"v1",
|
||||
"%Name":"node_3d_mesh_extrude_mesh",
|
||||
"isCompatibility":false,
|
||||
"isDnD":false,
|
||||
"name":"node_3d_mesh_extrude_mesh",
|
||||
"parent":{
|
||||
"name":"d3d_mesh",
|
||||
"path":"folders/nodes/data/3D/d3d_mesh.yy",
|
||||
},
|
||||
"resourceType":"GMScript",
|
||||
"resourceVersion":"2.0",
|
||||
"tags":[],
|
||||
}
|
|
@ -1419,6 +1419,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
|
|||
if(_reach == false) _arr = noone;
|
||||
|
||||
__getNodeChildList_cache[$ _node] = _arr;
|
||||
__getNodeChildList_cacheId = project.nodeTopoID;
|
||||
return _arr;
|
||||
}
|
||||
|
||||
|
|
|
@ -217,7 +217,7 @@ function Node_Text(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
|
|||
if(edit_cursor_sel != noone && i >= _crmin && i < _crmax) {
|
||||
draw_set_color(COLORS.widget_text_highlight);
|
||||
draw_set_alpha(0.5);
|
||||
draw_rectangle(_tbx0, _tby0, _tbx1, _tby1, false);
|
||||
draw_rectangle(_tbx0, _tby0, _tbx1 - 1, _tby1 - 1, false);
|
||||
draw_set_alpha(1);
|
||||
}
|
||||
|
||||
|
@ -291,6 +291,13 @@ function Node_Text(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
|
|||
_currStr = string_delete(_currStr, edit_cursor + 1, 1);
|
||||
_edit = true;
|
||||
|
||||
} else if(KEYBOARD_PRESSED == vk_enter) {
|
||||
_currStr = string_insert("\n", _currStr, edit_cursor + 1);
|
||||
_edit = true;
|
||||
|
||||
edit_cursor += 1;
|
||||
KEYBOARD_STRING = "";
|
||||
|
||||
} else if(KEYBOARD_STRING != "") {
|
||||
_currStr = string_insert(KEYBOARD_STRING, _currStr, edit_cursor + 1);
|
||||
_edit = true;
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 3.2 KiB |
Binary file not shown.
After Width: | Height: | Size: 3.2 KiB |
|
@ -0,0 +1,90 @@
|
|||
{
|
||||
"$GMSprite":"",
|
||||
"%Name":"s_node_3d_mesh_extrude_mesh",
|
||||
"bboxMode":0,
|
||||
"bbox_bottom":56,
|
||||
"bbox_left":4,
|
||||
"bbox_right":57,
|
||||
"bbox_top":6,
|
||||
"collisionKind":1,
|
||||
"collisionTolerance":0,
|
||||
"DynamicTexturePage":false,
|
||||
"edgeFiltering":false,
|
||||
"For3D":false,
|
||||
"frames":[
|
||||
{"$GMSpriteFrame":"","%Name":"da92e7b3-db50-40f4-9094-49208c57e5bf","name":"da92e7b3-db50-40f4-9094-49208c57e5bf","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
|
||||
],
|
||||
"gridX":0,
|
||||
"gridY":0,
|
||||
"height":64,
|
||||
"HTile":false,
|
||||
"layers":[
|
||||
{"$GMImageLayer":"","%Name":"4f3c6aa7-fabf-466c-8391-90f525bd768a","blendMode":0,"displayName":"default","isLocked":false,"name":"4f3c6aa7-fabf-466c-8391-90f525bd768a","opacity":100.0,"resourceType":"GMImageLayer","resourceVersion":"2.0","visible":true,},
|
||||
],
|
||||
"name":"s_node_3d_mesh_extrude_mesh",
|
||||
"nineSlice":null,
|
||||
"origin":4,
|
||||
"parent":{
|
||||
"name":"3D",
|
||||
"path":"folders/nodes/icons/3D.yy",
|
||||
},
|
||||
"preMultiplyAlpha":false,
|
||||
"resourceType":"GMSprite",
|
||||
"resourceVersion":"2.0",
|
||||
"sequence":{
|
||||
"$GMSequence":"",
|
||||
"%Name":"s_node_3d_mesh_extrude_mesh",
|
||||
"autoRecord":true,
|
||||
"backdropHeight":768,
|
||||
"backdropImageOpacity":0.5,
|
||||
"backdropImagePath":"",
|
||||
"backdropWidth":1366,
|
||||
"backdropXOffset":0.0,
|
||||
"backdropYOffset":0.0,
|
||||
"events":{
|
||||
"$KeyframeStore<MessageEventKeyframe>":"",
|
||||
"Keyframes":[],
|
||||
"resourceType":"KeyframeStore<MessageEventKeyframe>",
|
||||
"resourceVersion":"2.0",
|
||||
},
|
||||
"eventStubScript":null,
|
||||
"eventToFunction":{},
|
||||
"length":1.0,
|
||||
"lockOrigin":false,
|
||||
"moments":{
|
||||
"$KeyframeStore<MomentsEventKeyframe>":"",
|
||||
"Keyframes":[],
|
||||
"resourceType":"KeyframeStore<MomentsEventKeyframe>",
|
||||
"resourceVersion":"2.0",
|
||||
},
|
||||
"name":"s_node_3d_mesh_extrude_mesh",
|
||||
"playback":1,
|
||||
"playbackSpeed":30.0,
|
||||
"playbackSpeedType":0,
|
||||
"resourceType":"GMSequence",
|
||||
"resourceVersion":"2.0",
|
||||
"showBackdrop":true,
|
||||
"showBackdropImage":false,
|
||||
"timeUnits":1,
|
||||
"tracks":[
|
||||
{"$GMSpriteFramesTrack":"","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"$KeyframeStore<SpriteFrameKeyframe>":"","Keyframes":[
|
||||
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
|
||||
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"da92e7b3-db50-40f4-9094-49208c57e5bf","path":"sprites/s_node_3d_mesh_extrude_mesh/s_node_3d_mesh_extrude_mesh.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
|
||||
},"Disabled":false,"id":"a010b26d-298e-4357-a684-15f946c6a155","IsCreationKey":false,"Key":0.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
|
||||
],"resourceType":"KeyframeStore<SpriteFrameKeyframe>","resourceVersion":"2.0",},"modifiers":[],"name":"frames","resourceType":"GMSpriteFramesTrack","resourceVersion":"2.0","spriteId":null,"trackColour":0,"tracks":[],"traits":0,},
|
||||
],
|
||||
"visibleRange":null,
|
||||
"volume":1.0,
|
||||
"xorigin":32,
|
||||
"yorigin":32,
|
||||
},
|
||||
"swatchColours":null,
|
||||
"swfPrecision":0.5,
|
||||
"textureGroupId":{
|
||||
"name":"Default",
|
||||
"path":"texturegroups/Default",
|
||||
},
|
||||
"type":0,
|
||||
"VTile":false,
|
||||
"width":64,
|
||||
}
|
Loading…
Reference in a new issue