Did kernels need any modification?

Thu, 27 Feb 2020, Thomas McGuire написал(а):
> It took me a while to understand this a little bit. But the shader can render 
> any number of objects you just need to set up the data and tell the shader to 
> paint the object. To create 2 cubes I had to modify the a_g_initialize 
> function and the a_g_paint function. I have placed comments in the code 
> trying to show with my limited understanding of OpenGL what is being done. To 
> just create 2 duplicate cubes this code could be simplified.  But if 2 
> different  types of objects needed to be rendered everything would likely 
> stay the same with a second set of vertex and color data being added for the 
> new object (right now I reuse vertexData and colorData).
> 
> 
> 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.
> 
> NB. original cube data and the model-view-projection matrix
> vertexAttr=: >@{. glGetAttribLocation program;'vertex'
> assert. _1~: vertexAttr
> colorAttr=: >@{. glGetAttribLocation program;'color'
> assert. _1~: colorAttr
> mvpUni=: >@{. glGetUniformLocation program;'mvp'
> assert. _1~: mvpUni
> 
> NB. Second duplicate object as above
> vertexAttr1=: >@{. glGetAttribLocation program;'vertex'
> assert. _1~: vertexAttr1
> colorAttr1=: >@{. glGetAttribLocation program;'color'
> assert. _1~: colorAttr1
> 
> NB. Here is where my shape is defined. this provides the hooks
> NB. between J data and openGL
> NB. Here I increase the buffer vbo to 4 locations and reuse the
> NB. object vertexData and colorData that make the colorful cube
> glGenBuffers 2;vbo=: 4#_1
> glBindBuffer GL_ARRAY_BUFFER; 0{vbo
> glBufferData GL_ARRAY_BUFFER; (#vertexData); (symdat <'vertexData'); 
> GL_STATIC_DRAW
> glBindBuffer GL_ARRAY_BUFFER; 1{vbo
> glBufferData GL_ARRAY_BUFFER; (#colorData); (symdat <'colorData'); 
> GL_STATIC_DRAW
> glBindBuffer GL_ARRAY_BUFFER; 2{vbo
> glBufferData GL_ARRAY_BUFFER; (#vertexData); (symdat <'vertexData'); 
> GL_STATIC_DRAW
> glBindBuffer GL_ARRAY_BUFFER; 3{vbo
> glBufferData GL_ARRAY_BUFFER; (#colorData); (symdat <'colorData'); 
> GL_STATIC_DRAW
> glBindBuffer GL_ARRAY_BUFFER; 0
> 
> sprog=: program
> 
> glClearColor 0; 0; 1; 0
> )
> 
> 
> a_g_paint=: 3 : 0
> if. 0=sprog do. return. end.
> 
> wh=. gl_qwh''
> glClearColor 0 0 0 0
> 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
> NB. I created a new model: mvp1 so it will translate the cube
> NB. so there will be 2 cubes side by side
> 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.6 0 _8) mp 
> glu_LookAt EYE,LR,UD,IO,UP
> mvp1=: (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 _1.2 0 _8) mp 
> glu_LookAt EYE,LR,UD,IO,UP
> 
> NB. projection
> mvp=: mvp mp gl_Perspective 30, (%/wh),1 10
> mvp1=: mvp1 mp gl_Perspective 30, (%/wh),1 10
> 
> NB. note GL_FALSE, no transpose
> NB. Draw Object 1
> glUniformMatrix4fv mvpUni; 1; GL_FALSE; mvp
> 
> glBindBuffer GL_ARRAY_BUFFER; 0{vbo
> glEnableVertexAttribArray vertexAttr
> glVertexAttribPointer vertexAttr; 3; GL_FLOAT; 0; 0; 0
> 
> glBindBuffer GL_ARRAY_BUFFER; 1{vbo
> glEnableVertexAttribArray colorAttr
> glVertexAttribPointer colorAttr; 3; GL_FLOAT; 0; 0; 0
> 
> glDrawArrays GL_TRIANGLES; 0; 36
> 
> NB. Draw object 2
> glUniformMatrix4fv mvpUni; 1; GL_FALSE; mvp1
> 
> glBindBuffer GL_ARRAY_BUFFER; 2{vbo
> glEnableVertexAttribArray vertexAttr1
> glVertexAttribPointer vertexAttr1; 3; GL_FLOAT; 0; 0; 0
> 
> glBindBuffer GL_ARRAY_BUFFER; 3{vbo
> glEnableVertexAttribArray colorAttr1
> glVertexAttribPointer colorAttr1; 3; GL_FLOAT; 0; 0; 0
> 
> glDrawArrays GL_TRIANGLES; 0; 36
> 
> NB. Objects drawn perform glDisableVertexAttribArray
> NB. what ever that is for
> glBindBuffer GL_ARRAY_BUFFER; 0
> glDisableVertexAttribArray colorAttr
> glDisableVertexAttribArray vertexAttr
> glDisableVertexAttribArray colorAttr1
> glDisableVertexAttribArray vertexAttr1
> 
> glDisable GL_DEPTH_TEST
> glDisable GL_CULL_FACE
> 
> glUseProgram 0
> 
> gl_clear ''
> gl_rgb 0 255 0
> gl_textcolor ''
> gl_textxy 10 30
> gl_text 'keys: x y z a s l r F10'
> 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.
> )
> 
> 
> > On Feb 14, 2020, at 4:14 PM, Brian Schott <[email protected]> wrote:
> > 
> > Bill,
> > 
> > Thank you very much.
> > 
> > Mostly I want to get n turtles, not cubes, that are not rotating to time
> > but behave like "Logo" turtles and react to commands in the Terminal window
> > like Forward 3 and Right 90. So I want to start with 2 separate turtles and
> > I guess I am all wrong in my idea that the long mvp commands are moving the
> > eye, but moving the cube/turtle. So my next experiment will be to copy and
> > edit the code beginning at the following line of code.
> > 
> > glGenBuffers 2;vbo=: 2#_1
> > 
> > So for example to make another cube/turtle I'm thinking that that line
> > could be changed so that _2 replaces the _1. Does that make any sense?
> > 
> > *****************below I react to your code revisions***********************
> > I had to change your f8 and f9 to f6 and f7 because on my Mac f8 is
> > clipboard and f9 is run project.
> > Now, at least when I put an smoutput into a_f6_fkey and a_f7_fkey I see
> > they are being executed, but I do not see the cube, (and this happens
> > without changing the focus to the Terminal window, which is needed below).
> > After intially loading and running the shader.ijs script in the project
> > window, I get a blank "a" window and each time I press F10 I get a new
> > fresh, blank "a" window. But if I click on the Terminal window and then
> > click on the "a" window and THEN press F10, I get the moving cube.
> > Subsequent F6 and F7 presses produce the smoutput results in the Terminal
> > window but BLANK the active "a" window.
> > *****************above I react to your code revisions***********************
> > 
> > But the previous paragraph is mostly a distraction except that you code
> > revision shows me a little about how the "handle" is important for finding
> > the parent from the child and vice versa. And about repainting.
> > 
> > I am mostly interested in how commands in the Terminal window can be sent
> > to the Cube in the "a" window. Any pointers?
> > 
> > 
> > On Fri, Feb 14, 2020 at 1:58 AM bill lam <[email protected]> wrote:
> > 
> >> I tried to incoporate your change into shader.ijs
> >> with f8/f9 to change value for gl_translate.
> >> The changes lines are marked by NB. <<<<<
> >> pressing f8/f9 can trigger repaint and the matrix
> >> display also updated, but I can't see the cube at all.
> >> Pressing F10 to start original code, the cube came back.
> >> I did not pursue further but hope this is enough to
> >> answer your question about how to repaint.
> >> 
> >> 
> > ----------------------------------------------------------------------
> > 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