Esempio n. 1
0
        public void EnableRendering(Vector3 origin)
        {
            Vector3[] lineColors;
            int[]     lineIndicies;

            bboxShader = ShaderCompiler.BuildDefaultShader();
            bboxShader.Link();

            lineColors   = null;
            lineIndicies = null;

            lines(LineColor, 12, out lineColors, out lineIndicies);

            _geo                 = new Box.BoxGeometry();
            _pack                = new PackedGeometry();
            _pack.Coloring       = true;
            _pack._indices       = _geo.Indices;
            _pack._coords        = _geo.Vertices;
            _pack.color          = X3DTypeConverters.Vec3ToFloatArray(lineColors);
            _pack._colorIndicies = lineIndicies;
            _pack.restartIndex   = -1;
            _pack.Interleave();
            _handle = _pack.CreateHandle();

            renderingEnabled = _handle.HasGeometry;

            InitBoundaryPoints(origin);
        }
Esempio n. 2
0
        public override void CollectGeometry(
            RenderingContext rc,
            out GeometryHandle handle,
            out BoundingBox bbox,
            out bool Coloring,
            out bool Texturing)
        {
            handle    = GeometryHandle.Zero;
            bbox      = BoundingBox.Zero;
            Texturing = true;
            Coloring  = true;

            parentShape = GetParent <Shape>();


            _pack          = new PackedGeometry();
            _pack._indices = _boxGeometry.Indices;
            _pack._coords  = _boxGeometry.Vertices;
            //_pack._colorIndicies = _boxGeometry.Colors;
            _pack._texCoords   = _boxGeometry.Texcoords;
            _pack.restartIndex = -1;

            _pack.Interleave();

            // BUFFER GEOMETRY
            handle = _pack.CreateHandle();
            //handle = Buffering.BufferShaderGeometry(_pack);

            //this._boxGeometry.Load(parentShape);
        }
        public override void CollectGeometry(
            RenderingContext rc,
            out GeometryHandle handle,
            out BoundingBox bbox,
            out bool coloring,
            out bool texturing)
        {
            handle    = GeometryHandle.Zero;
            bbox      = BoundingBox.Zero;
            coloring  = false;
            texturing = false;

            parentShape = GetParent <Shape>();

            _pack = new PackedGeometry();
            _pack.restartIndex = -1;
            _pack._indices     = Faces;
            _pack._coords      = Verts;
            _pack.bbox         = BoundingBox.CalculateBoundingBox(Verts);

            _pack.Interleave();

            // BUFFER GEOMETRY
            handle = Buffering.BufferShaderGeometry(_pack);
        }
Esempio n. 4
0
        public static BoundingBox CalculateBoundingBox(PackedGeometry pack)
        {
            BoundingBox   result;
            List <Vertex> interleaved;

            interleaved = new List <Vertex>();
            interleaved.AddRange(pack.interleaved3);
            interleaved.AddRange(pack.interleaved4);

            result = CalculateBoundingBox(interleaved);

            return(result);
        }
        public override void CollectGeometry(
            RenderingContext rc,
            out GeometryHandle handle,
            out BoundingBox bbox,
            out bool Coloring,
            out bool Texturing)
        {
            handle    = GeometryHandle.Zero;
            bbox      = BoundingBox.Zero;
            Texturing = true;
            Coloring  = true;

            parentShape = GetParent <Shape>();


            _pack = new PackedGeometry();

            /*
             * glColor3d(1,0,0);
             * glVertex3f(-1,-1,-10);
             * glColor3d(1,1,0);
             * glVertex3f(1,-1,-10);
             * glColor3d(1,1,1);
             * glVertex3f(1,1,-10);
             * glColor3d(0,1,1);
             * glVertex3f(-1,1,-10);
             */
            _pack._indices = new int[] { 0, 1, 2, 3, -1 };
            _pack._coords  = new Vector3[]
            {
                new Vector3(-1, -1, 0),
                new Vector3(1, -1, 0),
                new Vector3(1, 1, 0),
                new Vector3(-1, 1, 0)
            };
            _pack._texCoords = new Vector2[]
            {
                new Vector2(0, 0),
                new Vector2(0, 1),
                new Vector2(1, 0),
                new Vector2(1, 1)
            };
            //_pack._colorIndicies = ;

            _pack.restartIndex = -1;

            _pack.Interleave();

            // BUFFER GEOMETRY
            handle = _pack.CreateHandle();
        }
Esempio n. 6
0
        public override void CollectGeometry(
            RenderingContext rc,
            out GeometryHandle handle,
            out BoundingBox bbox,
            out bool coloring,
            out bool texturing)
        {
            bbox = BoundingBox.Zero;

            // INTERLEAVE
            _pack = PackedGeometry.Pack(this);

            coloring  = _pack.Coloring;
            texturing = _pack.Texturing;
            bbox      = _pack.bbox;

            // BUFFER GEOMETRY
            handle = _pack.CreateHandle();
        }
Esempio n. 7
0
        public void InitBoundaryPoints(Vector3 origin)
        {
            int[]     colIndicies;
            Vector3[] verticies;
            Vector3[] pointColors;
            int[]     indicies;

            boundaries(origin, new Vector3(1, 0, 0), out pointColors, out colIndicies, out indicies, out verticies);

            var _pb = new PackedGeometry();

            _pb.Coloring       = true;
            _pb._indices       = indicies;
            _pb._coords        = verticies;
            _pb.color          = X3DTypeConverters.Vec3ToFloatArray(pointColors);
            _pb._colorIndicies = colIndicies;
            _pb.restartIndex   = -1;
            _pb.Interleave();
            _handlepb = _pb.CreateHandle();
        }
Esempio n. 8
0
        private IndexedFaceSet ifs2; // without bottom face

        public override void CollectGeometry(
            RenderingContext rc,
            out GeometryHandle handle,
            out BoundingBox bbox,
            out bool Coloring,
            out bool Texturing)
        {
            PackedGeometry        master;
            PackedGeometry        packed1;
            PackedGeometry        packed2;
            List <PackedGeometry> packs;

            handle    = GeometryHandle.Zero;
            bbox      = BoundingBox.Zero;
            Texturing = false;
            Coloring  = false;

            packs = new List <PackedGeometry>();

            if (this.bottom)
            {
                // Cone with bottom face

                packed1 = PackedGeometry.Pack(ifs1);
                packs.Add(packed1);
            }
            else
            {
                // Cone without bottom face

                packed2 = PackedGeometry.Pack(ifs2);
                packs.Add(packed2);
            }

            master = PackedGeometry.InterleavePacks(packs);

            bbox = BoundingBox.CalculateBoundingBox(master);

            // BUFFER GEOMETRY
            handle = Buffering.BufferShaderGeometry(master);
        }
        public override void Load()
        {
            base.Load();

            generateSkyAndGround = string.IsNullOrEmpty(frontUrl) || string.IsNullOrEmpty(backUrl) ||
                                   string.IsNullOrEmpty(topUrl) || string.IsNullOrEmpty(bottomUrl) ||
                                   string.IsNullOrEmpty(leftUrl) || string.IsNullOrEmpty(rightUrl);

            if (generateSkyAndGround)
            {
            }
            else
            {
                tex_cube = createCubeMapFromURIs();
            }


            _shape = new Shape();
            _shape.Load();
            _shape.IncludeDefaultShader(CubeMapBackgroundShader.vertexShaderSource,
                                        CubeMapBackgroundShader.fragmentShaderSource);


            //Buffering.Interleave(null, out _vbo_interleaved, out NumVerticies,
            //    out _vbo_interleaved4, out NumVerticies4,
            //    _cube.Indices, _cube.Indices, _cube.Vertices, _cube.Texcoords, _cube.Normals, null, null);

            PackedGeometry _pack = new PackedGeometry();

            _pack._indices  = _cube.Indices;
            _pack._coords   = _cube.Vertices;
            _pack.Texturing = true;
            //_pack._colorIndicies = _boxGeometry.Colors;
            _pack._texCoords   = _cube.Texcoords;
            _pack.restartIndex = -1;

            _pack.Interleave();

            // BUFFER GEOMETRY
            _handle = _pack.CreateHandle();
        }
Esempio n. 10
0
        public override void CollectGeometry(
            RenderingContext rc,
            out GeometryHandle handle,
            out BoundingBox bbox,
            out bool Coloring,
            out bool Texturing)
        {
            handle    = GeometryHandle.Zero;
            bbox      = BoundingBox.Zero;
            Texturing = true;
            Coloring  = true;

            parentShape = GetParent <Shape>();

            buildCylinderGeometry();

            _pack = PackedGeometry.Pack(ifs1);

            // BUFFER GEOMETRY
            handle = Buffering.BufferShaderGeometry(_pack);
        }
Esempio n. 11
0
        public override void Load()
        {
            base.Load();

            int            i;
            int            a, b;
            PackedGeometry _pack;

            cubeHandle  = GeometryHandle.Zero;
            innerHandle = GeometryHandle.Zero;
            outerHandle = GeometryHandle.Zero;

            generateCube = !(string.IsNullOrEmpty(frontUrl) || string.IsNullOrEmpty(backUrl) ||
                             string.IsNullOrEmpty(topUrl) || string.IsNullOrEmpty(bottomUrl) ||
                             string.IsNullOrEmpty(leftUrl) || string.IsNullOrEmpty(rightUrl));

            //TODO: replace cube sides that arent available with transparent sides

            generateSkyAndGround = !(string.IsNullOrEmpty(groundColor) || string.IsNullOrEmpty(skyColor) ||
                                     string.IsNullOrEmpty(groundAngle) || string.IsNullOrEmpty(skyAngle));


            // TODO: later render both skydome and skybox together
            // Alpha values in skybox should provide a way to see through to skydome.
            // Skycolor sphere should be slightly larger than groundcolor hemisphere
            // and finally skybox should fit and be smaller than groundcolor hemisphere.

            if (generateSkyAndGround)
            {
                // Sphere
                // interpolate colors from groundColor and skyColor over hemispheres using specified sky and ground angles
                this.groundColors = X3DTypeConverters.MFVec3f(groundColor);
                this.groundAngles = X3DTypeConverters.Floats(groundAngle);
                this.skyColors    = X3DTypeConverters.MFVec3f(skyColor);
                this.skyAngles    = X3DTypeConverters.Floats(skyAngle);

                // Assign colors with matching angles
                colors = new Vector3[groundColors.Length + skyColors.Length];
                for (i = 0; i < skyColors.Length; i++)
                {
                    colors[i] = skyColors[i];
                }
                for (i = skyColors.Length; i < skyColors.Length + groundColors.Length; i++)
                {
                    colors[i] = groundColors[i - skyColors.Length];
                }
                angles    = new float[groundAngles.Length + skyAngles.Length + 2];
                angles[0] = 0;
                for (i = 0; i < skyAngles.Length; i++)
                {
                    angles[i + 1] = skyAngles[i];
                }
                angles[skyAngles.Length + 1] = 0;
                for (i = 0; i < groundAngles.Length; i++)
                {
                    angles[i + skyAngles.Length + 2] = 1.5f + groundAngles[i];
                }



                groundDivisor = (1.0f / groundColors.Length) * (float)Math.PI; // how many colors divided over 90 degrees (lower hemisphere)
                skyDivisor    = (1.0f / groundColors.Length) * (float)Math.PI; // how many colors divided over 90 degrees (upper hemisphere)

                // SKYDOME
                // outer sphere (sky)

                scaleSky     = Vector3.One * 6.0f;                                             // slightly bigger than ground hemisphere
                _shaderOuter = ShaderCompiler.ApplyShader(BackgroundShader.vertexShaderSource, // Make use of the BackgroundShader for Skydome Linear Interpolation
                                                          BackgroundShader.fragmentShaderSource);
                _shaderOuter.Link();

                List <Vertex> geometryOuterSphere = BuildSphereGeometryQuads(60, Vector3.Zero, 1.0f);
                Buffering.BufferShaderGeometry(geometryOuterSphere, out outerHandle.vbo4, out outerHandle.NumVerticies4);

                min = Vector3.Zero;
                max = Vector3.Zero;
                BoundingBox.CalculateBoundingBox(geometryOuterSphere, out max, out min);
                bboxOuter = max - min;

                // inner hemisphere (ground)

                //scaleGround = Vector3.One * 5.6f;
                //_shaderInner = ShaderCompiler.ApplyShader(BackgroundShader.vertexShaderSource,
                //                                 BackgroundShader.fragmentShaderSource);
                //_shaderInner.Link();

                //List<Vertex> geometryInnerHemisphere = BuildHemisphereGeometryQuads(60, new Vector3(0, 0.0f,0), 1.0f, false);
                //Buffering.BufferShaderGeometry(geometryInnerHemisphere, out innerHandle.vbo4, out innerHandle.NumVerticies4);

                //min = Vector3.Zero;
                //max = Vector3.Zero;
                //BoundingBox.CalculateBoundingBox(geometryInnerHemisphere, out max, out min);
                //bboxInner = max - min;


                skydomeTexture = MakeSkydomeTexture();
            }

            if (generateCube)
            {
                tex_cube = createCubeMapFromURIs();

                // SKYBOX
                // innermost skybox

                scaleCube = Vector3.One * 3.1f;

                _shaderInnerCube = ShaderCompiler.ApplyShader(CubeMapBackgroundShader.vertexShaderSource,
                                                              CubeMapBackgroundShader.fragmentShaderSource);
                _shaderInnerCube.Link();

                _pack           = new PackedGeometry();
                _pack._indices  = _cube.Indices;
                _pack._coords   = _cube.Vertices;
                _pack.Texturing = true;
                //_pack._colorIndicies = _boxGeometry.Colors;
                _pack._texCoords   = _cube.Texcoords;
                _pack.restartIndex = -1;

                _pack.Interleave();

                // BUFFER GEOMETRY
                cubeHandle = _pack.CreateHandle();
            }
        }