Thread: [PyOpenGL-Users] Shading with Interpolated Normals
Brought to you by:
mcfletch
From: Chris F. <cfinley@u.washington.edu> - 2008-10-27 19:31:22
|
Greetings, After Googling and searching the archives, I was unable to find an example of fragment shading using interpolated vertex normals, can someone point me in the right direction or send some sample code? How do you create the fragment shading function, is there a GLSL Python extension? How do you read the "varying" attribute (pixel normal) that should be passed into the function? You help and time are greatly appreciated, Chris This was the closest article that I could find: http://www.lighthouse3d.com/opengl/glsl/index.php?toon2 |
From: Mike C. F. <mcf...@vr...> - 2008-10-30 02:04:40
|
Chris Finley wrote: > Greetings, > > After Googling and searching the archives, I was unable to find an > example of fragment shading using interpolated vertex normals, can > someone point me in the right direction or send some sample code? > Example of a fragment shader using GLSL: http://bazaar.launchpad.net/~mcfletch/pyopengl-demo/trunk/annotate/2?file_id=shader_test.py-20080923005140-67c17kywpwxa2usj-25 > How do you create the fragment shading function, is there a GLSL Python > extension? > PyOpenGL exposes all of the mainline shader-related extensions. I think we've got "friendly" (Pythonic) wrappers for the most commonly used shader APIs. > How do you read the "varying" attribute (pixel normal) that should be > passed into the function? > My understanding is that you query for a "uniform" variable (a simple integer) based on the name you use in your program, then use the glUniform* set of functions with that argument to pass the values into your shader program. You'll likely need to have the shader in "use" at the time (glUseProgram*). HTH, Mike > This was the closest article that I could find: > http://www.lighthouse3d.com/opengl/glsl/index.php?toon2 > -- ________________________________________________ Mike C. Fletcher Designer, VR Plumber, Coder http://www.vrplumber.com http://blog.vrplumber.com |
From: Mike C. F. <mcf...@vr...> - 2008-10-30 02:50:08
|
Mike C. Fletcher wrote: > Chris Finley wrote: > ... >> How do you read the "varying" attribute (pixel normal) that should be >> passed into the function? >> >> > My understanding is that you query for a "uniform" variable (a simple > integer) based on the name you use in your program, The function to do this, unfortunately, is currently not wrapped elegantly. You'll have to append a "\000" to your program name to avoid memory-access failures when you use it... result = glGetUniformLocationARB( self.__shaderProgramID, variableName+'\000' ) because the array-type conversion will not automatically add the null-byte to signal the end of the variable name. I'll try to get that fixed soon. > then use the > glUniform* set of functions with that argument to pass the values into > your shader program. You'll likely need to have the shader in "use" at > the time (glUseProgram*). > I've just confirmed this. You *must* have glUseProgram* called when you attempt to call the uniform-related functions, if you don't you'll get core-dumps (at least on Linux, with an Nvidia card). Note that (e.g.) calls to glutMainloop() reset the glUseProgram, so you'll likely want to "use" the program close to where you do your uniform calls. HTH, Mike -- ________________________________________________ Mike C. Fletcher Designer, VR Plumber, Coder http://www.vrplumber.com http://blog.vrplumber.com |