Пример #1
0
        public override void OnRenderFrame(float deltaTime, EnumRenderStage stage)
        {
            if (loadedTexture == null)
            {
                return;
            }

            IRenderAPI rpi    = api.Render;
            Vec3d      camPos = api.World.Player.Entity.CameraPos;

            if (camPos.SquareDistanceTo(pos.X, pos.Y, pos.Z) > 20 * 20)
            {
                return;
            }

            rpi.GlDisableCullFace();
            rpi.GlToggleBlend(true, EnumBlendMode.PremultipliedAlpha);

            IStandardShaderProgram prog = rpi.PreparedStandardShader(pos.X, pos.Y, pos.Z);

            prog.Tex2D = loadedTexture.TextureId;

            prog.ModelMatrix = ModelMat
                               .Identity()
                               .Translate(pos.X - camPos.X, pos.Y - camPos.Y, pos.Z - camPos.Z)
                               .Translate(0.5f, 0.5f, 0.5f)
                               .RotateY(rotY + GameMath.PI)
                               .Translate(-0.5f, -0.5, -0.5f)
                               .Translate(0.5f, 0.35f, 1 / 16f + 0.03f)
                               .Scale(0.45f * QuadWidth, 0.45f * QuadHeight, 0.45f * QuadWidth)
                               .Values
            ;

            prog.ViewMatrix       = rpi.CameraMatrixOriginf;
            prog.ProjectionMatrix = rpi.CurrentProjectionMatrix;
            prog.NormalShaded     = 0;
            prog.ExtraGodray      = 0;
            prog.SsaoAttn         = 0;
            prog.AlphaTest        = 0.05f;
            prog.OverlayOpacity   = 0;

            rpi.RenderMesh(quadModelRef);
            prog.Stop();

            rpi.GlToggleBlend(true, EnumBlendMode.Standard);
        }
Пример #2
0
        /// <summary>Builds this Item</summary>
        protected override void Build()
        {
            // Load Material
            ModelMat = SRObjects.GetInst <Material>("EchoBlue");
            ModelMat.SetColor(TINT_COLOR, ColorUtils.FromHex("22222222"));
            ModelMat.SetFloat(BRIGHTNESS, 0.1f);
            ModelMat.SetFloat(ANIMATION_SPEED, 0f);

            // Get GameObjects
            Prefab      = PrefabUtils.CopyPrefab(BaseItem);
            Prefab.name = NamePrefix + Name;
            Prefab.transform.localScale = Scale;

            GameObject child = Prefab.FindChild("model");

            child.transform.localScale = ModelScale;

            // Load Components
            Rigidbody    body = Prefab.GetComponent <Rigidbody>();
            Vacuumable   vac  = Prefab.GetComponent <Vacuumable>();
            Identifiable iden = Prefab.GetComponent <Identifiable>();

            MeshFilter   filter = child.GetComponent <MeshFilter>();
            MeshRenderer render = child.GetComponent <MeshRenderer>();

            // Setup Components
            body.mass = Mass;
            vac.size  = Size;
            iden.id   = ID;

            filter.sharedMesh     = Mesh;
            render.sharedMaterial = ModelMat;

            // Setup Proximity
            Prefab.AddComponent <EffyProximity>();

            // Add Particles
            GameObject part = Object.Instantiate(EffyParticles, Prefab.transform, true);

            part.name = "EffyPart";
            part.transform.localScale = Vector3.one;
        }
Пример #3
0
        public void UpdateTransform(Camera camera)
        {
            ModelMat.Identity();
            ModelMat = ModelMat.TRS(LocalPosition, LocalRotation, LocalScale);
            ModelITMat.CopyFrom(ModelMat.m);
            ModelITMat.Invert();
            ModelITMat.Transpose();

            if (Parent != null)
            {
                ModelMat = Parent.ModelMat * ModelMat;
            }

            ModelViewMat     = camera.View * ModelMat;
            ModelViewProjMat = camera.Proj * ModelViewMat;
            ProjMat          = camera.Proj;

            ModelViewITMat.CopyFrom(ModelViewMat);
            ModelViewITMat.Invert();
            ModelViewITMat.Transpose();

            WorldPosition = ModelMat * Vector4.zeroPos;
        }