{"id":9166,"date":"2023-02-06T21:53:35","date_gmt":"2023-02-06T12:53:35","guid":{"rendered":"https:\/\/minnano.app\/support\/?p=9166"},"modified":"2023-02-06T22:06:52","modified_gmt":"2023-02-06T13:06:52","slug":"env_pri_cat_32-37","status":"publish","type":"post","link":"https:\/\/minnano.app\/support\/2023\/02\/06\/env_pri_cat_32-37\/","title":{"rendered":"\u74b0\u5883\u539f\u732b 32\uff5e37\u65e5\u76ee"},"content":{"rendered":"\n<p><a href=\"https:\/\/minnano.app\/support\/2023\/01\/29\/env_pri_cat_29\/\">29\u65e5\u76ee<\/a>\u3067CPU\u306b\u3088\u308a\u6c34\u5206\u5b50\u3092\u30b0\u30ea\u30b0\u30ea\u52d5\u304b\u3057\u307e\u3057\u305f\u304c\u3001\u4eca\u56de\u306f\u30b7\u30a7\u30fc\u30c0\u3067Transform Feedback\u3092\u5229\u7528\u3057\u3066\u52d5\u304b\u3059\u3053\u3068\u304c\u51fa\u6765\u307e\u3057\u305f\uff01<\/p>\n\n\n\n<p>\u30b7\u30a7\u30fc\u30c0\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u5909\u66f4\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code>layout (location = 0) in vec3 Position;\nlayout (location = 1) in vec2 Speed;\n<strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ff0000\" class=\"has-inline-color\">out vec3 feedbackPosition;<\/mark><\/strong>\nuniform float pointSize;\n\nvoid main()\n{\n    gl_Position = vec4(Position, 1.0);\n<strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ff0000\" class=\"has-inline-color\">    float x = Position.x + Speed.x;\n    float y = Position.y + Speed.y;\n    if (1.0 &lt; x) { x = -1.0; }\n    if (x &lt; -1.0) { x = 1.0; }\n    if (1.0 &lt; y) { y = -1.0; }\n    if (y &lt; -1.0) { y = 1.0; }\n    feedbackPosition = vec3(x, y, 0.0);<\/mark><\/strong>\n    gl_PointSize = pointSize;\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code>\uff5e\u7565\uff5e\n<strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ff0000\" class=\"has-inline-color\">let c_string = CString::new(\"feedbackPosition\").unwrap();\nlet c_string_ptr = &amp;c_string.as_ptr();\ngl::TransformFeedbackVaryings(program_id,<\/mark><\/strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ff0505\" class=\"has-inline-color\"><strong> 1, c_st<\/strong><\/mark><strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ff0000\" class=\"has-inline-color\">ring_ptr, gl::SEPARATE_ATTRIBS);<\/mark><\/strong>\ngl::LinkProgram(program_id);\n\uff5e\u7565\uff5e\n<\/code><\/pre>\n\n\n\n<p><strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ff0000\" class=\"has-inline-color\">out vec3 feedbackPosition<\/mark><\/strong>\u306b\u3001\u30b7\u30a7\u30fc\u30c0\u306b\u3088\u308b\u8a08\u7b97\u7d50\u679c\u304c\u683c\u7d0d\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u4f4d\u7f6e\u60c5\u5831\u3092\u3082\u30461\u3064\u4f5c\u3063\u3066\u3001\u5165\u529b\u3068\u51fa\u529b\u7528\u306b\u5206\u3051\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code>    let mut vertices: Vec&lt;f32&gt; = Vec::with_capacity(POINTS * 3);\n<strong>   <mark style=\"background-color:rgba(0, 0, 0, 0);color:#ff0000\" class=\"has-inline-color\"> let mut vertices2: Vec&lt;f32&gt; = Vec::with_capacity(POINTS * 3);<\/mark><\/strong>\n    let mut vertices_speed: Vec&lt;f32&gt; = Vec::with_capacity(POINTS * 2);\n    let mut rng = rand::thread_rng();\n    for _i in 0..POINTS {\n        vertices.push(rng.gen_range(-1.0..1.0));    \/\/ x\n        vertices.push(rng.gen_range(-1.0..1.0));    \/\/ y\n        vertices.push(0.0);                         \/\/ z\n<strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#fd0000\" class=\"has-inline-color\">        vertices2.push(0.0);    \/\/ x\n        vertices2.push(0.0);    \/\/ y\n        vertices2.push(0.0);    \/\/ z<\/mark><\/strong>\n        vertices_speed.push(rng.gen_range(-0.01..0.01));    \/\/ speed x\n        vertices_speed.push(rng.gen_range(-0.01..0.01));    \/\/ speed y\n    }<\/code><\/pre>\n\n\n\n<p>\u63cf\u753b\u6642\u306b\u3001\u5165\u529b\u3068\u51fa\u529b\u3092\u6bce\u30d5\u30ec\u30fc\u30e0\u5165\u308c\u66ff\u3048\u308b\u3088\u3046\u306b\u3057\u307e\u3057\u305f\u3002\u51fa\u529b\u7d50\u679c\u304c\u6b21\u306e\u5165\u529b\u5024\u306b\u306a\u308b\u3088\u3046\u306b\u3057\u3001\u305d\u306e\u969b\u306e\u51fa\u529b\u7d50\u679c\u306f\u6b21\u306e\u5165\u529b\u306b\u30fb\u30fb\u30fb\u3068\u6bce\u56de\u5165\u308c\u66ff\u3048\u306a\u304c\u3089\u5206\u5b50\u306e\u4f4d\u7f6e\u3092\u66f4\u65b0\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ff0000\" class=\"has-inline-color\">let mut b_turn: bool = false;<\/mark><\/strong>\n\n'running: loop {\n    \uff5e\u7565\uff5e\n    \/\/ draw points\n    unsafe {\n<strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ff0000\" class=\"has-inline-color\">        if b_turn {\n            gl::BindVertexArray(vao2);\n            gl::BindBufferBase(gl::TRANSFORM_FEEDBACK_BUFFER, 0, vbo);\n        } else {\n            gl::BindVertexArray(vao);\n            gl::BindBufferBase(gl::TRANSFORM_FEEDBACK_BUFFER, 0, vbo2);\n        }<\/mark><\/strong>\n        \/\/ Transform Feedback \u958b\u59cb\n<strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ff0000\" class=\"has-inline-color\">        gl::BeginTransformFeedback(gl::POINTS);<\/mark><\/strong>\n        gl::DrawArrays(\n            gl::POINTS,     \/\/ mode\n            0,              \/\/ starting index in the enabled arrays\n            POINTS as i32,  \/\/ number of indices to be rendered\n        );\n        \/\/ Transform Feedback \u7d42\u4e86\n        <strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#fc0000\" class=\"has-inline-color\">gl::EndTransformFeedback();<\/mark><\/strong>\n        \/\/ \u5f8c\u7247\u4ed8\u3051\n        gl::BindBuffer(gl::ARRAY_BUFFER, 0);\n        gl::BindVertexArray(0);\n    }\n    \/\/ swap window\n    window.gl_swap_window();\n    }\n  <strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ff0000\" class=\"has-inline-color\">  b_turn = !b_turn;<\/mark><\/strong>\n}<\/code><\/pre>\n\n\n\n<p>\u6c17\u306b\u306a\u308b\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u3067\u3059\u304c\u3001<br>Transform Feedback\u672a\u4f7f\u7528(CPU\u3067\u8a08\u7b97)\u306e\u5834\u5408\u3001<\/p>\n\n\n\n<p>1000\u4e07\u30dd\u30a4\u30f3\u30c8 = 28FPS<br>1\u5104\u30dd\u30a4\u30f3\u30c8 = 3FPS<\/p>\n\n\n\n<p>Transform Feedback \u4f7f\u7528(\u30b7\u30a7\u30fc\u30c0\u3067\u8a08\u7b97)\u306e\u5834\u5408\u3001<\/p>\n\n\n\n<p class=\"has-large-font-size\">1000\u4e07\u30dd\u30a4\u30f3\u30c8 = 60FPS<br>1\u5104\u30dd\u30a4\u30f3\u30c8 = 20FPS<\/p>\n\n\n\n<p>\u3068\u306a\u308a\u3001\u5927\u5e45\u306a\u6027\u80fd\u5411\u4e0a\u3092\u679c\u305f\u3057\u307e\u3057\u305f\u3002\u306a\u3093\u3068\u3053\u308c\u3001\u5206\u5b50\u3092\u52d5\u304b\u3059\u524d\u3068FPS\u5024\u304c\u307b\u307c\u5909\u308f\u3063\u3066\u7121\u3044\u3067\u3059\u3002Transform Feedback\u306b\u3088\u308a\u3001\u4f59\u3063\u3066\u7121\u99c4\u306b\u306a\u3063\u3066\u3044\u305fGPU\u30ea\u30bd\u30fc\u30b9\u3092\u6709\u52b9\u6d3b\u7528\u3067\u304d\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<p lang=\"\" style=\"font-family:'MS PGothic','\uff2d\uff33 \uff30\u30b4\u30b7\u30c3\u30af',sans-serif;font-size: 16px; line-height:18px;\"><script type=\"text\/javascript\" src=\"https:\/\/minnano.app\/textmanga\/assets\/js\/caller\/text_manga_0000000060.js?v=1\"><\/script><span name=\"text_manga_0000000060_001\">(&nbsp;\u270c&#8217;\u03c9&#8217;)\u270c<\/span><\/p>\n\n\n\n<p><a href=\"http:\/\/env_pri_cat_38-44\">\u6b21\u306e\u9031<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>29\u65e5\u76ee\u3067CPU\u306b\u3088\u308a\u6c34\u5206\u5b50\u3092\u30b0\u30ea\u30b0\u30ea\u52d5\u304b\u3057\u307e\u3057\u305f\u304c\u3001\u4eca\u56de\u306f\u30b7\u30a7\u30fc\u30c0\u3067Transform Feedback\u3092\u5229\u7528\u3057\u3066\u52d5\u304b\u3059\u3053\u3068\u304c\u51fa\u6765\u307e\u3057\u305f\uff01 \u30b7\u30a7\u30fc\u30c0\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u5909\u66f4\u3057\u3066\u3044\u307e\u3059\u3002 out vec3 feedbackPo &hellip; <a href=\"https:\/\/minnano.app\/support\/2023\/02\/06\/env_pri_cat_32-37\/\" class=\"more-link\">\u7d9a\u304d\u3092\u8aad\u3080 <span class=\"screen-reader-text\">\u74b0\u5883\u539f\u732b 32\uff5e37\u65e5\u76ee<\/span> <span class=\"meta-nav\">&rarr;<\/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":[23],"tags":[],"class_list":["post-9166","post","type-post","status-publish","format-standard","hentry","category-23"],"_links":{"self":[{"href":"https:\/\/minnano.app\/support\/wp-json\/wp\/v2\/posts\/9166","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/minnano.app\/support\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/minnano.app\/support\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/minnano.app\/support\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/minnano.app\/support\/wp-json\/wp\/v2\/comments?post=9166"}],"version-history":[{"count":20,"href":"https:\/\/minnano.app\/support\/wp-json\/wp\/v2\/posts\/9166\/revisions"}],"predecessor-version":[{"id":9187,"href":"https:\/\/minnano.app\/support\/wp-json\/wp\/v2\/posts\/9166\/revisions\/9187"}],"wp:attachment":[{"href":"https:\/\/minnano.app\/support\/wp-json\/wp\/v2\/media?parent=9166"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/minnano.app\/support\/wp-json\/wp\/v2\/categories?post=9166"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/minnano.app\/support\/wp-json\/wp\/v2\/tags?post=9166"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}