コード例 #1
0
        static void btnTest_click(HtmlDomEventArgs e)
        {
            // set the scene size
            float WIDTH  = 400;
            float HEIGHT = 300;

            // set some camera attributes
            float VIEW_ANGLE = 45;
            float ASPECT     = WIDTH / HEIGHT;
            float NEAR       = 0.1f;
            float FAR        = 10000;

            // get the DOM element to attach to
            // - assume we've got jQuery to hand
            jQuery container = J("#container");

            // create a WebGL renderer, camera
            // and a scene
            WebGLRenderer renderer = new WebGLRenderer();
            Camera        camera   = new PerspectiveCamera(VIEW_ANGLE, ASPECT, NEAR, FAR);
            Scene         scene    = new Scene();

            // the camera starts at 0,0,0 so pull it back
            camera.position.z = 300;

            // start the renderer
            renderer.setSize(WIDTH, HEIGHT);

            // attach the render-supplied DOM element
            container.append(renderer.domElement);

            // create the sphere's material
            MeshLambertMaterial sphereMaterial = new MeshLambertMaterial(new MeshLambertMaterialOptions {
                color = 0xcc0000
            });

            // set up the sphere vars
            int radius = 50, segments = 16, rings = 16;

            // create a new mesh with sphere geometry -
            // we will cover the sphereMaterial next!
            Mesh sphere = new Mesh(new SphereGeometry(radius, segments, rings), sphereMaterial);

            // add the sphere to the scene
            scene.add(sphere);

            // create a point light
            var pointLight = new PointLight(0xFFFFFF);

            // set its position
            pointLight.position.x = 10;
            pointLight.position.y = 50;
            pointLight.position.z = 130;

            // add to the scene
            scene.add(pointLight);

            // draw!
            renderer.render(scene, camera);
        }
コード例 #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="control"></param>
        public virtual void Load(Control control)
        {
            Debug.Assert(null != control);

            this.renderer = new WebGLRenderer(control);

            stopWatch.Start();
        }
コード例 #3
0
ファイル: App.cs プロジェクト: softearth/Demos-1
        private static void Init()
        {
            container = document.createElement("div");
            document.body.appendChild(container);

            //
            var height = GetAvailableHeight();
            var width  = window.innerWidth;

            camera = new PerspectiveCamera(50, width / height, 1, 10000)
            {
                position = { y = 300 }
            };
            cameraTarget = new Vector3(0, 150, 0);

            scene = new Scene
            {
                background = new Color(0xf0f0f0)
            };

            //
            var light = new DirectionalLight(0xefefff, 1.5);

            light.position.set(1, 1, 1).normalize();
            scene.add(light);

            light = new DirectionalLight(0xffefef, 1.5);
            light.position.set(-1, -1, -1).normalize();
            scene.add(light);

            var loader = new JSONLoader();

            loader.load("https://raw.githubusercontent.com/Retyped/Demos/master/ThreeJsDemo/ThreeJsDemo/dist/models/horse.js", (geometry, materials) =>
            {
                var mesh = new Mesh(geometry, new MeshLambertMaterial(new MeshLambertMaterialParameters
                {
                    vertexColors = FaceColors,
                    morphTargets = true
                }));

                mesh.scale.set(1.5, 1.5, 1.5);
                scene.add(mesh);

                mixer = new AnimationMixer(mesh);

                var clip = AnimationClip.CreateFromMorphTargetSequence("gallop", geometry.morphTargets, 30, false);
                mixer.clipAction(clip).setDuration(1).play();
            });

            //
            renderer = new WebGLRenderer();
            renderer.setPixelRatio(window.devicePixelRatio);
            renderer.setSize(width, height);
            container.appendChild(renderer.domElement);

            //
            window.addEventListener("resize", (dom.Event e) => OnWindowResize(), false);
        }
コード例 #4
0
 public EffectComposer(WebGLRenderer renderer)
 {
 }
コード例 #5
0
 public extern BlendModeManager(WebGLRenderer renderer);
コード例 #6
0
 /// <param name="renderer">The renderer this manager works for.</param>
 public extern WebGLManager(WebGLRenderer renderer);
コード例 #7
0
 /// <summary>
 /// Grabs a shader from the current renderer.
 /// </summary>
 /// <param name="renderer">The renderer to retrieve the shader from.</param>
 public extern void GetShader(WebGLRenderer renderer);
コード例 #8
0
 /// <summary>
 /// Applies the filter.
 /// </summary>
 /// <param name="renderer">The renderer to retrieve the filter from.</param>
 /// <param name="clear">Whether or not we want to clear the outputTarget.</param>
 public extern void ApplyFilter(WebGLRenderer renderer, RenderTarget input,
                                RenderTarget output, bool clear = false);
コード例 #9
0
 public extern ObjectRenderer(WebGLRenderer renderer);
コード例 #10
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="renderer"></param>
        /// <param name="code"></param>
        /// <param name="material"></param>
        /// <param name="parameters"></param>
        public WebGlProgram(WebGLRenderer renderer, string code, Material material, Hashtable parameters)
        {
            Debug.Assert(null != material);
            Debug.Assert(null != material.Defines);
            Debug.Assert(null != material["__webglShader"]);
            Debug.Assert(null != ((WebGlShader)material["__webglShader"]).Uniforms);
            Debug.Assert(null != ((WebGlShader)material["__webglShader"]).VertexShader);
            Debug.Assert(null != ((WebGlShader)material["__webglShader"]).FragmentShader);

            var _this = renderer;

            var defines  = material.Defines;
            var uniforms = ((WebGlShader)material["__webglShader"]).Uniforms;

            var vertexShader   = ((WebGlShader)material["__webglShader"]).VertexShader;
            var fragmentShader = ((WebGlShader)material["__webglShader"]).FragmentShader;

            string index0AttributeName = null;

            if (null != material as ShaderMaterial)
            {
                index0AttributeName = ((ShaderMaterial)material).Index0AttributeName;
                if (index0AttributeName == null && (bool)parameters["morphTargets"] == true)
                {
                    // programs with morphTargets displace position out of attribute 0
                    index0AttributeName = "position";
                }
            }

            var shadowMapTypeDefine = "SHADOWMAP_TYPE_BASIC";

            if ((int)parameters["shadowMapType"] == Three.PCFShadowMap)
            {
                shadowMapTypeDefine = "SHADOWMAP_TYPE_PCF";
            }
            else if ((int)parameters["shadowMapType"] == Three.PCFSoftShadowMap)
            {
                shadowMapTypeDefine = "SHADOWMAP_TYPE_PCF_SOFT";
            }

            // Trace.TraceInformation( "building new program " );

            var customDefines = GenerateDefines(defines);

            var program = GL.CreateProgram();

            var prefix_vertex   = string.Empty;
            var prefix_fragment = string.Empty;

            if (material is RawShaderMaterial)
            {
                prefix_vertex   = string.Empty;
                prefix_fragment = string.Empty;
            }
            else
            {
                #region Prefix Vertex
                var pv = new List <string>();

                pv.Add("#version 120");

                pv.Add("#ifdef GL_ES");
                pv.Add("precision " + parameters["precision"] + " float;");
                pv.Add("precision " + parameters["precision"] + " int;");
                pv.Add("#endif");

                pv.Add(customDefines);

                pv.Add(parameters["supportsVertexTextures"] != null ? "#define VERTEX_TEXTURES" : "");

                pv.Add(_this.gammaInput ? "#define GAMMA_INPUT" : "");
                pv.Add(_this.gammaOutput ? "#define GAMMA_OUTPUT" : "");

                pv.Add("#define MAX_DIR_LIGHTS " + parameters["maxDirLights"]);
                pv.Add("#define MAX_POINT_LIGHTS " + parameters["maxPointLights"]);
                pv.Add("#define MAX_SPOT_LIGHTS " + parameters["maxSpotLights"]);
                pv.Add("#define MAX_HEMI_LIGHTS " + parameters["maxHemiLights"]);

                pv.Add("#define MAX_SHADOWS " + parameters["maxShadows"]);

                pv.Add("#define MAX_BONES " + parameters["maxBones"]);                 // zou 58 moeten zijn

                pv.Add(parameters["map"] != null && (bool)parameters["map"]  ? "#define USE_MAP" : "");
                pv.Add(parameters["envMap"] != null && (bool)parameters["envMap"] ? "#define USE_ENVMAP" : "");
                pv.Add(parameters["lightMap"] != null && (bool)parameters["lightMap"] ? "#define USE_LIGHTMAP" : "");
                pv.Add(parameters["bumpMap"] != null && (bool)parameters["bumpMap"] ? "#define USE_BUMPMAP" : "");
                pv.Add(parameters["normalMap"] != null && (bool)parameters["normalMap"] ? "#define USE_NORMALMAP" : "");
                pv.Add(parameters["specularMap"] != null && (bool)parameters["specularMap"] ? "#define USE_SPECULARMAP" : "");
                pv.Add(parameters["alphaMap"] != null && (bool)parameters["alphaMap"] ? "#define USE_ALPHAMAP" : "");
                pv.Add(parameters["vertexColors"] != null && (int)parameters["vertexColors"] > 0 ? "#define USE_COLOR" : "");

                pv.Add(parameters["skinning"] != null && (bool)parameters["skinning"] ? "#define USE_SKINNING" : "");
                pv.Add(parameters["useVertexTexture"] != null && (bool)parameters["useVertexTexture"] ? "#define BONE_TEXTURE" : "");

                pv.Add(parameters["morphTargets"] != null && (bool)parameters["morphTargets"] ? "#define USE_MORPHTARGETS" : "");
                pv.Add(parameters["morphNormals"] != null && (bool)parameters["morphNormals"] ? "#define USE_MORPHNORMALS" : "");
                pv.Add(parameters["wrapAround"] != null && (bool)parameters["wrapAround"] ? "#define WRAP_AROUND" : "");
                pv.Add(parameters["doubleSided"] != null && (bool)parameters["doubleSided"] ? "#define DOUBLE_SIDED" : "");
                pv.Add(parameters["flipSided"] != null && (bool)parameters["flipSided"] ? "#define FLIP_SIDED" : "");

                pv.Add(parameters["shadowMapEnabled"] != null && (bool)parameters["shadowMapEnabled"] ? "#define USE_SHADOWMAP" : "");
                pv.Add(parameters["shadowMapEnabled"] != null && (bool)parameters["shadowMapEnabled"] ? "#define " + shadowMapTypeDefine : "");
                pv.Add(parameters["shadowMapDebug"] != null && (bool)parameters["shadowMapDebug"] ? "#define SHADOWMAP_DEBUG" : "");
                pv.Add(parameters["shadowMapCascade"] != null && (bool)parameters["shadowMapCascade"] ? "#define SHADOWMAP_CASCADE" : "");

                pv.Add(parameters["sizeAttenuation"] != null && (bool)parameters["sizeAttenuation"] ? "#define USE_SIZEATTENUATION" : "");

                pv.Add(parameters["logarithmicDepthBuffer"] != null && (bool)parameters["logarithmicDepthBuffer"] ? "#define USE_LOGDEPTHBUF" : "");
                //		pv.Add(//_this._glExtensionFragDepth ? "#define USE_LOGDEPTHBUF_EXT" : "");

                pv.Add("uniform mat4 modelMatrix;");
                pv.Add("uniform mat4 modelViewMatrix;");
                pv.Add("uniform mat4 projectionMatrix;");
                pv.Add("uniform mat4 viewMatrix;");
                pv.Add("uniform mat3 normalMatrix;");
                pv.Add("uniform vec3 cameraPosition;");

                pv.Add("attribute vec3 position;");
                pv.Add("attribute vec3 normal;");
                pv.Add("attribute vec2 uv;");
                pv.Add("attribute vec2 uv2;");

                pv.Add("#ifdef USE_COLOR");

                pv.Add("    attribute vec3 color;");

                pv.Add("#endif");

                pv.Add("#ifdef USE_MORPHTARGETS");

                pv.Add("     attribute vec3 morphTarget0;");
                pv.Add("     attribute vec3 morphTarget1;");
                pv.Add("     attribute vec3 morphTarget2;");
                pv.Add("     attribute vec3 morphTarget3;");

                pv.Add("    #ifdef USE_MORPHNORMALS");

                pv.Add("        attribute vec3 morphNormal0;");
                pv.Add("        attribute vec3 morphNormal1;");
                pv.Add("        attribute vec3 morphNormal2;");
                pv.Add("        attribute vec3 morphNormal3;");

                pv.Add("    #else");

                pv.Add("          attribute vec3 morphTarget4;");
                pv.Add("          attribute vec3 morphTarget5;");
                pv.Add("          attribute vec3 morphTarget6;");
                pv.Add("          attribute vec3 morphTarget7;");

                pv.Add("    #endif");

                pv.Add("#endif");

                pv.Add("#ifdef USE_SKINNING");

                pv.Add("    attribute vec4 skinIndex;");
                pv.Add("    attribute vec4 skinWeight;");

                pv.Add("#endif");

                pv.Add("");

                prefix_vertex = string.Join("\n", pv);

                #endregion

                #region Prefix Fragment

                var pf = new List <string>();

                pf.Add("#version 120");

                pf.Add("#ifdef GL_ES");
                pf.Add("precision " + parameters["precision"] + " float;");
                pf.Add("precision " + parameters["precision"] + " int;");
                pf.Add("#endif");

                pf.Add((parameters["bumpMap"] != null || parameters["normalMap"] != null) ? "#extension GL_OES_standard_derivatives : enable" : "");

                pf.Add(customDefines);

                pf.Add("#define MAX_DIR_LIGHTS " + parameters["maxDirLights"]);
                pf.Add("#define MAX_POINT_LIGHTS " + parameters["maxPointLights"]);
                pf.Add("#define MAX_SPOT_LIGHTS " + parameters["maxSpotLights"]);
                pf.Add("#define MAX_HEMI_LIGHTS " + parameters["maxHemiLights"]);

                pf.Add("#define MAX_SHADOWS " + parameters["maxShadows"]);

                pf.Add(parameters["alphaTest"] != null && ((float)parameters["alphaTest"] > 0) ? "#define ALPHATEST " + ((float)parameters["alphaTest"]).ToString(CultureInfo.InvariantCulture) : ""); // TEVEEL

                pf.Add(_this.gammaInput ? "#define GAMMA_INPUT" : "");
                pf.Add(_this.gammaOutput ? "#define GAMMA_OUTPUT" : "");

                pf.Add((parameters["useFog"] != null && (bool)parameters["useFog"] && parameters["fog"] != null) ? "#define USE_FOG" : "");     // TEVEEL
                pf.Add((parameters["useFog"] != null && (bool)parameters["useFog"] && parameters["fogExp"] != null) ? "#define FOG_EXP2" : ""); // TEVEEL

                pf.Add(parameters["map"] != null && (bool)parameters["map"] ? "#define USE_MAP" : "");
                pf.Add(parameters["envMap"] != null && (bool)parameters["envMap"] ? "#define USE_ENVMAP" : "");
                pf.Add(parameters["lightMap"] != null && (bool)parameters["lightMap"] ? "#define USE_LIGHTMAP" : "");
                pf.Add(parameters["bumpMap"] != null && (bool)parameters["bumpMap"] ? "#define USE_BUMPMAP" : "");
                pf.Add(parameters["normalMap"] != null && (bool)parameters["normalMap"] ? "#define USE_NORMALMAP" : "");
                pf.Add(parameters["specularMap"] != null && (bool)parameters["specularMap"] ? "#define USE_SPECULARMAP" : "");
                pf.Add(parameters["alphaMap"] != null && (bool)parameters["alphaMap"] ? "#define USE_ALPHAMAP" : "");
                pf.Add(parameters["vertexColors"] != null && (int)parameters["vertexColors"] > 0 ? "#define USE_COLOR" : "");

                pf.Add(parameters["metal"] != null && (bool)parameters["metal"] ? "#define METAL" : "");
                pf.Add(parameters["wrapAround"] != null && (bool)parameters["wrapAround"] ? "#define WRAP_AROUND" : "");
                pf.Add(parameters["doubleSided"] != null && (bool)parameters["doubleSided"] ? "#define DOUBLE_SIDED" : "");
                pf.Add(parameters["flipSided"] != null && (bool)parameters["flipSided"] ? "#define FLIP_SIDED" : "");

                pf.Add(parameters["shadowMapEnabled"] != null && (bool)parameters["shadowMapEnabled"] ? "#define USE_SHADOWMAP" : "");
                pf.Add(parameters["shadowMapEnabled"] != null && (bool)parameters["shadowMapEnabled"] ? "#define " + shadowMapTypeDefine : "");
                pf.Add(parameters["shadowMapDebug"] != null && (bool)parameters["shadowMapDebug"] ? "#define SHADOWMAP_DEBUG" : "");
                pf.Add(parameters["shadowMapCascade"] != null && (bool)parameters["shadowMapCascade"] ? "#define SHADOWMAP_CASCADE" : "");

                pf.Add(parameters["logarithmicDepthBuffer"] != null && (bool)parameters["logarithmicDepthBuffer"] ? "#define USE_LOGDEPTHBUF" : "");

                //pf.Add(//_this._glExtensionFragDepth ? "#define USE_LOGDEPTHBUF_EXT" : "");

                pf.Add("uniform mat4 viewMatrix;");
                pf.Add("uniform vec3 cameraPosition;");
                pf.Add("");

                prefix_fragment = string.Join("\n", pf);

                #endregion
            }

            try
            {
                var glVertexShader   = WebGlShader.BuildShader(ShaderType.VertexShader, prefix_vertex + vertexShader);
                var glFragmentShader = WebGlShader.BuildShader(ShaderType.FragmentShader, prefix_fragment + fragmentShader);

                GL.AttachShader(program, glVertexShader);
                GL.AttachShader(program, glFragmentShader);

                if (index0AttributeName != null)
                {
                    // Force a particular attribute to index 0.
                    // because potentially expensive emulation is done by browser if attribute 0 is disabled.
                    // And, color, for example is often automatically bound to index 0 so disabling it
                    GL.BindAttribLocation(program, 0, index0AttributeName);
                }

                GL.LinkProgram(program);

                var linkStatus = -1;
                GL.GetProgram(program, ProgramParameter.LinkStatus, out linkStatus);
                if (linkStatus == 0)
                {
                    int validateStatus;
                    GL.GetProgram(program, ProgramParameter.ValidateStatus, out validateStatus);

                    Trace.TraceError("THREE.WebGLProgram: Could not initialise shader.");
                    Trace.TraceError("gl.VALIDATE_STATUS {0}", validateStatus);
                    Trace.TraceError("gl.getError() {0}", GL.GetError());
                }

                if (GL.GetProgramInfoLog(program) != string.Empty)
                {
                    Trace.TraceError("THREE.WebGLProgram: gl.getProgramInfoLog() {0}", GL.GetProgramInfoLog(program));

                    throw new ApplicationException("Program failed to link - see Output console. When do the .glsl files loaded???");
                }
                else
                {
                    Console.WriteLine("\nProgram {0} linked OK", program);
                }
                // clean up

                GL.DeleteShader(glVertexShader);
                GL.DeleteShader(glFragmentShader);

                // cache uniform locations

                var identifiers = new List <string> {
                    "viewMatrix", "modelViewMatrix", "projectionMatrix", "normalMatrix", "modelMatrix", "cameraPosition",
                    "morphTargetInfluences", "bindMatrix", "bindMatrixInverse"
                };

                if (parameters["useVertexTexture"] != null)
                {
                    identifiers.Add("boneTexture");
                    identifiers.Add("boneTextureWidth");
                    identifiers.Add("boneTextureHeight");
                }
                else
                {
                    identifiers.Add("boneGlobalMatrices");
                }

                if (parameters["logarithmicDepthBuffer"] != null)
                {
                    identifiers.Add("logDepthBufFC");
                }

                foreach (var u in uniforms)
                {
                    identifiers.Add(u.Key);
                }

                this.Uniforms = CacheUniformLocations(program, identifiers);

#if DEBUG
                Console.WriteLine("\nUniform Locations for Program {0}", program);
                foreach (DictionaryEntry entry in this.Uniforms)
                {
                    if (null != entry.Value)
                    {
                        Console.WriteLine("{1} \t {0}", entry.Key, entry.Value);
                    }
                }
#endif

                // cache attributesLocation locations

                identifiers = new List <string> {
                    "position", "normal", "uv", "uv2", "tangent", "color",
                    "skinIndex", "skinWeight", "lineDistance"
                };

                for (var i = 0; i < (int)parameters["maxMorphTargets"]; i++)
                {
                    identifiers.Add("morphTarget" + i);
                }

                for (var i = 0; i < (int)parameters["maxMorphNormals"]; i++)
                {
                    identifiers.Add("morphNormal" + i);
                }

                if (material is IAttributes)
                {
                    var attributesMaterial = material as IAttributes;
                    foreach (var entry in attributesMaterial.Attributes)
                    {
                        identifiers.Add(entry.Key as string);
                    }
                }

                this.Attributes = CacheAttributeLocations(program, identifiers);

                //this.AttributesKeys = Object.keys(this.Attributes);
                this.AttributesKeys = new List <string>();
                foreach (DictionaryEntry entry in this.Attributes)
                {
                    this.AttributesKeys.Add((string)entry.Key);
                }


#if DEBUG
                Console.WriteLine("\nAttribute Locations for Program {0}", program);
                foreach (DictionaryEntry entry in this.Attributes)
                {
                    if (null != entry.Value)
                    {
                        Console.WriteLine("{1} \t {0}", entry.Key, entry.Value);
                    }
                }
#endif

                //

                this.Id             = ProgramIdCount++;
                this.Code           = code;
                this.UsedTimes      = 1;
                this.Program        = program;
                this.VertexShader   = glVertexShader;
                this.FragmentShader = glFragmentShader;
            }
            catch (Exception e)
            {
                Trace.TraceError(e.Message);
            }
        }
コード例 #11
0
 public EffectComposer(WebGLRenderer renderer)
 {
 }
コード例 #12
0
ファイル: ShadowMapPlugin.cs プロジェクト: vijirams/three.cs
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="renderer"></param>
 /// <param name="lights"></param>
 /// <param name="webglObjects"></param>
 /// <param name="webglObjectsImmediate"></param>
 public ShadowMapPlugin(WebGLRenderer renderer, LightCollection lights, Dictionary <int, List <WebGlObject> > webglObjects, List <WebGlObject> webglObjectsImmediate)
 {
     this._renderer = renderer;
 }
コード例 #13
0
 public extern StencilManager(WebGLRenderer renderer);
コード例 #14
0
 public extern MaskManager(WebGLRenderer renderer);
コード例 #15
0
 public EffectComposer(WebGLRenderer renderer, WebGLRenderTarget renderTarget)
 {
     // TODO: Complete member initialization
     this.renderer     = renderer;
     this.renderTarget = renderTarget;
 }
コード例 #16
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="renderer"></param>
 /// <param name="flares"></param>
 public LensFlarePlugin(WebGLRenderer renderer, IList <Object3D> flares)
 {
     this._renderer = renderer;
     this._flares   = flares;
 }
コード例 #17
0
 public extern FilterManager(WebGLRenderer renderer);
コード例 #18
0
 /// <summary>
 /// Applies the filter.
 /// </summary>
 /// <param name="renderer">The renderer to retrieve the filter from.</param>
 public extern void ApplyFilter(WebGLRenderer renderer, RenderTarget input,
                                RenderTarget output);
コード例 #19
0
ファイル: ShaderManager.cs プロジェクト: bjindal4/Bridge.Pixi
 public extern ShaderManager(WebGLRenderer renderer);
コード例 #20
0
ファイル: THREE.cs プロジェクト: exaphaser/JSC-Cross-Compiler
 public EffectComposer(WebGLRenderer renderer, WebGLRenderTarget renderTarget)
 {
     // TODO: Complete member initialization
     this.renderer = renderer;
     this.renderTarget = renderTarget;
 }
コード例 #21
0
 /// <param name="renderer">The renderer this manager works for.</param>
 public extern StencilMaskStack(WebGLRenderer renderer);
コード例 #22
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="renderer"></param>
 /// <param name="sprites"></param>
 public SpritePlugin(WebGLRenderer renderer, IList <Object3D> sprites)
 {
     this._renderer = renderer;
     this._sprites  = sprites;
 }