예제 #1
0
        public Texture2 CreateTexture()
        {
            var result = new Texture2();

            result.MinFilter  = TextureFilter.LinearMipmapLinear;
            result.MagFilter  = TextureFilter.Linear;
            result.Wrap       = TextureWrapMode.ClampToEdge;
            result.Anisotropy = 4;
            result.SetImage(_bmp, false, false, false);
            return(result);
        }
예제 #2
0
파일: Wellbore.cs 프로젝트: xorza/NetGL
        protected override void OnStart()
        {
            base.OnStart();

            var points = new List <Vector3>();

            points.Add(new Vector3(0, 0, 0));
            points.Add(new Vector3(0, 0, 1));
            points.Add(new Vector3(0, 1, 1));
            points.Add(new Vector3(0, 1, 0));
            points.Add(new Vector3(0, 0, 0));
            points.Add(new Vector3(0, -2, 0));
            points.Add(new Vector3(0, -2, -2));

            points = Spline.CatmullRom(points, 0.02f);

            var trajectory = new List <ExtrusionPoint>();

            points.ForEach(_ => trajectory.Add(new ExtrusionPoint()
            {
                Radius = 0.1f, Position = _
            }));

            var wellMesh = CircularExtrusion.Create(trajectory);

            wellMesh.DrawStyle = PolygonMode.Fill;

            _wellMaterial = new Material(MaterialType.FlatVertexColor);
            var texture = new Texture2();

            _wellMaterial.MainTexture = new Texture2("Resources\\Textures\\Wellbore\\fluid_colors.png", false);
            _wellMaterial.SetTexture("uniform_DisplaceTexture", texture);
            _wellMaterial.Color = Vector4.One;

            var renderer = SceneObject.AddComponent <MeshRenderable>();

            renderer.Mesh     = wellMesh;
            renderer.Material = _wellMaterial;

            var buffer = new ByteBuffer(1024 * 4);

            for (int i = 0; i < buffer.Length; i += 4)
            {
                var t = 0.1f + (i / (float)buffer.Length);

                var noise1 = GetNoise(t * 400f) * 0.6f;
                var noise2 = Math.Pow(GetNoise(t * 6), 2);
                //noise1 = 0;
                //noise2 = 0;
                buffer[i] = (byte)(255 * (noise1 + noise2) / 1.6f);
            }

            texture.SetImage(buffer, new Size(1, buffer.Length / 4), PixelFormat.Red, PixelInternalFormat.R8);
        }
예제 #3
0
        public Graphics(UserControl control, SceneTime time, ShadingTechnique technique)
        {
            Assert.NotNull(control);
            Assert.NotNull(time);

            IsDisposed = false;
            CurrentShadingTechnique = technique;

            if (GL.GetCurrent(false) != null || GetCurrent(false) != null)
            {
                var error = "Only one NetGL view per thread is now supported. Try launching 3D view in different thread.";
                Log.Error(error);
                throw new InvalidOperationException(error);
            }

            _control = control;
            _time    = time;

            try {
                _glContext = new GL(_control.Handle);
            }
            catch {
                Dispose();
                throw;
            }

            _currentContext.Value = this;

            _glContext.Enable(EnableCap.DepthTest);
            _glContext.Enable(EnableCap.Texture2D);
            _glContext.Enable(EnableCap.CullFace);
            _glContext.Enable(EnableCap.ProgramPointSize);
            _glContext.Enable(EnableCap.PointSprite);
            _glContext.CullFace(MaterialFace.Back);
            _glContext.FrontFace(FrontFaceDirection.CounterClockwise);
            _glContext.BlendEquation(BlendEquations.FuncAdd);
            _glContext.BlendFunc(BlendMode.SrcAlpha, BlendMode.OneMinusSrcAlpha);

            _glContext.SwapInterval(_swapInterval);

            _globalUniforms   = new GlobalUniformsBufferObject();
            _standartUniforms = new StandardUniformsBufferObject();
            _defaultMaterial  = new Material(MaterialType.DiffuseColor);
            _blankTexture     = new Texture2();
            _blankTexture.SetImage(new byte[4] {
                255, 0, 255, 255
            }, new Size(1, 1), Core.PixelFormat.Rgba, Core.PixelInternalFormat.Rgba8);
            _quadShader = new QuadShader();

            _displayQuadVao = CreateDisplayQuadVao();

            switch (CurrentShadingTechnique)
            {
            case ShadingTechnique.Forward:
                _renderTechnique = new ForwardRender();
                break;

            case ShadingTechnique.Deferred:
                _renderTechnique = new DeferredRender();
                break;

            default:
                throw new NotSupportedException(CurrentShadingTechnique.ToString());
            }

            ScreenSize = _control.ClientSize;
        }