{"id":17246,"date":"2026-09-12T13:31:11","date_gmt":"2026-09-12T04:31:11","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=17246"},"modified":"2026-09-12T13:35:55","modified_gmt":"2026-09-12T04:35:55","slug":"three-js-%ec%82%ac%ec%9a%a9%ec%9e%90-%ec%a0%95%ec%9d%98-tsl-%eb%85%b8%eb%93%9c-add-%eb%85%b8%eb%93%9c%eb%a5%bc-%ec%98%88%ec%8b%9c%eb%a1%9c","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=17246","title":{"rendered":"three.js, \uc0ac\uc6a9\uc790 \uc815\uc758 TSL \ub178\ub4dc (add \ub178\ub4dc\ub97c \uc608\uc2dc\ub85c&#8230;)"},"content":{"rendered":"<p>three.js\uc758 TSL\uc5d0\uc11c \uc7ac\uc0ac\uc6a9\uc774 \uac00\ub2a5\ud55c \ucf54\ub4dc\ub97c TSL \ub178\ub4dc\ud654\ud558\uc5ec \uc81c\uacf5\ud558\uba74 DX\ub97c \ud5a5\uc0c1\uc2dc\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ubbf8 \uc81c\uacf5\ud558\uace0 \uc788\ub294 add \ub178\ub4dc\uc640 \ub3d9\uc77c\ud558\uac8c \uc791\ub3d9\ud558\ub294 myAdd \ub178\ub4dc\ub97c \uc608\uc2dc\ub85c \uc0ac\uc6a9\uc790 \uc815\uc758 \ub178\ub4dc\ub97c \ub9cc\ub4dc\ub294 \ucf54\ub4dc\uc785\ub2c8\ub2e4.<\/p>\n<p>\ub450\uac00\uc9c0 \ubc29\uc2dd\uc774 \uac00\ub2a5\ud558\uba70 \uccab\ubc88\uc9f8\ub294 \ud504\ub9ac\uc14b \ub178\ub4dc\ub97c \ud65c\uc6a9\ud558\ub294 \ubc29\uc2dd\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"javascript\">\r\nclass MyAddNode extends THREE.TempNode {\r\n  static get type() {\r\n    return 'MyAddNode';\r\n  }\r\n\r\n  constructor(aNode, bNode) {\r\n    super('float'); \/\/ \ucd9c\ub825 \ud0c0\uc785\uc744 float\ub85c \uace0\uc815\r\n\r\n    this.aNode = aNode;\r\n    this.bNode = bNode;\r\n  }\r\n\r\n  \/\/ \uc2e4\uc81c \uc5f0\uc0b0 \ub85c\uc9c1 - \uae30\uc874 TSL \uc5f0\uc0b0\uc790\ub97c \uc870\ud569\ud574\uc11c \uad6c\uc131\r\n  setup() {\r\n    const { aNode, bNode } = this;\r\n\r\n    return float(aNode).add(float(bNode));\r\n  }\r\n}\r\n\r\nexport default MyAddNode;\r\n<\/pre>\n<p>\uc774\ub807\uac8c \uc815\uc758\ub41c \ub178\ub4e4 \ud568\uc218\ud615 \ubb38\ubc95\uacfc \uba54\uc11c\ub4dc \uccb4\uc774\ub2dd \ubb38\ubc95\uc73c\ub85c \uc0ac\uc6a9\ub420 \uc218 \uc788\ub3c4\ub85d \ud558\ub294 \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"javascript\">\r\nexport default MyAddNode;\r\n\r\n\/\/ \ud568\uc218\ud615 \ubb38\ubc95\uc73c\ub85c \ub178\ucd9c: myAdd( a, b )\r\nexport const myAdd = \/*@__PURE__*\/ nodeProxy(MyAddNode).setParameterLength(2).setName('myAdd');\r\n\r\n\/\/ \uba54\uc11c\ub4dc \uccb4\uc774\ub2dd \uc9c0\uc6d0: a.myAdd( b )\r\naddMethodChaining('myAdd', myAdd);\r\n<\/pre>\n<p>\ud504\ub9ac\uc14b \ub178\ub4dc\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\uc2dd\uc740 \ucee4\uc2a4\ud140 \ub178\ub4dc \uac1c\ubc1c\uc774 \uac04\ub2e8\ud558\ub2e4\ub294 \uc7a5\uc810\uc740 \uc788\uc73c\ub098 \uc6d0\ud558\ub294 \uae30\ub2a5\uc744 \uace0\uc9c4 \ud504\ub9ac\uc14b \ub178\ub4dc\uac00 \uc5c6\uc744 \uacbd\uc6b0 WGSL \ucf54\ub4dc\ub098 WGSL \ucf54\ub4dc\ub97c \uc9c1\uc811 \uc774\uc6a9\ud558\ub294 \ubc29\uc2dd\uc774\uba70 \uc55e\uc11c \ubd24\ub358 \uac83\uacfc \ub3d9\uc77c\ud55c \uae30\ub2a5\uc744 \uac00\uc9c4 \ub178\ub4dc\uc758 \ud074\ub798\uc2a4\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"javascript\">\r\nclass MyAddNode extends THREE.TempNode {\r\n  static get type() {\r\n    return 'MyAddNode';\r\n  }\r\n\r\n  constructor(aNode, bNode) {\r\n    super('float');\r\n    this.aNode = aNode;\r\n    this.bNode = bNode;\r\n  }\r\n\r\n  generate(builder, output) {\r\n    const type = this.getNodeType(builder); \/\/ 'float'\r\n\r\n    const a = this.aNode.build(builder, type);\r\n    const b = this.bNode.build(builder, type);\r\n\r\n    return builder.format(`( ${a} + ${b} )`, type, output);\r\n  }\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>three.js\uc758 TSL\uc5d0\uc11c \uc7ac\uc0ac\uc6a9\uc774 \uac00\ub2a5\ud55c \ucf54\ub4dc\ub97c TSL \ub178\ub4dc\ud654\ud558\uc5ec \uc81c\uacf5\ud558\uba74 DX\ub97c \ud5a5\uc0c1\uc2dc\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ubbf8 \uc81c\uacf5\ud558\uace0 \uc788\ub294 add \ub178\ub4dc\uc640 \ub3d9\uc77c\ud558\uac8c \uc791\ub3d9\ud558\ub294 myAdd \ub178\ub4dc\ub97c \uc608\uc2dc\ub85c \uc0ac\uc6a9\uc790 \uc815\uc758 \ub178\ub4dc\ub97c \ub9cc\ub4dc\ub294 \ucf54\ub4dc\uc785\ub2c8\ub2e4. \ub450\uac00\uc9c0 \ubc29\uc2dd\uc774 \uac00\ub2a5\ud558\uba70 \uccab\ubc88\uc9f8\ub294 \ud504\ub9ac\uc14b \ub178\ub4dc\ub97c \ud65c\uc6a9\ud558\ub294 \ubc29\uc2dd\uc785\ub2c8\ub2e4. class MyAddNode extends THREE.TempNode { static get type() { return &#8216;MyAddNode&#8217;; } constructor(aNode, bNode) { super(&#8216;float&#8217;); \/\/ \ucd9c\ub825 \ud0c0\uc785\uc744 float\ub85c &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=17246\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;three.js, \uc0ac\uc6a9\uc790 \uc815\uc758 TSL \ub178\ub4dc (add \ub178\ub4dc\ub97c \uc608\uc2dc\ub85c&#8230;)&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[145],"tags":[],"class_list":["post-17246","post","type-post","status-publish","format-standard","hentry","category-three-js"],"_links":{"self":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/17246","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=17246"}],"version-history":[{"count":3,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/17246\/revisions"}],"predecessor-version":[{"id":17249,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/17246\/revisions\/17249"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=17246"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=17246"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=17246"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}