I think J forum actually accept text file attachments.
Attach .ijs file as .txt file probably work if email
client set mime type correctly.

Fri, 28 Feb 2020, Raul Miller написал(а):
> This is getting to be long enough that it might help to use a resource
> like github (either a repository or a gist) or even pastebin (rather
> than email) to distribute it.
> 
> (I'm still getting going for today, and haven't actually tried this,
> yet. But I'm anticipating some difficulties separating text from code
> and maybe chasing down implied pieces.)
> 
> Thanks,
> 
> -- 
> Raul
> 
> On Fri, Feb 28, 2020 at 8:52 AM Brian Schott <schott.br...@gmail.com> wrote:
> >
> > Bill, especially (Thomas, Raul, and others),
> >
> > Your comment regarding trying a simpler figure and simplifying the color
> > has led me to consider several alternatives. Below I show a revised script
> > which uses a tetrahedron (4 faces) and some color changes. I think the
> > tetrahedron is mostly working for me but I am really confused about the
> > colors.
> >
> > I apologize for the length of this email, but I have many questions.
> >
> > As an aside, I have discovered an error in the shader.ijs in the qtdemo's.
> > The last 0 in the following line should be a 1 because it's the alpha
> > value. (Coincidentally, there is another line in shader.ijs which also
> > addresses ClearColor, but it is ignored, I think, and it separates the
> > integers with ;'s .) Correcting that alpha value creates a black
> > background, which can be effective.
> >
> > glClearColor 0 0 0 0
> >
> > Btw, I have left 2 glClearColor's in the script so it's easy to swap them:
> > white 1 1 1 1 and
> > black 0 0 0 1 .
> >
> > The major changes I have made to the script are the following.
> >
> > NB.  changed cube to a mirrored sphenoid(?)
> > NB. (eg, see
> > https://en.wikipedia.org/wiki/Architectonic_and_catoptric_tessellation)
> >
> > rt=: (|.@:{)`[`]}   NB. rotates vertices of xth face for winding order
> > vertexData=: 1&fc ,1 rt 3 rt  4 3 3$ %&10, 0&". ;._2 [ 0 : 0
> > _3 _9 _4
> >  3 _9 _4
> >  0  0  2
> >  0  8 _4
> > )
> >
> > I discovered that the verb `rt` (or something like it) is required to make
> > the tetrahedron work because of face winding issues. The original cube was
> > adjusted another way, apparently.
> > With `vertexData` defined either as above OR without `1&fc` prepended I get
> > the SAME --mostly desirable-- results. The inclusion and exclusion of
> > `1&fc` giving the same result is confusing, by itself, and begs the
> > question, "Why is `1&fc` used?"
> >
> > I said "mostly desirable" above, instead of "desirable" because of the next
> > 2 issues.
> >
> > v0) The 10 in the first line of the definition of vertexData is used to
> > simplify data entry and I have also used it to experiment with scaling the
> > size of the tetrahedron. This has led to another surprise, that no scaling
> > seems to result from increasing the 10 to 80 or so. Why?
> >
> > v1) I have been disillusioned by the face coloring of the tetrahedron, even
> > in the simplest situations because when the tetrahedron is rotated in
> > certain directions, the black or white background seems to bleed through
> > one of the edges. What causes that?
> >
> > Now, moving on to coloring. I have no idea how the face COLORing works
> > using almost any version of `colorData` below. I can generalize though on
> > one thing: if I leave out the `1&fc`, no colors work on ANY version
> > of `colorData` .
> >
> > The first version below seems to give a complete tetrahedron except for the
> > background color bleeding through one edge. And as mentioned earlier, it
> > only works with vertices rotated with the rt verb.
> >
> > colorData=: 1&fc ,1 rt 3 rt  4 3 3$ , 0&". ;._2 [ 0 : 0
> > 0 0 1
> > 1 1 1
> > 1 0 0
> > 0 1 0
> > )
> >
> > f0) If the 1's in the second row are changed to 0.9's, the background color
> > no longer bleeds in. Why?
> >
> > f1) (This approach does not seem to work at all, and I have a replacement
> > for it that works a little, but will send it in a new message) I want 2 of
> > the faces in the tetrahedron to have the same color and each of the other 2
> > to have a different color (3 colors altogether). I devised the following
> > NONWORKING scheme of colors to accomplish this result. By nonworking I mean
> > only the background color shows in the graphics pane, no tetrahedron. Why?
> >
> > colorData=:  1&fc ,_3]\3#"2] 0&". ;._2 [ 0 : 0
> > 0 0 1
> > 1 1 1
> > 1 0 0
> > 0 1 0
> > )
> >
> > To demonstrate the result above consider the following result which makes
> > each of the 4 faces, represented by the boxes' contents below, has 3
> > identical rows.
> >    ;/_3]\3#"2] 0&". ;._2 [ 0 : 0
> > 0 0 1
> > 1 1 1
> > 1 0 0
> > 0 1 0
> > )
> > +-----+-----+-----+-----+
> > |0 0 1|1 1 1|1 0 0|0 1 0|
> > |0 0 1|1 1 1|1 0 0|0 1 0|
> > |0 0 1|1 1 1|1 0 0|0 1 0|
> > +-----+-----+-----+-----+
> >
> >
> >
> > ***************my revised slider.ijs script is below************
> >
> > cocurrent 'demoshader'
> >
> > mp=: (+/ . *)"2
> > rt=: (|.@:{)`[`]}NB. rotates vertices of xth face for winding order
> > sprog=: 0
> > GLSL=: 0
> > STOP=: 0
> >
> > A=: 0 : 0
> > pc a;
> > minwh 300 300;cc g opengl flush;
> > rem form end;
> > )
> >
> > a_run=: 3 : 0
> > NB. if. -. checkrequire_qtdemo_ 'gles';'api/gles' do. return. end.
> > require 'gl2'
> > coinsert 'jgl2'
> > require 'gles'
> > coinsert 'jgles'
> > require '~addons/ide/qt/opengl.ijs'
> > coinsert 'qtopengl'
> > STEPS=: 100
> > R=: 20 30 0
> > EYE=: 0 0 1
> > LR=: UD=: IO=: 0
> > UP=: 0 1 0
> > wd A
> > HD=: ".wd'qhwndc g'
> > wd 'ptimer 100'
> > wd 'pshow'
> > )
> >
> > a_g_initialize=: 3 : 0
> > if. p=. >@{. glGetString GL_VERSION do. smoutput 'GL_VERSION: ', memr 0 _1
> > 2,~ p end.
> > if. 0=p do. smoutput 'cannot retrieve GL_VERSION' return. end.
> > if. p=. >@{. glGetString GL_VENDOR do. smoutput 'GL_VENDOR: ', memr 0 _1
> > 2,~ p end.
> > if. p=. >@{. glGetString GL_RENDERER do. smoutput 'GL_RENDERER: ', memr 0
> > _1 2,~ p end.
> > if. p=. >@{. glGetString GL_SHADING_LANGUAGE_VERSION do. smoutput
> > 'GL_SHADING_LANGUAGE_VERSION: ', memr 0 _1 2,~ p end.
> > GLSL=: wglGLSL''
> >
> > wglPROC''
> > sprog=: 0
> > if. GLSL>120 do.
> >   vsrc=. vsrc2
> >   fsrc=. fsrc2
> > else.
> >   vsrc=. vsrc1
> >   fsrc=. fsrc1
> >   if. 0=GLES_VERSION_jgles_ do.
> >     vsrc=. vsrc,~ '#define lowp', LF, '#define mediump', LF, '#define
> > highp', LF
> >     fsrc=. fsrc,~ '#define lowp', LF, '#define mediump', LF, '#define
> > highp', LF
> >   end.
> > end.
> > vsrc=. '#version ',(":GLSL),((GLSL>:300)#(*GLES_VERSION){::' core';'
> > es'),LF,vsrc
> > fsrc=. '#version ',(":GLSL),((GLSL>:300)#(*GLES_VERSION){::' core';'
> > es'),LF,fsrc
> > if.(GLSL>:300)*.0~:GLES_VERSION_jgles_ do.
> >   fsrc=. ('void main';'out vec4 gl_FragColor;',LF,'void main')
> > stringreplace fsrc
> > end.
> > smoutput vsrc
> > smoutput fsrc
> > 'err program'=. gl_makeprogram vsrc;fsrc
> > if. #err do. smoutput err return. end.
> >
> > vertexAttr=: >@{. glGetAttribLocation program;'vertex'
> > assert. _1~: vertexAttr
> > colorAttr=: >@{. glGetAttribLocation program;'color'
> > assert. _1~: colorAttr
> > mvpUni=: >@{. glGetUniformLocation program;'mvp'
> > assert. _1~: mvpUni
> >
> > glGenBuffers 2;vbo=: 2#_1
> > glBindBuffer GL_ARRAY_BUFFER; {.vbo
> > glBufferData GL_ARRAY_BUFFER; (#vertexData); (symdat <'vertexData');
> > GL_STATIC_DRAW
> > glBindBuffer GL_ARRAY_BUFFER; {:vbo
> > glBufferData GL_ARRAY_BUFFER; (#colorData); (symdat <'colorData');
> > GL_STATIC_DRAW
> > glBindBuffer GL_ARRAY_BUFFER; 0
> >
> > sprog=: program
> >
> > NB. glClearColor 0; 0; 1; 1
> > )
> >
> > a_g_char=: 3 : 0
> > if. 0=#sysdata do. return. end.
> > R=: 360 | R + 2 * 'xyz' = 0 { sysdata
> > k=. 0{sysdata
> > STEPS=: 200 <. STEPS + 's' = k
> > STEPS=: 3 >. STEPS - 'a' = k
> > LR=: LR - 0.01*'l'=k
> > LR=: LR + 0.01*'r'=k
> > gl_paint ''
> > )
> >
> > a_timer=: 3 : 0
> > if. 0=STOP do. return. end.
> > R=: 360 | R + 2 * 1 1 1
> > gl_sel HD
> > gl_paint''
> > )
> >
> > a_g_paint=: 3 : 0
> > if. 0=sprog do. return. end.
> >
> > wh=. gl_qwh''
> > glClearColor 1 1 1 1
> > glClearColor 0 0 0 1   NB. this is new
> > glClear GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT
> >
> > glUseProgram sprog
> > glEnable GL_DEPTH_TEST
> > glEnable GL_CULL_FACE
> >
> > NB. matrix convention: current matrix on the left
> > NB. note pre-multiplication
> >
> > NB. model-view
> > mvp=: (gl_Rotate (0{R), 1 0 0 ) mp (gl_Rotate (1{R), 0 1 0) mp (gl_Rotate
> > (2{R), 0 0 1) mp (gl_Scale STEPS%100) mp (gl_Translate 0 0 _8) mp
> > glu_LookAt EYE,LR,UD,IO,UP
> >
> > NB. projection
> > mvp=: mvp mp gl_Perspective 30, (%/wh),1 10
> >
> > NB. note GL_FALSE, no transpose
> > glUniformMatrix4fv mvpUni; 1; GL_FALSE; mvp
> >
> > glBindBuffer GL_ARRAY_BUFFER; {.vbo
> > glEnableVertexAttribArray vertexAttr
> > glVertexAttribPointer vertexAttr; 3; GL_FLOAT; 0; 0; 0
> >
> > glBindBuffer GL_ARRAY_BUFFER; {:vbo
> > glEnableVertexAttribArray colorAttr
> > glVertexAttribPointer colorAttr; 3; GL_FLOAT; 0; 0; 0
> >
> > glDrawArrays GL_TRIANGLES; 0; 12   NB. 36 was for cubes *******
> >
> > glBindBuffer GL_ARRAY_BUFFER; 0
> > glDisableVertexAttribArray colorAttr
> > glDisableVertexAttribArray vertexAttr
> >
> > glDisable GL_DEPTH_TEST
> > glDisable GL_CULL_FACE
> >
> > glUseProgram 0
> >
> > gl_clear ''
> > gl_rgb 255 255 255
> > gl_textcolor ''
> > gl_textxy 10 30
> > gl_text 'keys: x y z a s l r F4'
> > gl_textxy 10 50
> > gl_text 'scale: ',":STEPS%100
> > gl_textxy 10 70
> > gl_text 'angle: ',":R
> > gl_textxy 10 90
> > if. 0=sprog do. return. end.
> > gl_text 'matrix:'
> > for_i. i.4 do.
> >   gl_textxy 10, 105+i*15
> >   gl_text 6j2": i{mvp
> > end.
> > )
> >
> > a_f4_fkey=: 3 : 0
> > STOP=: -.STOP
> > NB. gl_paint ''
> > )
> >
> > a_cancel=: a_close
> >
> > a_close=: 3 : 0
> > STOP=: 0
> > wd 'ptimer 0'
> > glDeleteBuffers ::0: 2; vbo
> > glDeleteProgram ::0: sprog
> > wd 'pclose'
> > )
> >
> > NB.  Mirrored sphenoid?
> > vertexData=: 1&fc ,1 rt 3 rt  4 3 3$ %&80, 0&". ;._2 [ 0 : 0
> > _3 _9 _4
> >  3 _9 _4
> >  0  0  2
> >  0  8 _4
> > )
> >
> > colorData=: 1&fc ,1 rt 3 rt  4 3 3$ , 0&". ;._2 [ 0 : 0
> > 0 0 1
> > 1 1 1
> > 1 0 0
> > 0 1 0
> > )
> >
> >
> > NB. =========================================================
> > vsrc1=: 0 : 0
> > attribute highp vec3 vertex;
> > attribute lowp vec3 color;
> > varying lowp vec4 v_color;
> > uniform mat4 mvp;
> > void main(void)
> > {
> >   gl_Position = mvp * vec4(vertex,1.0);
> >   v_color = vec4(color,1.0);
> > }
> > )
> >
> > fsrc1=: 0 : 0
> > varying lowp vec4 v_color;
> > void main(void)
> > {
> >   gl_FragColor = v_color;
> > }
> > )
> >
> > NB. =========================================================
> > vsrc2=: 0 : 0
> > in vec3 vertex;
> > in vec3 color;
> > out vec4 v_color;
> > uniform mat4 mvp;
> > void main(void)
> > {
> >   gl_Position = mvp * vec4(vertex,1.0);
> >   v_color = vec4(color,1.0);
> > }
> > )
> >
> > fsrc2=: 0 : 0
> > in vec4 v_color;
> > void main(void)
> > {
> >   gl_FragColor = v_color;
> > }
> > )
> >
> > NB. =========================================================
> > a_run''
> >
> > On Fri, Feb 14, 2020 at 7:19 PM bill lam <bbill....@gmail.com> wrote:
> >
> > > If you intended to run turtle graphics only, then drawing cube is over
> > > skilled. Drawing triangles is much simpler. eg a triangle with vertices
> > > 0 1 0, 1 _1 0, _1 _1 0
> > > then use different scale, translate and rotate to place them into 
> > > different
> > > positions and orientations.
> > >
> > > Also only a constant solid color from fragment shader is sufficient.
> > >
> > > On Sat, Feb 15, 2020, 7:19 AM Brian Schott <schott.br...@gmail.com> wrote:
> > >
> > > --
> > (B=)
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm

-- 
regards,
====================================================
GPG key 1024D/4434BAB3 2008-08-24
gpg --keyserver subkeys.pgp.net --armor --export 4434BAB3
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to