public void OnRenderFrame(float deltaTime, EnumRenderStage stage) { if (Level <= 0 || TextureName == null) { return; } int voxelY = (int)GameMath.Clamp(Level, 0, fillQuadsByLevel.Length - 1); IRenderAPI rpi = api.Render; IClientWorldAccessor worldAccess = api.World; EntityPos plrPos = worldAccess.Player.Entity.Pos; Vec3d camPos = worldAccess.Player.Entity.CameraPos; rpi.GlDisableCullFace(); IStandardShaderProgram prog = rpi.StandardShader; prog.Use(); prog.RgbaAmbientIn = rpi.AmbientColor; prog.RgbaFogIn = rpi.FogColor; prog.FogMinIn = rpi.FogMin; prog.FogDensityIn = rpi.FogDensity; prog.RgbaTint = ColorUtil.WhiteArgbVec; prog.WaterWave = 0; Vec4f lightrgbs = api.World.BlockAccessor.GetLightRGBs(pos.X, pos.Y, pos.Z); float[] glowColor = ColorUtil.GetIncandescenceColorAsColor4f((int)Temperature); lightrgbs.R += 2 * glowColor[0]; lightrgbs.G += 2 * glowColor[1]; lightrgbs.B += 2 * glowColor[2]; prog.RgbaLightIn = lightrgbs; prog.RgbaBlockIn = ColorUtil.WhiteArgbVec; prog.ExtraGlow = (int)GameMath.Clamp((Temperature - 500) / 4, 0, 255); int texid = api.Render.GetOrLoadTexture(TextureName); Cuboidf rect = fillQuadsByLevel[voxelY]; rpi.BindTexture2d(texid); prog.ModelMatrix = ModelMat .Identity() .Translate(pos.X - camPos.X, pos.Y - camPos.Y, pos.Z - camPos.Z) .Translate(1 - rect.X1 / 16f, 1.01f / 16f + Math.Max(0, Level / 16f - 0.0625f / 3), 1 - rect.Z1 / 16f) .RotateX(90 * GameMath.DEG2RAD) .Scale(0.5f * rect.Width / 16f, 0.5f * rect.Length / 16f, 0.5f) .Translate(-1, -1, 0) .Values ; prog.ViewMatrix = rpi.CameraMatrixOriginf; prog.ProjectionMatrix = rpi.CurrentProjectionMatrix; rpi.RenderMesh(quadModelRefs[voxelY]); prog.Stop(); rpi.GlEnableCullFace(); }
public void OnRenderFrame(float deltaTime, EnumRenderStage stage) { if (workItemMeshRef == null) { return; } if (stage == EnumRenderStage.AfterFinalComposition) { RenderRecipeOutLine(); return; } IRenderAPI rpi = api.Render; IClientWorldAccessor worldAccess = api.World; Vec3d camPos = worldAccess.Player.Entity.CameraPos; EntityPos plrPos = worldAccess.Player.Entity.Pos; int temp = (int)ingot.Collectible.GetTemperature(api.World, ingot); Vec4f lightrgbs = worldAccess.BlockAccessor.GetLightRGBs(pos.X, pos.Y, pos.Z); float[] glowColor = ColorUtil.GetIncandescenceColorAsColor4f(temp); lightrgbs[0] += 2 * glowColor[0]; lightrgbs[1] += 2 * glowColor[1]; lightrgbs[2] += 2 * glowColor[2]; rpi.GlDisableCullFace(); IStandardShaderProgram prog = rpi.StandardShader; prog.Use(); rpi.BindTexture2d(texId); prog.RgbaAmbientIn = rpi.AmbientColor; prog.RgbaFogIn = rpi.FogColor; prog.FogMinIn = rpi.FogMin; prog.DontWarpVertices = 0; prog.AddRenderFlags = 0; prog.FogDensityIn = rpi.FogDensity; prog.RgbaTint = ColorUtil.WhiteArgbVec; prog.RgbaLightIn = lightrgbs; prog.RgbaBlockIn = ColorUtil.WhiteArgbVec; prog.ExtraGlow = GameMath.Clamp((temp - 700) / 2, 0, 255); prog.ModelMatrix = ModelMat .Identity() .Translate(pos.X - camPos.X, pos.Y - camPos.Y, pos.Z - camPos.Z) .Values ; prog.ViewMatrix = rpi.CameraMatrixOriginf; prog.ProjectionMatrix = rpi.CurrentProjectionMatrix; rpi.RenderMesh(workItemMeshRef); prog.Stop(); }
// Needs to render mash, juice quad and bucket public void OnRenderFrame(float deltaTime, EnumRenderStage stage) { if (mashMeshref == null || mashMeshref.Disposed) { return; } IRenderAPI rpi = api.Render; Vec3d camPos = api.World.Player.Entity.CameraPos; rpi.GlDisableCullFace(); rpi.GlToggleBlend(true); IStandardShaderProgram prog = rpi.StandardShader; prog.Use(); prog.Tex2D = api.BlockTextureAtlas.AtlasTextureIds[0]; prog.DontWarpVertices = 0; prog.AddRenderFlags = 0; prog.RgbaAmbientIn = rpi.AmbientColor; prog.RgbaFogIn = rpi.FogColor; prog.FogMinIn = rpi.FogMin; prog.FogDensityIn = rpi.FogDensity; prog.RgbaTint = ColorUtil.WhiteArgbVec; prog.NormalShaded = 1; prog.ExtraGodray = 0; prog.SsaoAttn = 0; prog.AlphaTest = 0.05f; prog.OverlayOpacity = 0; Vec4f lightrgbs = api.World.BlockAccessor.GetLightRGBs(pos.X, pos.Y, pos.Z); prog.RgbaLightIn = lightrgbs; double squeezeRel = befruitpress.MashSlot.Itemstack?.Attributes?.GetDouble("squeezeRel", 1) ?? 1; prog.ModelMatrix = ModelMat .Identity() .Translate(pos.X - camPos.X, pos.Y - camPos.Y, pos.Z - camPos.Z) .Translate(0, 0.8f, 0) .Scale(1, (float)squeezeRel, 1) .Values ; prog.ViewMatrix = rpi.CameraMatrixOriginf; prog.ProjectionMatrix = rpi.CurrentProjectionMatrix; rpi.RenderMesh(mashMeshref); prog.Stop(); }
public void OnRenderFrame(float deltaTime, EnumRenderStage stage) { if (workItemMeshRef == null) { return; } if (stage == EnumRenderStage.AfterFinalComposition) { RenderRecipeOutLine(); return; } IRenderAPI rpi = api.Render; IClientWorldAccessor worldAccess = api.World; Vec3d camPos = worldAccess.Player.Entity.CameraPos; EntityPos plrPos = worldAccess.Player.Entity.Pos; rpi.GlDisableCullFace(); IStandardShaderProgram prog = rpi.StandardShader; prog.Use(); prog.ExtraGlow = 0; prog.RgbaAmbientIn = rpi.AmbientColor; prog.RgbaFogIn = rpi.FogColor; prog.FogMinIn = rpi.FogMin; prog.FogDensityIn = rpi.FogDensity; prog.RgbaTint = ColorUtil.WhiteArgbVec; prog.WaterWave = 0; Vec4f lightrgbs = api.World.BlockAccessor.GetLightRGBs(pos.X, pos.Y, pos.Z); prog.RgbaLightIn = lightrgbs; prog.RgbaBlockIn = ColorUtil.WhiteArgbVec; rpi.BindTexture2d(texId); prog.ProjectionMatrix = rpi.CurrentProjectionMatrix; prog.ViewMatrix = rpi.CameraMatrixOriginf; prog.ModelMatrix = ModelMat.Identity().Translate(pos.X - camPos.X, pos.Y - camPos.Y, pos.Z - camPos.Z).Values; rpi.RenderMesh(workItemMeshRef); prog.Stop(); }
public void OnRenderFrame(float deltaTime, EnumRenderStage stage) { if (MeshRefPerChunk == null) { return; } if (stage != EnumRenderStage.Opaque) { return; } IRenderAPI rpi = capi.Render; IClientWorldAccessor worldAccess = capi.World; Vec3d camPos = worldAccess.Player.Entity.CameraPos; rpi.GLEnableDepthTest(); rpi.GlEnableCullFace(); //IStandardShaderProgram prog = rpi.StandardShader; IStandardShaderProgram prog = rpi.PreparedStandardShader(0, 0, 0); prog.Use(); AssetLocation wireTexName = new AssetLocation("block/metal/plate/lead.png"); int texid = capi.Render.GetOrLoadTexture(wireTexName); rpi.BindTexture2d(texid); prog.ProjectionMatrix = rpi.CurrentProjectionMatrix; prog.ViewMatrix = rpi.CameraMatrixOriginf; prog.ModelMatrix = ModelMat.Values; foreach (KeyValuePair <Vec3i, MeshRef> mesh in MeshRefPerChunk) { //worldAccess.BlockAccessor.GetLightRGBs() Vec3d offset = new Vec3d(mesh.Key.X * chunksize, mesh.Key.Y * chunksize, mesh.Key.Z * chunksize); prog.ModelMatrix = ModelMat.Identity().Translate(offset.X - camPos.X, offset.Y - camPos.Y, offset.Z - camPos.Z).Values; rpi.RenderMesh(mesh.Value); } prog.Stop(); }
public void OnRenderFrame(float deltaTime, EnumRenderStage stage) { IRenderAPI rpi = capi.Render; IClientWorldAccessor worldAccess = capi.World; Vec3d camPos = worldAccess.Player.Entity.CameraPos; rpi.GlDisableCullFace(); IStandardShaderProgram prog = rpi.StandardShader; prog.Use(); prog.RgbaAmbientIn = rpi.AmbientColor; prog.RgbaFogIn = rpi.FogColor; prog.FogMinIn = rpi.FogMin; prog.FogDensityIn = rpi.FogDensity; prog.RgbaTint = ColorUtil.WhiteArgbVec; prog.DontWarpVertices = 0; prog.AddRenderFlags = 0; prog.ExtraGodray = 0; prog.OverlayOpacity = 0; Vec4f lightrgbs = capi.World.BlockAccessor.GetLightRGBs(pos.X, pos.Y, pos.Z); if (stack != null && workItemMeshRef != null) { int temp = (int)stack.Collectible.GetTemperature(capi.World, stack); //Vec4f lightrgbs = capi.World.BlockAccessor.GetLightRGBs(pos.X, pos.Y, pos.Z); float[] glowColor = ColorUtil.GetIncandescenceColorAsColor4f(temp); int extraGlow = GameMath.Clamp((temp - 550) / 2, 0, 255); prog.NormalShaded = 1; prog.RgbaLightIn = lightrgbs; prog.RgbaGlowIn = new Vec4f(glowColor[0], glowColor[1], glowColor[2], extraGlow / 255f); prog.ExtraGlow = extraGlow; prog.Tex2D = textureId; prog.ModelMatrix = ModelMat.Identity().Translate(pos.X - camPos.X, pos.Y - camPos.Y + 10 / 16f, pos.Z - camPos.Z).Values; prog.ViewMatrix = rpi.CameraMatrixOriginf; prog.ProjectionMatrix = rpi.CurrentProjectionMatrix; rpi.RenderMesh(workItemMeshRef); } if (burning) { float[] glowColor = ColorUtil.GetIncandescenceColorAsColor4f(1200); prog.RgbaGlowIn = new Vec4f(glowColor[0], glowColor[1], glowColor[2], 1); } else { prog.RgbaGlowIn = new Vec4f(0, 0, 0, 0); } prog.NormalShaded = 1; prog.RgbaLightIn = lightrgbs; prog.ExtraGlow = burning ? 255 : 0; rpi.BindTexture2d(hetexpos.atlasTextureId); prog.ModelMatrix = ModelMat.Identity().Translate(pos.X - camPos.X, pos.Y - camPos.Y, pos.Z - camPos.Z).Values; prog.ViewMatrix = rpi.CameraMatrixOriginf; prog.ProjectionMatrix = rpi.CurrentProjectionMatrix; rpi.RenderMesh(heQuadRef); prog.Stop(); }
public void OnRenderFrame(float deltaTime, EnumRenderStage stage) { if (contentStackRenderer != null) { contentStackRenderer.OnRenderFrame(deltaTime, stage); return; } if (meshref == null) { return; } IRenderAPI rpi = api.Render; Vec3d camPos = api.World.Player.Entity.CameraPos; rpi.GlDisableCullFace(); rpi.GlToggleBlend(true); IStandardShaderProgram prog = rpi.StandardShader; prog.Use(); prog.WaterWave = 0; prog.RgbaAmbientIn = rpi.AmbientColor; prog.RgbaFogIn = rpi.FogColor; prog.FogMinIn = rpi.FogMin; prog.FogDensityIn = rpi.FogDensity; prog.RgbaTint = ColorUtil.WhiteArgbVec; api.Render.BindTexture2d(api.ItemTextureAtlas.AtlasTextureIds[0]); int temp = (int)ContentStack.Collectible.GetTemperature(api.World, ContentStack); Vec4f lightrgbs = api.World.BlockAccessor.GetLightRGBs(pos.X, pos.Y, pos.Z); float[] glowColor = ColorUtil.GetIncandescenceColorAsColor4f(temp); lightrgbs[0] += 2 * glowColor[0]; lightrgbs[1] += 2 * glowColor[1]; lightrgbs[2] += 2 * glowColor[2]; prog.RgbaLightIn = lightrgbs; prog.RgbaBlockIn = ColorUtil.WhiteArgbVec; prog.ExtraGlow = (int)GameMath.Clamp((temp - 500) / 4, 0, 255); prog.ModelMatrix = ModelMat .Identity() .Translate(pos.X - camPos.X + transform.Translation.X, pos.Y - camPos.Y + transform.Translation.Y, pos.Z - camPos.Z + transform.Translation.Z) .Translate(transform.Origin.X, 0.6f + transform.Origin.Y, transform.Origin.Z) .RotateX((90 + transform.Rotation.X) * GameMath.DEG2RAD) .RotateY(transform.Rotation.Y * GameMath.DEG2RAD) .RotateZ(transform.Rotation.Z * GameMath.DEG2RAD) .Scale(transform.ScaleXYZ.X, transform.ScaleXYZ.Y, transform.ScaleXYZ.Z) .Translate(-transform.Origin.X, -transform.Origin.Y, -transform.Origin.Z) .Values ; prog.ViewMatrix = rpi.CameraMatrixOriginf; prog.ProjectionMatrix = rpi.CurrentProjectionMatrix; rpi.RenderMesh(meshref); prog.Stop(); }
protected void RenderHeldItem(float dt, bool isShadowPass, bool right) { IRenderAPI rapi = capi.Render; ItemSlot slot = right ? eagent?.RightHandItemSlot : eagent?.LeftHandItemSlot; ItemStack stack = slot?.Itemstack; AttachmentPointAndPose apap = entity.AnimManager.Animator.GetAttachmentPointPose(right ? "RightHand" : "LeftHand"); if (apap == null || stack == null) { return; } AttachmentPoint ap = apap.AttachPoint; ItemRenderInfo renderInfo = rapi.GetItemStackRenderInfo(slot, right ? EnumItemRenderTarget.HandTp : EnumItemRenderTarget.HandTpOff); IStandardShaderProgram prog = null; if (renderInfo?.Transform == null) { return; // Happens with unknown items/blocks } ItemModelMat .Set(ModelMat) .Mul(apap.AnimModelMatrix) .Translate(renderInfo.Transform.Origin.X, renderInfo.Transform.Origin.Y, renderInfo.Transform.Origin.Z) .Scale(renderInfo.Transform.ScaleXYZ.X, renderInfo.Transform.ScaleXYZ.Y, renderInfo.Transform.ScaleXYZ.Z) .Translate(ap.PosX / 16f + renderInfo.Transform.Translation.X, ap.PosY / 16f + renderInfo.Transform.Translation.Y, ap.PosZ / 16f + renderInfo.Transform.Translation.Z) .RotateX((float)(ap.RotationX + renderInfo.Transform.Rotation.X) * GameMath.DEG2RAD) .RotateY((float)(ap.RotationY + renderInfo.Transform.Rotation.Y) * GameMath.DEG2RAD) .RotateZ((float)(ap.RotationZ + renderInfo.Transform.Rotation.Z) * GameMath.DEG2RAD) .Translate(-(renderInfo.Transform.Origin.X), -(renderInfo.Transform.Origin.Y), -(renderInfo.Transform.Origin.Z)) ; if (isShadowPass) { rapi.CurrentActiveShader.BindTexture2D("tex2d", renderInfo.TextureId, 0); float[] mvpMat = Mat4f.Mul(ItemModelMat.Values, capi.Render.CurrentModelviewMatrix, ItemModelMat.Values); Mat4f.Mul(mvpMat, capi.Render.CurrentProjectionMatrix, mvpMat); capi.Render.CurrentActiveShader.UniformMatrix("mvpMatrix", mvpMat); capi.Render.CurrentActiveShader.Uniform("origin", new Vec3f()); } else { prog = rapi.StandardShader; prog.Use(); prog.DontWarpVertices = 0; prog.AddRenderFlags = 0; prog.NormalShaded = 1; prog.Tex2D = renderInfo.TextureId; prog.RgbaTint = ColorUtil.WhiteArgbVec; prog.AlphaTest = renderInfo.AlphaTest; prog.DamageEffect = renderInfo.DamageEffect; prog.OverlayOpacity = renderInfo.OverlayOpacity; if (renderInfo.OverlayTexture != null && renderInfo.OverlayOpacity > 0) { prog.Tex2dOverlay2D = renderInfo.OverlayTexture.TextureId; prog.OverlayTextureSize = new Vec2f(renderInfo.OverlayTexture.Width, renderInfo.OverlayTexture.Height); prog.BaseTextureSize = new Vec2f(renderInfo.TextureSize.Width, renderInfo.TextureSize.Height); TextureAtlasPosition texPos = rapi.GetTextureAtlasPosition(stack); prog.BaseUvOrigin = new Vec2f(texPos.x1, texPos.y1); } int temp = (int)stack.Collectible.GetTemperature(capi.World, stack); float[] glowColor = ColorUtil.GetIncandescenceColorAsColor4f(temp); /*lightrgbs[0] += glowColor[0]; * lightrgbs[1] += glowColor[1]; * lightrgbs[2] += glowColor[2];*/ var gi = GameMath.Clamp((temp - 500) / 3, 0, 255); prog.ExtraGlow = gi; prog.RgbaAmbientIn = rapi.AmbientColor; prog.RgbaLightIn = lightrgbs; prog.RgbaGlowIn = new Vec4f(glowColor[0], glowColor[1], glowColor[2], gi / 255f); prog.RgbaFogIn = rapi.FogColor; prog.FogMinIn = rapi.FogMin; prog.FogDensityIn = rapi.FogDensity; prog.NormalShaded = renderInfo.NormalShaded ? 1 : 0; prog.ProjectionMatrix = rapi.CurrentProjectionMatrix; prog.ViewMatrix = rapi.CameraMatrixOriginf; prog.ModelMatrix = ItemModelMat.Values; } if (!renderInfo.CullFaces) { rapi.GlDisableCullFace(); } rapi.RenderMesh(renderInfo.ModelRef); if (!renderInfo.CullFaces) { rapi.GlEnableCullFace(); } if (!isShadowPass) { prog.DamageEffect = 0; } if (!isShadowPass) { prog.Stop(); AdvancedParticleProperties[] ParticleProperties = stack.Collectible?.ParticleProperties; if (stack.Collectible != null && !capi.IsGamePaused) { Vec4f pos = ItemModelMat.TransformVector(new Vec4f(stack.Collectible.TopMiddlePos.X, stack.Collectible.TopMiddlePos.Y, stack.Collectible.TopMiddlePos.Z, 1)); EntityPlayer entityPlayer = capi.World.Player.Entity; accum += dt; if (ParticleProperties != null && ParticleProperties.Length > 0 && accum > 0.025f) { accum = accum % 0.025f; for (int i = 0; i < ParticleProperties.Length; i++) { AdvancedParticleProperties bps = ParticleProperties[i]; bps.basePos.X = pos.X + entity.Pos.X + -(entity.Pos.X - entityPlayer.CameraPos.X); bps.basePos.Y = pos.Y + entity.Pos.Y + -(entity.Pos.Y - entityPlayer.CameraPos.Y); bps.basePos.Z = pos.Z + entity.Pos.Z + -(entity.Pos.Z - entityPlayer.CameraPos.Z); eagent.World.SpawnParticles(bps); } } } } }
public override void DoRender3DOpaque(float dt, bool isShadowPass) { IRenderAPI rapi = capi.Render; IEntityPlayer entityPlayer = capi.World.Player.Entity; ItemRenderInfo renderInfo = rapi.GetItemStackRenderInfo(entityitem.Itemstack, EnumItemRenderTarget.Ground); if (renderInfo.ModelRef == null) { return; } IStandardShaderProgram prog = null; LoadModelMatrix(renderInfo, isShadowPass); if (isShadowPass) { rapi.CurrentActiveShader.BindTexture2D("tex2d", renderInfo.TextureId, 0); float[] mvpMat = Mat4f.Mul(ModelMat, capi.Render.CurrentModelviewMatrix, ModelMat); Mat4f.Mul(mvpMat, capi.Render.CurrentProjectionMatrix, mvpMat); capi.Render.CurrentActiveShader.UniformMatrix("mvpMatrix", mvpMat); capi.Render.CurrentActiveShader.Uniform("origin", new Vec3f()); } else { prog = rapi.StandardShader; prog.Use(); prog.Tex2D = renderInfo.TextureId; prog.RgbaTint = ColorUtil.WhiteArgbVec; if (entity.Swimming) { prog.WaterWave = entityitem.Itemstack.Collectible.MaterialDensity > 1000 ? 0 : 1; prog.WaterWaveCounter = capi.Render.WaterWaveCounter; prog.Playerpos = new Vec3f((float)entityPlayer.CameraPos.X, (float)entityPlayer.CameraPos.Y, (float)entityPlayer.CameraPos.Z); } else { prog.WaterWave = 0; } BlockPos pos = entityitem.Pos.AsBlockPos; Vec4f lightrgbs = capi.World.BlockAccessor.GetLightRGBs(pos.X, pos.Y, pos.Z); int temp = (int)entityitem.Itemstack.Collectible.GetTemperature(capi.World, entityitem.Itemstack); float[] glowColor = ColorUtil.GetIncandescenceColorAsColor4f(temp); lightrgbs[0] += 2 * glowColor[0]; lightrgbs[1] += 2 * glowColor[1]; lightrgbs[2] += 2 * glowColor[2]; prog.ExtraGlow = GameMath.Clamp((temp - 500) / 3, 0, 255); prog.RgbaAmbientIn = rapi.AmbientColor; prog.RgbaLightIn = lightrgbs; prog.RgbaBlockIn = ColorUtil.WhiteArgbVec; prog.RgbaFogIn = rapi.FogColor; prog.FogMinIn = rapi.FogMin; prog.FogDensityIn = rapi.FogDensity; prog.ProjectionMatrix = rapi.CurrentProjectionMatrix; prog.ViewMatrix = rapi.CameraMatrixOriginf; prog.ModelMatrix = ModelMat; } if (!renderInfo.CullFaces) { rapi.GlDisableCullFace(); } rapi.RenderMesh(renderInfo.ModelRef); if (!renderInfo.CullFaces) { rapi.GlEnableCullFace(); } if (!isShadowPass) { prog.Stop(); } }
public void OnRenderFrame(float deltaTime, EnumRenderStage stage) { if (stack == null && fuelLevel == 0) { return; } IRenderAPI rpi = capi.Render; IClientWorldAccessor worldAccess = capi.World; EntityPos plrPos = worldAccess.Player.Entity.Pos; Vec3d camPos = worldAccess.Player.Entity.CameraPos; rpi.GlDisableCullFace(); IStandardShaderProgram prog = rpi.StandardShader; prog.Use(); prog.RgbaAmbientIn = rpi.AmbientColor; prog.RgbaFogIn = rpi.FogColor; prog.FogMinIn = rpi.FogMin; prog.FogDensityIn = rpi.FogDensity; prog.RgbaTint = ColorUtil.WhiteArgbVec; prog.WaterWave = 0; //rpi.GlMatrixModeModelView(); if (stack != null && workItemMeshRef != null) { int temp = (int)stack.Collectible.GetTemperature(capi.World, stack); prog.ExtraGlow = GameMath.Clamp((temp - 700) / 2, 0, 255); Vec4f lightrgbs = capi.World.BlockAccessor.GetLightRGBs(pos.X, pos.Y, pos.Z); float[] glowColor = ColorUtil.GetIncandescenceColorAsColor4f(temp); lightrgbs[0] += 2 * glowColor[0]; lightrgbs[1] += 2 * glowColor[1]; lightrgbs[2] += 2 * glowColor[2]; prog.RgbaLightIn = lightrgbs; prog.RgbaBlockIn = ColorUtil.WhiteArgbVec; // The work item rpi.BindTexture2d(workItemTexPos.atlasTextureId); prog.ModelMatrix = ModelMat.Identity().Translate(pos.X - camPos.X, pos.Y - camPos.Y + 7 / 16f + fuelLevel * 0.65f, pos.Z - camPos.Z).Values; prog.ViewMatrix = rpi.CameraMatrixOriginf; prog.ProjectionMatrix = rpi.CurrentProjectionMatrix; rpi.RenderMesh(workItemMeshRef); } if (fuelLevel > 0) { Vec4f lightrgbs = capi.World.BlockAccessor.GetLightRGBs(pos.X, pos.Y, pos.Z); prog.RgbaLightIn = lightrgbs; prog.RgbaBlockIn = ColorUtil.WhiteArgbVec; prog.ExtraGlow = 0; // The coal or embers rpi.BindTexture2d(burning ? embertexpos.atlasTextureId : coaltexpos.atlasTextureId); prog.ModelMatrix = ModelMat.Identity().Translate(pos.X - camPos.X, pos.Y - camPos.Y + 7 / 16f + fuelLevel * 0.65f, pos.Z - camPos.Z).Values; prog.ViewMatrix = rpi.CameraMatrixOriginf; prog.ProjectionMatrix = rpi.CurrentProjectionMatrix; rpi.RenderMesh(burning ? emberQuadRef : coalQuadRef); } prog.Stop(); }
public void OnRenderFrame(float deltaTime, EnumRenderStage stage) { if (needleMeshRef == null || discMeshRef == null) { return; } long ellapsedMs = api.World.ElapsedMilliseconds; IRenderAPI rpi = api.Render; IClientWorldAccessor worldAccess = api.World; Vec3d camPos = worldAccess.Player.Entity.CameraPos; Vec4f lightrgbs = api.World.BlockAccessor.GetLightRGBs(pos.X, pos.Y, pos.Z); rpi.GlDisableCullFace(); IStandardShaderProgram prog = rpi.StandardShader; prog.Use(); prog.ExtraGlow = 0; prog.RgbaAmbientIn = rpi.AmbientColor; prog.RgbaFogIn = rpi.FogColor; prog.FogMinIn = rpi.FogMin; prog.FogDensityIn = rpi.FogDensity; prog.RgbaTint = ColorUtil.WhiteArgbVec; prog.RgbaLightIn = lightrgbs; prog.DontWarpVertices = 0; prog.AddRenderFlags = 0; prog.ExtraGodray = 0; prog.NormalShaded = 1; rpi.BindTexture2d(api.BlockTextureAtlas.AtlasTextureIds[0]); float origx = -0.5f; float origz = -0.5f; needlePos.X = 3.5f / 16f; needlePos.Y = 10.8f / 16f; needlePos.Z = -3.5f / 16f; // because i'm a noob and lazy switch (blockRotation) { case 90: needlePos.X -= 7 / 16f; break; case 180: needlePos.X -= 7 / 16f; needlePos.Z += 7 / 16f; break; case 270: needlePos.Z += 7 / 16f; break; } float wobble = GameMath.Sin(Math.Max(0, ellapsedMs - updatedTotalMs) / 50f - 0.5f) / 80f; needleRotRad.Y = -GameMath.PIHALF + Math.Min(0.4f, (ellapsedMs - updatedTotalMs) / 700f) + wobble + blockRotation * GameMath.DEG2RAD; needleRotRad.X = wobble; prog.ModelMatrix = ModelMat .Identity() .Translate(pos.X - camPos.X + needlePos.X, pos.Y - camPos.Y + needlePos.Y, pos.Z - camPos.Z + needlePos.Z) .Translate(-origx, 0, -origz) .Rotate(needleRotRad) .Translate(origx, 0, origz) .Values ; prog.ViewMatrix = rpi.CameraMatrixOriginf; prog.ProjectionMatrix = rpi.CurrentProjectionMatrix; rpi.RenderMesh(needleMeshRef); rpi.BindTexture2d(api.ItemTextureAtlas.AtlasTextureIds[0]); origx = -9.25f / 16f; float origy = -9.5f / 16f; origz = -0.5f; discPos.X = -1.25f / 16f; discPos.Y = 11.2f / 16f; discPos.Z = 0f / 16f; discRotRad.X = GameMath.PIHALF; discRotRad.Z = -Math.Max(0, (ellapsedMs - updatedTotalMs) / 500f - 0.5f); prog.NormalShaded = 0; prog.ModelMatrix = ModelMat .Identity() .Translate(pos.X - camPos.X + discPos.X, pos.Y - camPos.Y + discPos.Y, pos.Z - camPos.Z + discPos.Z) .Translate(-origx, 0, -origz) .Rotate(discRotRad) .Scale(0.45f, 0.45f, 0.45f) .Translate(origx, origy, origz) .Values ; rpi.RenderMesh(discMeshRef); prog.Stop(); }
public void OnRenderFrame(float deltaTime, EnumRenderStage stage) { if (LevelLeft <= 0 && LevelRight <= 0) { return; } IRenderAPI rpi = api.Render; IClientWorldAccessor worldAccess = api.World; EntityPos plrPos = worldAccess.Player.Entity.Pos; Vec3d camPos = worldAccess.Player.Entity.CameraPos; rpi.GlDisableCullFace(); IStandardShaderProgram prog = rpi.StandardShader; prog.Use(); prog.RgbaAmbientIn = rpi.AmbientColor; prog.RgbaFogIn = rpi.FogColor; prog.FogMinIn = rpi.FogMin; prog.FogDensityIn = rpi.FogDensity; prog.RgbaTint = ColorUtil.WhiteArgbVec; prog.DontWarpVertices = 0; prog.ExtraGodray = 0; prog.AddRenderFlags = 0; if (LevelLeft > 0 && TextureNameLeft != null) { Vec4f lightrgbs = api.World.BlockAccessor.GetLightRGBs(pos.X, pos.Y, pos.Z); float[] glowColor = ColorUtil.GetIncandescenceColorAsColor4f((int)TemperatureLeft); int extraGlow = (int)GameMath.Clamp((TemperatureLeft - 550) / 1.5f, 0, 255); prog.RgbaLightIn = lightrgbs; prog.RgbaGlowIn = new Vec4f(glowColor[0], glowColor[1], glowColor[2], extraGlow / 255f); prog.ExtraGlow = extraGlow; prog.NormalShaded = 0; int texid = api.Render.GetOrLoadTexture(TextureNameLeft); rpi.BindTexture2d(texid); float xzOffset = (QuantityMolds > 1) ? 4.5f : 8.5f; prog.ModelMatrix = ModelMat .Identity() .Translate(pos.X - camPos.X, pos.Y - camPos.Y, pos.Z - camPos.Z) .Translate(xzOffset / 16f, 1 / 16f + LevelLeft / 850f, 8.5f / 16) .RotateX(90 * GameMath.DEG2RAD) .Scale(0.5f * 3 / 16f, 0.5f * 7 / 16f, 0.5f) .Values ; prog.ProjectionMatrix = rpi.CurrentProjectionMatrix; prog.ViewMatrix = rpi.CameraMatrixOriginf; rpi.RenderMesh(quadModelRef); } if (LevelRight > 0 && QuantityMolds > 1 && TextureNameRight != null) { Vec4f lightrgbs = api.World.BlockAccessor.GetLightRGBs(pos.X, pos.Y, pos.Z); float[] glowColor = ColorUtil.GetIncandescenceColorAsColor4f((int)TemperatureRight); int extraGlow = (int)GameMath.Clamp((TemperatureRight - 550) / 1.5f, 0, 255); prog.RgbaLightIn = lightrgbs; prog.RgbaGlowIn = new Vec4f(glowColor[0], glowColor[1], glowColor[2], extraGlow / 255f); prog.ExtraGlow = extraGlow; prog.NormalShaded = 0; int texid = api.Render.GetOrLoadTexture(TextureNameRight); rpi.BindTexture2d(texid); /* * rpi.GlPushMatrix(); * rpi.GlLoadMatrix(api.Render.CameraMatrixOrigin); * rpi.GlTranslate(pos.X - camPos.X, pos.Y - camPos.Y, pos.Z - camPos.Z); * rpi.GlTranslate(11.5f / 16f, 1 / 16f + LevelRight / 850f, 8.5f / 16); * rpi.GlRotate(90, 1, 0, 0); * rpi.GlScale(0.5f * 3 / 16f, 0.5f * 7 / 16f, 0.5f); * prog.ProjectionMatrix = rpi.CurrentProjectionMatrix; * prog.ModelViewMatrix = rpi.CurrentModelviewMatrix; * rpi.GlPopMatrix(); */ prog.ModelMatrix = ModelMat .Identity() .Translate(pos.X - camPos.X, pos.Y - camPos.Y, pos.Z - camPos.Z) .Translate(11.5f / 16f, 1 / 16f + LevelRight / 850f, 8.5f / 16) .RotateX(90 * GameMath.DEG2RAD) .Scale(0.5f * 3 / 16f, 0.5f * 7 / 16f, 0.5f) .Values ; prog.ProjectionMatrix = rpi.CurrentProjectionMatrix; prog.ViewMatrix = rpi.CameraMatrixOriginf; rpi.RenderMesh(quadModelRef); } prog.Stop(); rpi.GlEnableCullFace(); }
public override void DoRender3DOpaque(float dt, bool isShadowPass) { IRenderAPI rapi = capi.Render; // the value 22 is just trial&error, should probably be something proportial to the // 13ms game ticks (which is the physics frame rate) lerpedPos.X += (entity.Pos.X - lerpedPos.X) * 22 * dt; lerpedPos.Y += (entity.Pos.Y - lerpedPos.Y) * 22 * dt; lerpedPos.Z += (entity.Pos.Z - lerpedPos.Z) * 22 * dt; ItemRenderInfo renderInfo = rapi.GetItemStackRenderInfo(inslot, EnumItemRenderTarget.Ground); if (renderInfo.ModelRef == null) { return; } inslot.Itemstack.Collectible.OnBeforeRender(capi, inslot.Itemstack, EnumItemRenderTarget.Ground, ref renderInfo); IStandardShaderProgram prog = null; LoadModelMatrix(renderInfo, isShadowPass, dt); if (isShadowPass) { rapi.CurrentActiveShader.BindTexture2D("tex2d", renderInfo.TextureId, 0); float[] mvpMat = Mat4f.Mul(ModelMat, capi.Render.CurrentModelviewMatrix, ModelMat); Mat4f.Mul(mvpMat, capi.Render.CurrentProjectionMatrix, mvpMat); capi.Render.CurrentActiveShader.UniformMatrix("mvpMatrix", mvpMat); capi.Render.CurrentActiveShader.Uniform("origin", new Vec3f()); } else { prog = rapi.StandardShader; prog.Use(); prog.Tex2D = renderInfo.TextureId; prog.RgbaTint = ColorUtil.WhiteArgbVec; prog.DontWarpVertices = 0; prog.NormalShaded = 1; if (entity.Swimming) { prog.AddRenderFlags = (entityitem.Itemstack.Collectible.MaterialDensity > 1000 ? 0 : 1) << 12; prog.WaterWaveCounter = capi.Render.ShaderUniforms.WaterWaveCounter; } else { prog.AddRenderFlags = 0; } prog.OverlayOpacity = renderInfo.OverlayOpacity; if (renderInfo.OverlayTexture != null && renderInfo.OverlayOpacity > 0) { prog.Tex2dOverlay2D = renderInfo.OverlayTexture.TextureId; prog.OverlayTextureSize = new Vec2f(renderInfo.OverlayTexture.Width, renderInfo.OverlayTexture.Height); prog.BaseTextureSize = new Vec2f(renderInfo.TextureSize.Width, renderInfo.TextureSize.Height); TextureAtlasPosition texPos = rapi.GetTextureAtlasPosition(entityitem.Itemstack); prog.BaseUvOrigin = new Vec2f(texPos.x1, texPos.y1); } BlockPos pos = entityitem.Pos.AsBlockPos; Vec4f lightrgbs = capi.World.BlockAccessor.GetLightRGBs(pos.X, pos.Y, pos.Z); int temp = (int)entityitem.Itemstack.Collectible.GetTemperature(capi.World, entityitem.Itemstack); float[] glowColor = ColorUtil.GetIncandescenceColorAsColor4f(temp); int extraGlow = GameMath.Clamp((temp - 550) / 2, 0, 255); glowRgb.R = glowColor[0]; glowRgb.G = glowColor[1]; glowRgb.B = glowColor[2]; glowRgb.A = extraGlow / 255f; prog.ExtraGlow = extraGlow; prog.RgbaAmbientIn = rapi.AmbientColor; prog.RgbaLightIn = lightrgbs; prog.RgbaGlowIn = glowRgb; prog.RgbaFogIn = rapi.FogColor; prog.FogMinIn = rapi.FogMin; prog.FogDensityIn = rapi.FogDensity; prog.ExtraGodray = 0; prog.NormalShaded = renderInfo.NormalShaded ? 1 : 0; prog.ProjectionMatrix = rapi.CurrentProjectionMatrix; prog.ViewMatrix = rapi.CameraMatrixOriginf; prog.ModelMatrix = ModelMat; ItemStack stack = entityitem.Itemstack; AdvancedParticleProperties[] ParticleProperties = stack.Block?.ParticleProperties; if (stack.Block != null && !capi.IsGamePaused) { Mat4f.MulWithVec4(ModelMat, new Vec4f(stack.Block.TopMiddlePos.X, stack.Block.TopMiddlePos.Y - 0.4f, stack.Block.TopMiddlePos.Z - 0.5f, 0), particleOutTransform); // No idea why the -0.5f and -0.4f accum += dt; if (ParticleProperties != null && ParticleProperties.Length > 0 && accum > 0.025f) { accum = accum % 0.025f; for (int i = 0; i < ParticleProperties.Length; i++) { AdvancedParticleProperties bps = ParticleProperties[i]; bps.basePos.X = particleOutTransform.X + entity.Pos.X; bps.basePos.Y = particleOutTransform.Y + entity.Pos.Y; bps.basePos.Z = particleOutTransform.Z + entity.Pos.Z; entityitem.World.SpawnParticles(bps); } } } } if (!renderInfo.CullFaces) { rapi.GlDisableCullFace(); } rapi.RenderMesh(renderInfo.ModelRef); if (!renderInfo.CullFaces) { rapi.GlEnableCullFace(); } if (!isShadowPass) { prog.Stop(); } }
void RenderHeldItem(bool isShadowPass) { IRenderAPI rapi = capi.Render; ItemStack stack = (entity as IEntityAgent).RightHandItemSlot?.Itemstack; BlendEntityAnimator bea = curAnimator as BlendEntityAnimator; AttachmentPointAndPose apap = null; bea.AttachmentPointByCode.TryGetValue("RightHand", out apap); if (apap == null || stack == null) { return; } AttachmentPoint ap = apap.AttachPoint; ItemRenderInfo renderInfo = rapi.GetItemStackRenderInfo(stack, EnumItemRenderTarget.HandTp); IStandardShaderProgram prog = null; EntityPlayer entityPlayer = capi.World.Player.Entity; ItemModelMat .Set(ModelMat) .Mul(apap.Pose.AnimModelMatrix) .Translate(renderInfo.Transform.Origin.X, renderInfo.Transform.Origin.Y, renderInfo.Transform.Origin.Z) .Scale(renderInfo.Transform.ScaleXYZ.X, renderInfo.Transform.ScaleXYZ.Y, renderInfo.Transform.ScaleXYZ.Z) .Translate(ap.PosX / 16f + renderInfo.Transform.Translation.X, ap.PosY / 16f + renderInfo.Transform.Translation.Y, ap.PosZ / 16f + renderInfo.Transform.Translation.Z) .RotateX((float)(ap.RotationX + renderInfo.Transform.Rotation.X) * GameMath.DEG2RAD) .RotateY((float)(ap.RotationY + renderInfo.Transform.Rotation.Y) * GameMath.DEG2RAD) .RotateZ((float)(ap.RotationZ + renderInfo.Transform.Rotation.Z) * GameMath.DEG2RAD) .Translate(-(renderInfo.Transform.Origin.X), -(renderInfo.Transform.Origin.Y), -(renderInfo.Transform.Origin.Z)) ; if (isShadowPass) { rapi.CurrentActiveShader.BindTexture2D("tex2d", renderInfo.TextureId, 0); float[] mvpMat = Mat4f.Mul(ItemModelMat.Values, capi.Render.CurrentModelviewMatrix, ItemModelMat.Values); Mat4f.Mul(mvpMat, capi.Render.CurrentProjectionMatrix, mvpMat); capi.Render.CurrentActiveShader.UniformMatrix("mvpMatrix", mvpMat); capi.Render.CurrentActiveShader.Uniform("origin", new Vec3f()); } else { prog = rapi.StandardShader; prog.Use(); prog.WaterWave = 0; prog.Tex2D = renderInfo.TextureId; prog.RgbaTint = ColorUtil.WhiteArgbVec; BlockPos pos = entity.Pos.AsBlockPos; Vec4f lightrgbs = capi.World.BlockAccessor.GetLightRGBs(pos.X, pos.Y, pos.Z); int temp = (int)stack.Collectible.GetTemperature(capi.World, stack); float[] glowColor = ColorUtil.GetIncandescenceColorAsColor4f(temp); lightrgbs[0] += 2 * glowColor[0]; lightrgbs[1] += 2 * glowColor[1]; lightrgbs[2] += 2 * glowColor[2]; prog.ExtraGlow = GameMath.Clamp((temp - 500) / 3, 0, 255); prog.RgbaAmbientIn = rapi.AmbientColor; prog.RgbaLightIn = lightrgbs; prog.RgbaBlockIn = ColorUtil.WhiteArgbVec; prog.RgbaFogIn = rapi.FogColor; prog.FogMinIn = rapi.FogMin; prog.FogDensityIn = rapi.FogDensity; prog.ProjectionMatrix = rapi.CurrentProjectionMatrix; prog.ViewMatrix = rapi.CameraMatrixOriginf; prog.ModelMatrix = ItemModelMat.Values; } if (!renderInfo.CullFaces) { rapi.GlDisableCullFace(); } rapi.RenderMesh(renderInfo.ModelRef); if (!renderInfo.CullFaces) { rapi.GlEnableCullFace(); } if (!isShadowPass) { prog.Stop(); } }