[X3D-Public] FreeX3D Android updated.
Michalis Kamburelis
michalis.kambi at gmail.com
Mon Aug 19 06:15:14 PDT 2013
John Alexander Stewart wrote:
> See the "Prog Shaders" tab at http://freex3d.org
I checked the models on
http://freewrl.sourceforge.net/FreeX3D/Component_ProgrammableShaders.html with
view3dscene. Some notes about portability of these files follow. In
short, only a few cosmetic fixes are necessary (and they are generally
needed to make the models conform to specification, I think) an then
view3dscene can handle the linked 4 models using ComposedShader too :)
If you're interested in view3dscene shader support, it's documented on
http://castle-engine.sourceforge.net/x3d_implementation_shaders.php .
And a different beast, which allows to write GLSL in more comfortable
manner, is on http://castle-engine.sourceforge.net/compositing_shaders.php .
Notes about models
http://freewrl.sourceforge.net/FreeX3D/Component_ProgrammableShaders.html :
1. You're using backslash + newline inside VRML/X3D strings, which is
not correct as far as I know and makes view3dscene spit warnings
view3dscene: X3D warning: Invalid sequence in a string: "\
". Backslash must be followed by another backslash or double quote, for
SFString and MFString (in X3D classic (VRML) encoding) and for MFString
(in X3D XML encoding).
As far as I know, view3dscene is right here. For VRML, see
http://www.web3d.org/x3d/specifications/vrml/ISO-IEC-14772-VRML97/part1/fieldsRef.html#SFString
:
Any characters (including linefeeds and '#') may appear within the
quotes. A double quote character within the string is preceded with a
backslash. A backslash character within the string is also preceded with
a backslash forming two backslashes.
So, if you want to have a newline inside the string, just write a
newline, without any backslash.
2. I notice you define a magic symbol HEADLIGHT_LIGHT. Hm, that's a good
idea, I may adopt it for view3dscene too (where HEADLIGHT_LIGHT would be
always 0 --- in contrast to FreeWRL, in view3dscene headlight is always
the first, not the last). It may be a good idea to add it to spec, as
recommended behavior for GLSL shaders?
After fixing this (removing backslashes and replacing HEADLIGHT_LIGHT
with 0) view3dscene can render just fine teapot-Toon.wrl and
TwoCylinders.wrl .
3. sobel-ComposedShader.wrl uses fw_ variables, not gl_. After fixing
(removing backslashes and replacing fw_ with gl_) it works fine under
view3dscene as well :)
4. flutter2-ComposedShader.x3d works fine under view3dscene as well, but
there are warnings, and I think they are correct:
view3dscene: VRML/X3D warning: Error when reading MFString field
"url" value, probably missing double quotes (treating as a single
string): VRML/X3D parse error at position 4: Expected string, got "data"
(2x times)
view3dscene: VRML/X3D warning: SFRotation field
(Viewpoint.orientation) specifies rotation around zero vector
(2x times)
So these bits of flutter2-ComposedShader.x3d should be fixed to make it
really 100% correct.
So, after a few cosmetic fixes (which I think are generally good to make
your models conforming to spec) view3dscene happily handles 4 test
models using ComposedShader node :)
As for 5th test model, flutter2-ProgramShader.x3d: view3dscene does not
(and will not, probably) support using ProgramShader for GLSL. Like you
write on
http://freewrl.sourceforge.net/FreeX3D/Component_ProgrammableShaders.html ,
ProgramShader just doesn't fit GLSL. We require to use ComposedShader to
use GLSL, nobody complained so far :)
5. Nitpicking: You may consider declaring your models as X3D, not VRML,
and with .x3dv extension (for classic encoding) :) Programmable shaders
are part of X3D, not VRML 2 (even if both view3dscene and FreeWRL and
possibly others allow to use these nodes in VRML 2 too).
Regards,
Michalis
More information about the X3D-Public
mailing list