#author("2017-10-30T14:24:13+09:00","default:kyo-in","kyo-in")
#author("2017-12-17T21:16:06+09:00","default:kyo-in","kyo-in")
**¥·¥§¡¼¥À¡¼ [#a723d9d9]
¤³¤³¤Ç¤Ï¥·¥§¡¼¥À¤Î´ðÁäò³Ø¤Ó¤Þ¤¹¡¥

** ½àÈ÷ [#g44eca36]
¥â¥Ç¥ë1¸Ä¤È¥é¥¤¥È¤¬1¤Ä¤¢¤ë´ðËÜŪ¤Ê¥·¡¼¥ó¤òÍÑ°Õ¤·¤Þ¤¹¡¥

 void setup()
 {
   size(640, 480, P3D);
 }
 
 void draw()
 {
   background(127, 127, 127);
   camera(100, -100, 100, 0, 0, 0, 0, 1, 0);
   axis(100);
   fill(255, 0, 0);
   noStroke();
   directionalLight(255, 255, 255, -1, 1, 0);
   sphere(30);
 }
 
 void axis(float l)
 {
   stroke(255, 0, 0);
   line(0, 0, 0, l, 0, 0);
   stroke(0, 255, 0);
   line(0, 0, 0, 0, l, 0);
   stroke(0, 0, 255);
   line(0, 0, 0, 0, 0, l);
 }

#ref(./lightrot.png,50%);

**¥·¥§¡¼¥À¡¼¤È¤Ï [#sd18281c]
¤³¤ì¤Þ¤Ç¡¤3DCG¤òÉÁ¤¯¤¿¤á¸÷¸»¤ÎÀßÄê¤Ê¤É¤ò¹Ô¤¤¤Þ¤·¤¿¡¥Î㤨¤Ð¡¤
 directionalLight(255, 255, 255, -1, 1, 0);
¤Î¤è¤¦¤Ëµ­½Ò¤·¤Þ¤·¤¿¡¥

¤Ç¤Ï¡¤¼ÂºÝ¤ËÇÛÃÖ¤µ¤ì¤¿¥â¥Ç¥ë¤È¸÷¸»¤Ï¤É¤Î¤è¤¦¤Ë·×»»¤µ¤ì¤Æ¿§¤¬·èÄꤵ¤ì¤ë¤Î¤Ç¤·¤ç¤¦¤«¡©~
Processing2.0¤«¤é¤Ï¥·¥§¡¼¥À¤¬¤½¤Î·×»»¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡¥

¥·¥§¡¼¥À¤Ï¥×¥í¥°¥é¥à¤«¤éÅϤµ¤ì¤¿¥â¥Ç¥ë¤Î¾ðÊó¡ÊĺÅÀ¤Î°ÌÃÖ¡¤Ë¡Àþ¡¤¿§¤Ê¤É¡Ë¡¤¸÷¸»¤Î¾ðÊó¡Ê¿§¡¤¸þ¤­¤Ê¤É¡Ë¤Ê¤É¤ò¼õ¤±¤È¤ê¡¤GPU¤ËÂФ·¤Æ¤É¤Î¤è¤¦¤Ë·×»»¤·¡¤²èÌ̤βèÁǤ理ò¤É¤¦¤¹¤ë¤«»Ø¼¨¤¹¤ë¤¿¤á¤Î¡¤¤â¤¦°ì¤Ä¤Î¥×¥í¥°¥é¥à¤Ç¤¹¡¥

**¥·¥§¡¼¥À¤ò»È¤Ã¤Æ¤ß¤ë [#z02f494d]
Processing¤¬¥Ç¥Õ¥©¥ë¥È¤Ç»ÈÍѤ·¤Æ¤¤¤ë¥·¥§¡¼¥À¤ò¤ä¤á¤Æ¡¤¼«¿È¤Ç¥·¥§¡¼¥À¤òÍÑ°Õ¤·¤Æ»È¤Ã¤Æ¤ß¤Þ¤¹¡¥¤Þ¤º¤ÏƱ¤¸·ë²Ì¤ò½Ð¤¹¤è¤¦¤Ë¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡¥

 PShader shader;
 
 void setup()
 {
   size(640, 480, P3D);
   shader = loadShader("FragmentShader.glsl", "VertexShader.glsl");
 }
 
 void draw()
 {
   background(127, 127, 127);
   camera(100, -100, 100, 0, 0, 0, 0, 1, 0);
   axis(100);
   fill(255, 0, 0);
   noStroke();
   directionalLight(255, 255, 255, -1, 1, 0);
   shader(shader);
   sphere(30);
 }
 
 void axis(float l)
 {
   stroke(255, 0, 0);
   line(0, 0, 0, l, 0, 0);
   stroke(0, 255, 0);
   line(0, 0, 0, 0, l, 0);
   stroke(0, 0, 255);
   line(0, 0, 0, 0, 0, l);
 }

¥·¥§¡¼¥À¤Ç¤¢¤ë°Ê²¼2¤Ä¤Î¥Õ¥¡¥¤¥ë¡¤VertexShader.glsl¡¤FragmentShader.glsl¤Ï¥á¥âÄ¢¤Ê¤É¤Ë¥³¥Ô¡¼¤·¤Æ¥Æ¥­¥¹¥È¥Õ¥¡¥¤¥ë¤È¤·¤ÆÊݸ¡¤Processing¤Î[Sketch]¢ª[Add File]¤ÇÄɲ䷤Ƥ¯¤À¤µ¤¤¡¥

VertexShader.glsl¡§
 uniform mat4 transform; 
 uniform mat3 normalMatrix; 
 uniform vec3 lightNormal;
 
 attribute vec4 vertex; 
 attribute vec4 color;
 attribute vec3 normal;
 
 varying vec4 vertColor;
 varying vec3 vertNormal;
 varying vec3 vertLightDir;
 
 void main() {
   gl_Position = transform * vertex;  
   vertColor = color;
   vertNormal = normalize(normalMatrix * normal);
   vertLightDir = -lightNormal;
 }

FragmentShader.glsl¡§
 #ifdef GL_ES
 precision mediump float;
 precision mediump int;
 #endif
 
 #define PROCESSING_LIGHT_SHADER
 
 uniform float fraction;
 
 varying vec4 vertColor;
 varying vec3 vertNormal;
 varying vec3 vertLightDir;
 
 void main() {  
   float intensity;
   intensity = max(0.0, dot(vertLightDir, vertNormal));
   gl_FragColor = vec4(vertColor.xyz * intensity, 1.0);
 }

**¥·¥§¡¼¥À¤Î½ñ¤­´¹¤¨ [#v9abd0ce]
[Sketch]¢ª[Show Sketch Folder]¤Ç¡¤¸½ºß¤ÎSketch¤Î¥Õ¥©¥ë¥À¤ò³«¤­¡¤¥Õ¥©¥ë¥À¡ÖData¡×¤ò³«¤¯¤È¡¤Àè¤Û¤ÉÄɲä·¤¿Æó¤Ä¤Î¥·¥§¡¼¥À¥Õ¥¡¥¤¥ë¤¬¤¢¤ë¤Î¤Ç¡¤¤³¤ì¤ò½ñ¤­´¹¤¨¤Æ¤¤¤­¤Þ¤¹¡¥

Î㤨¤Ð¡¤¥â¥Ç¥ë¤òÉÁ²è¤¹¤ëºÝ¤Î¡¤³Æ²èÁǤ理ÏFragmentShader.glslÆâ¤Ç·×»»¤µ¤ì¤Þ¤¹¡¥¶ñÂÎŪ¤Ë¤Ï°Ê²¼¤Î¥³¡¼¥É¤Ç¤¹¡¥
 gl_FragColor = vec4(vertColor.xyz * intensity, 1.0);
»î¤·¤Ë¡¤°Ê²¼¤Î¤è¤¦¤ËÊѹ¹¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡¥
 gl_FragColor = vec4(0.5, 0.5, 1.0, 1.0);
#ref(./fragshader.png,50%);

¥â¥Ç¥ë¤Î¿§¤òÀ֤ȻØÄꤷ¤Æ¤¤¤ë¤Î¤Ë´Ø¤ï¤é¤º¡¤¥â¥Ç¥ë¤¬ÀĤˤʤê¤Þ¤·¤¿¡¥¥·¥§¡¼¥À¤Ç¥â¥Ç¥ë¤òÉÁ²è¤¹¤ëºÝ¤Ï¡¤²èÌ̤βèÁǤ理òɬ¤º
 RGBA=(0.5, 0.5, 1.0, 1.0);
¤È¤¹¤ë¤è¤¦¤Ë¥·¥§¡¼¥À¤ò½ñ¤­´¹¤¨¤¿¤¿¤á¤Ç¤¹¡¥

¸µ¡¹¤Î¥×¥í¥°¥é¥à¤¬¤É¤¦¤¤¤¦°ÕÌ£¤«²òÀ⤷¤Æ¤¤¤­¤Þ¤¹¡¥
 gl_FragColor = vec4(vertColor.xyz * intensity, 1.0);

vertColor¤Ë¤Ï¥â¥Ç¥ë¤Î¿§¤¬Æþ¤Ã¤Æ¤¤¤Þ¤¹RGBA=(1, 0, 0, 1)¡¥¥·¥§¡¼¥ÀÆâ¤Ç¤Ï¿§¤â¥Ù¥¯¥È¥ë¤È¤·¤Æ°·¤¦¤¿¤áXYZW¤¬¤½¤ì¤¾¤ìRGBA¤ËÂбþ¤·¤Þ¤¹¡¥intensity¤Ï°Ê²¼¤Î¤è¤¦¤Ë·×»»¤µ¤ì¤Æ¤¤¤Þ¤¹¡¥
 intensity = max(0.0, dot(vertLightDir, vertNormal));
vertLightDir¤Ï¸÷¸»¤Î¸þ¤­¤ÎÈ¿ÂÐ¥Ù¥¯¥È¥ë¡¤vertNormal¤Ï¥â¥Ç¥ëĺÅÀ¤ÎË¡Àþ¤Ç¤¹¡¥dot¤ÏÆâÀѤò¹Ô¤¦´Ø¿ô¡¤max¤Ï2¤Ä¤ÎÃͤΤ¦¤Á¡¤Â礭¤¤ÃͤòÊÖ¤¹´Ø¿ô¤Ç¤¹¡¥ÆâÀѤϡ¤2¤Ä¤Î¥Ù¥¯¥È¥ë¤¬Æ±¤¸¸þ¤­¤ò¸þ¤¤¤Æ¤¤¤ì¤Ð1¡¤Ä¾³Ñ¤Ç¤¢¤ì¤Ð0¡¤È¿ÂФò¸þ¤¤¤Æ¤¤¤ì¤Ð-1¤È¤Ê¤ê¤Þ¤¹¡¥°Ê²¼¤Î¿Þ¤Ç¼¨¤¹¤è¤¦¤Ë¡¤¥â¥Ç¥ëĺÅÀ¤ÎË¡Àþ¤È¡¤¸÷¸»¤Î¸þ¤­¤ÎÈ¿ÂÐ¥Ù¥¯¥È¥ë¤ÎÆâÀѤÎÃͤò¥â¥Ç¥ë¤Î¿§¤ËÀÑ»»¤¹¤ë¤³¤È¤Ç¸÷¤Îɽ¸½¤¬²Äǽ¤È¤Ê¤ê¤Þ¤¹¡¥

#ref(./lighting.png,50%);

Î㤨¤Ð¡¤ÆâÀѤÎÃͤòÆ©ÌÀÅ٤ˤ¹¤ë¤è¤¦ÀßÄꤷ¤Æ¤ß¤Þ¤¹¡¥

   gl_FragColor = vec4(vertColor.xyz * intensity, intensity);

¸÷¤¬Åö¤¿¤Ã¤Æ¤¤¤ë¸Ä½ê¤ÏÉÔÆ©ÌÀ¤Ç¡¤Åö¤¿¤é¤Ê¤¤¸Ä½ê¤ÏÆ©ÌÀ¤È¤Ê¤ê¤Þ¤¹¡¥

#ref(./trans.png,50%);

¤³¤Î¤è¤¦¤Ë¥·¥§¡¼¥À¤ò½ñ¤­´¹¤¨¤ë¤³¤È¤Ç¡¤Processing¤¬ÍÑ°Õ¤¹¤ë¥Ç¥Õ¥©¥ë¥È¤Î´Ø¿ô¤Ç¤Ï¼Â¸½ÉÔ²Äǽ¤Êɽ¸½¤ò¹Ô¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡¥

**¥·¥§¡¼¥ÀÆâ¤Ç»È¤¨¤ë·¿ [#c9ad6958]
¥·¥§¡¼¥À¤ÏProcessing¤È¤Ï°Û¤Ê¤ë¸À¸ì¤Ç¤¹¤Î¤Ç¡¤»È¤¨¤ë·¿¤â°Û¤Ê¤ê¤Þ¤¹¡¥CG¤Ë¤ª¤¤¤Æ¤Ï¥Ù¥¯¥È¥ë¤ª¤è¤Ó¹ÔÎó¤ò»È¤¦¤³¤È¤¬Â¿¤¤¤Î¤Ç¡¤¤½¤ì¤é¤Î·¿¤Ï½é¤á¤«¤éÍÑ°Õ¤µ¤ì¤Æ¤¤¤Þ¤¹¡¥

-float¡§ProcessingƱÍÍ¡¤¾¯¿ô¤ò´Þ¤àÃÍ°ì¤Ä¤ò°·¤¦·¿
-vec2¡§2¼¡¸µ¥Ù¥¯¥È¥ë
-vec3¡§3¼¡¸µ¥Ù¥¯¥È¥ë
-vec4¡§4¼¡¸µ¥Ù¥¯¥È¥ë
-mat2¡§2x2¹ÔÎó
-mat3¡§3x3¹ÔÎó
-mat4¡§4x4¹ÔÎó

Àµ³Î¤Ë¤ÏProcessing¤Ç¤ÏGLSL¤È¤¤¤¦¥·¥§¡¼¥À¸À¸ì¤Ê¤Î¤Ç¡¤»ÈÍѤǤ­¤ë·¿¤Î¾ÜºÙ¤Ï°Ê²¼¤ò»²¾È¡¥

-https://www.khronos.org/opengl/wiki/Data_Type_(GLSL)

¤³¤³¤Ç¤Ï¥Ù¥¯¥È¥ë·¿¤Î»ÈÍÑÎã¤ò¼¨¤·¤Þ¤¹¡¥

 vec4 v = vec4(1.0, 0.0, 0.0, 1.0); //4¼¡¸µ¥Ù¥¯¥È¥ëÊÑ¿ô¤òÃͽé´ü²½¤·¤ÆºîÀ®
 v.x = 2.0;                         //xÀ®Ê¬¤òÊѹ¹
 v.y = v.z;                         //yÀ®Ê¬¤òzÀ®Ê¬¤ËÊѹ¹
 vec3 a = vec3(3.0, 2.0, 1.0);      //3¼¡¸µ¥Ù¥¯¥È¥ëÊÑ¿ô¤òÃͽé´ü²½¤·¤ÆºîÀ®
 v = vec4(a.xyz, 1.0);              //v¤ÎÃͤòÊѹ¹¡¤a.xyz¤Î¤è¤¦¤ËÊ£¿ôÀ®Ê¬¤ò¤Þ¤È¤á¤¿½ñ¤­Êý¤â²Äǽ
                                    //v¤Ï(3.0, 2.0, 1.0, 1.0)¤È¤Ê¤ë
 vec3 b = vec3(0.3, 0.2, 0.1);
 vec3 c = a + b;                    //¥Ù¥¯¥È¥ë¤Î­¤·»»¤È¤Ê¤êc¤Ï(3.3, 2.2, 1.1)¤È¤Ê¤ë
 vec3 d = a * b;                    //À®Ê¬¤´¤È¤Î³Ý¤±»»¤È¤Ê¤êd¤Ï(0.9, 0.4, 0.1)¤È¤Ê¤ë
¾ÜºÙ¤òÃΤꤿ¤¤¾ì¹ç¤Ï°Ê²¼¤ò»²¾È¡§
-https://en.wikibooks.org/wiki/GLSL_Programming/Vector_and_Matrix_Operations

**²ÝÂê¤ÎÄó½ÐÀ衦Äó½ÐÊýË¡ [#dc136f9e]
 \\nas002.term.usmc.dendai.ac.jp\¼ø¶ÈÍѥ¥¯¥¹¥Ú¡¼¥¹\Àé½»¥­¥ã¥ó¥Ñ¥¹\¸å´ü\̤Íè²Ê³ØÉô\­¢¾ðÊó¥á¥Ç¥£¥¢³Ø²Ê\FI1¥á¥Ç¥£¥¢±é½¬C(CG)(¿¹Ã«Í§¾¼)·î34\Âè06²ó

»ØÄꤵ¤ì¤¿¥¹¥±¥Ã¥Á̾¤Ç¡¤''&color(red){¥¹¥±¥Ã¥Á¥Õ¥©¥ë¥À¤´¤ÈÄó½Ð¤·¤Æ¤¯¤À¤µ¤¤¡¥};''

''Äó½ÐÄù¤áÀڤꡧ11·î3Æü¡Ê¶â¡Ë 18:00''
''Äó½ÐÄù¤áÀڤꡧ12·î22Æü¡Ê¶â¡Ë 18:00''

**²ÝÂê [#vdde6c4b]
¥»¥Ô¥¢Ä´¡Ê¸Å¤¤¼Ì¿¿¤Î¤è¤¦¤Ê¿§¹ç¤¤¡Ë¤ÇÉÁ²è¤¹¤ë¥·¥§¡¼¥À¤ò½ñ¤±

Äó½Ð¥¹¥±¥Ã¥Á̾¡§BASIC6_1¡¡''¡Ê¥Õ¥©¥ë¥À¤´¤ÈÄó½Ð¡Ë''

¥ª¥ê¥¸¥Ê¥ë¡Ê¥·¥§¡¼¥À¤òÍѤ¤¤Æ¤¤¤Ê¤¤¡Ë¡§
#ref(orig.png);

²ÝÂê¤Î·ë²ÌÎ㡧
#ref(sepia.png);

***¥Ò¥ó¥È¡§¥»¥Ô¥¢Ä´¤Ø¤ÎÊÑ´¹¼° [#fe51763e]
°Ê²¼¤Î¥µ¥¤¥È¤è¤ê°úÍѤ¹¤ë¤È¡¤
-https://wgld.org/d/webgl/w054.html

¤Þ¤º¡¤¥ª¥ê¥¸¥Ê¥ë¤Î²èÁǤ理òc¤È¤¹¤ë¤È¡¤¤½¤ì¤ò¥°¥ì¡¼¥¹¥±¡¼¥ëg¤ËÊÑ´¹¤¹¤ë¡¥

>g = 0.29 * c.r + 0.58 * c.g + 0.11 * c.b

¥«¥é¡¼¤ò¥°¥ì¡¼¥¹¥±¡¼¥ë¤ØÊÑ´¹¤¹¤ë¼°¤ÏÍÍ¡¹¤Ê¼°¤¬Äó°Æ¤µ¤ì¤Æ¤ª¤ê¡¤¾åµ­¤Î¼°¤Ï¤½¤ÎÆâ¤Î°ì¼ï¤Ç¤¢¤ë¡¥

-[[https://ja.wikipedia.org/wiki/¥°¥ì¡¼¥¹¥±¡¼¥ë:https://ja.wikipedia.org/wiki/%E3%82%B0%E3%83%AC%E3%83%BC%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%AB]]

¥°¥ì¡¼¥¹¥±¡¼¥ë¤ÎÃÍg¤ò´ð¤Ë¡¤¥»¥Ô¥¢Ä´¤Î¿§¤òÀ¸À®¤¹¤ë¡¥¤³¤Î¼°¤Ë¤Ï¸·Ì©¤ÊÄêµÁ¤Ï¤Ê¤¤¡¥

²èÁǤ理òp¤È¤¹¤ë¤È¡¤

>p.r = 1.07 * g
>p.g = 0.74 * g
>p.b = 0.43 * g

¤È¤¹¤ë¤³¤È¤Ç¡¤¥»¥Ô¥¢Ä´¤Î¿§¤È¤Ê¤ë¡¥

***¥Ò¥ó¥È¡§¥°¥ì¡¼¥¹¥±¡¼¥ë¤Þ¤Ç¤Î¼ÂÁõÎã [#p62479db]

  vec3 c = vertColor.xyz * intensity;
  float g = 0.29 * c.x + 0.58 * c.y + 0.11 * c.z;
  gl_FragColor = vec4(g, g, g, 1.0);

***¥Ò¥ó¥È¡§Çطʤο§ [#g67c4f74]
ʪÂΤ¬ÉÁ²è¤µ¤ì¤Ê¤¤²Õ½ê¤Ï¥·¥§¡¼¥À¤¬Å¬ÍѤµ¤ì¤Ê¤¤¤Î¤Ç¡¤background´Ø¿ô¤Î¿§¤ò¥»¥Ô¥¢Ä´¤Î¿§¤ËÊѹ¹¤·¤Æ¤ª¤¯¡¥

·ë²ÌÎã¤Ï¡¤
 background(240, 200, 145);
¤È¤·¤Æ¤¤¤ë¡¥

**Ǥ°Õ²ÝÂê [#q10e4c95]
¥¢¥Ë¥áÄ´¡Ê¥È¥¥¡¼¥ó¥·¥§¡¼¥Ç¥£¥ó¥°¡Ë¤ÇÉÁ²è¤¹¤ë¥·¥§¡¼¥À¤ò½ñ¤±

Äó½Ð¥¹¥±¥Ã¥Á̾¡§ADVANCE6_1¡¡''¡Ê¥Õ¥©¥ë¥À¤´¤ÈÄó½Ð¡Ë''

#ref(toon.png);

¥Ò¥ó¥È¡§¥¢¥Ë¥áÄ´¤Ë¤¹¤ë¤Ë¤Ï

²¼¿Þº¸¤Î¤è¤¦¤Ë¡¤intensity¤ò¤½¤Î¤Þ¤Þ»ÈÍѤ·¤¿¾ì¹ç¡¤É½Ì̤ÎÌÀ¤ë¤µ¤ÏϢ³Ū¤ËÊѲ½¤¹¤ë¡¥¤½¤³¤Ç¡¤²¼¿Þ±¦¤Î¤è¤¦¤Ë¡¤intensity¤ÎÃͤò³¬Ãʾõ¤Ë¤Ê¤ë¤è¤¦¤Ë²Ã¹©¤¹¤ì¤Ð¤è¤¤¡¥¤³¤ì¤Ë¤Ï¿ô¼°¤ÏɬÍפʤ¯¡¤ifʸ¤Ç²Äǽ¤Ç¤¢¤ë¡¥

#ref(./int.png,50%);


¥È¥Ã¥×   ¿·µ¬ °ìÍ÷ ¸¡º÷ ºÇ½ª¹¹¿·   ¥Ø¥ë¥×   ºÇ½ª¹¹¿·¤ÎRSS