New 3D Mesh Extrude node.

This commit is contained in:
Tanasart 2025-02-05 11:18:39 +07:00
parent bf0eab492f
commit 968b2e4f9c
16 changed files with 334 additions and 38 deletions

View file

@ -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",},

View file

@ -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.

View file

@ -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"
],
}

View file

@ -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",

View file

@ -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 _p = 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 ""; }

View file

@ -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) );

View 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;
}

View 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":[],
}

View file

@ -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); }
}

View file

@ -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":[],
}

View file

@ -1407,7 +1407,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
static getNodeChildList = function(_node) {
if(__getNodeChildList_cacheId != project.nodeTopoID)
__getNodeChildList_cache = {};
if(struct_has(__getNodeChildList_cache, _node)) return __getNodeChildList_cache[$ _node];
var _ind_self = array_find(project.nodeTopo, self);
@ -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;
}

View file

@ -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);
}
@ -290,6 +290,13 @@ function Node_Text(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
} else if(KEYBOARD_PRESSED == vk_delete) {
_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);

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

View file

@ -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,
}