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 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); }
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(); }
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(); }
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(); }
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(); }
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(); } }