Skip to content

Commit

Permalink
glossy texture MH, Fresnel
Browse files Browse the repository at this point in the history
  • Loading branch information
dumann089 authored and Rushmead committed Feb 10, 2025
1 parent edd8bfe commit a76ca08
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,23 @@
import com.mojang.math.Axis;
import dev.imabad.theatrical.TheatricalExpectPlatform;
import dev.imabad.theatrical.blockentities.light.FresnelBlockEntity;
import dev.imabad.theatrical.blockentities.light.MovingLightBlockEntity;
import dev.imabad.theatrical.blocks.HangableBlock;
import dev.imabad.theatrical.client.LazyRenderers;
import dev.imabad.theatrical.client.TheatricalRenderTypes;
import net.minecraft.client.Camera;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.core.Direction;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.Vec3;

import java.util.Optional;

import org.joml.Matrix3f;
import org.joml.Matrix4f;

public class FresnelRenderer extends FixtureRenderer<FresnelBlockEntity> {
private BakedModel cachedPanModel, cachedTiltModel, cachedStaticModel;
public FresnelRenderer(BlockEntityRendererProvider.Context context) {
Expand Down Expand Up @@ -92,6 +101,41 @@ public void renderModel(FresnelBlockEntity blockEntity, PoseStack poseStack, Ver
minecraftRenderModel(poseStack, vertexConsumer, blockState, cachedTiltModel, packedLight, packedOverlay);
//#endregion
}
@Override
public void beforeRenderBeam(FresnelBlockEntity blockEntity, PoseStack poseStack, VertexConsumer vertexConsumer, MultiBufferSource multiBufferSource, Direction facing, float partialTicks, boolean isFlipped, BlockState blockstate, boolean isHanging, int packedLight, int packedOverlay) {
if(blockEntity.getIntensity() > 0){
LazyRenderers.addLazyRender(new LazyRenderers.LazyRenderer() {
@Override
public void render(MultiBufferSource.BufferSource bufferSource, PoseStack poseStack, Camera camera, float partialTick) {
poseStack.pushPose();
Vec3 offset = Vec3.atLowerCornerOf(blockEntity.getBlockPos()).subtract(camera.getPosition());
poseStack.translate(offset.x, offset.y, offset.z);
preparePoseStack(blockEntity, poseStack, facing, partialTick, isFlipped, blockstate, isHanging);
VertexConsumer beamConsumer = multiBufferSource.getBuffer(TheatricalRenderTypes.BEAM);
// poseStack.translate(blockEntity.getFixture().getBeamStartPosition()[0], blockEntity.getFixture().getBeamStartPosition()[1], blockEntity.getFixture().getBeamStartPosition()[2]);
float intensity = (blockEntity.getPrevIntensity() + ((blockEntity.getIntensity()) - blockEntity.getPrevIntensity()) * partialTicks);
int color = blockEntity.getColour();
int r = (color >> 16) & 0xFF;
int g = (color >> 8) & 0xFF;
int b = color & 0xFF;
int a = (int) (((float) ((intensity * 1) / 255f)) * 255);
poseStack.translate(0, -0.25f, 0.05f);
Matrix4f m = poseStack.last().pose();
Matrix3f normal = poseStack.last().normal();
addVertex(beamConsumer, m, normal, r, g, b, a, 0.34375f, 0.65625f , 0f);
addVertex(beamConsumer, m, normal, r, g, b, a, 0.65625f, 0.65625f, 0f);
addVertex(beamConsumer, m, normal, r, g, b, a, 0.65625f, 0.34375f,0f);
addVertex(beamConsumer, m, normal, r, g, b, a,0.34375f, 0.34375f, 0f);
poseStack.popPose();
}

@Override
public Vec3 getPos(float partialTick) {
return blockEntity.getBlockPos().getCenter();
}
});
}
}

@Override
public void preparePoseStack(FresnelBlockEntity blockEntity, PoseStack poseStack, Direction facing, float partialTicks, boolean isFlipped, BlockState blockState, boolean isHanging) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,24 @@
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Axis;
import dev.imabad.theatrical.TheatricalExpectPlatform;
import dev.imabad.theatrical.blockentities.light.LEDPanelBlockEntity;
import dev.imabad.theatrical.blockentities.light.MovingLightBlockEntity;
import dev.imabad.theatrical.blocks.HangableBlock;
import dev.imabad.theatrical.client.LazyRenderers;
import dev.imabad.theatrical.client.TheatricalRenderTypes;
import net.minecraft.client.Camera;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.core.Direction;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.Vec3;

import java.util.Optional;

import org.joml.Matrix3f;
import org.joml.Matrix4f;

public class MovingLightRenderer extends FixtureRenderer<MovingLightBlockEntity> {
private BakedModel cachedPanModel, cachedTiltModel, cachedStaticModel;

Expand Down Expand Up @@ -101,6 +110,41 @@ public void renderModel(MovingLightBlockEntity blockEntity, PoseStack poseStack,
minecraftRenderModel(poseStack, vertexConsumer, blockState, cachedTiltModel, packedLight, packedOverlay);
//#endregion
}
@Override
public void beforeRenderBeam(MovingLightBlockEntity blockEntity, PoseStack poseStack, VertexConsumer vertexConsumer, MultiBufferSource multiBufferSource, Direction facing, float partialTicks, boolean isFlipped, BlockState blockstate, boolean isHanging, int packedLight, int packedOverlay) {
if(blockEntity.getIntensity() > 0){
LazyRenderers.addLazyRender(new LazyRenderers.LazyRenderer() {
@Override
public void render(MultiBufferSource.BufferSource bufferSource, PoseStack poseStack, Camera camera, float partialTick) {
poseStack.pushPose();
Vec3 offset = Vec3.atLowerCornerOf(blockEntity.getBlockPos()).subtract(camera.getPosition());
poseStack.translate(offset.x, offset.y, offset.z);
preparePoseStack(blockEntity, poseStack, facing, partialTick, isFlipped, blockstate, isHanging);
VertexConsumer beamConsumer = multiBufferSource.getBuffer(TheatricalRenderTypes.BEAM);
// poseStack.translate(blockEntity.getFixture().getBeamStartPosition()[0], blockEntity.getFixture().getBeamStartPosition()[1], blockEntity.getFixture().getBeamStartPosition()[2]);
float intensity = (blockEntity.getPrevIntensity() + ((blockEntity.getIntensity()) - blockEntity.getPrevIntensity()) * partialTicks);
int color = blockEntity.getColour();
int r = (color >> 16) & 0xFF;
int g = (color >> 8) & 0xFF;
int b = color & 0xFF;
int a = (int) (((float) ((intensity * 1) / 255f)) * 255);
poseStack.translate(0, 0f, 0.123f);
Matrix4f m = poseStack.last().pose();
Matrix3f normal = poseStack.last().normal();
addVertex(beamConsumer, m, normal, r, g, b, a, 0.375f, 0.625f , 0f);
addVertex(beamConsumer, m, normal, r, g, b, a, 0.625f, 0.625f, 0f);
addVertex(beamConsumer, m, normal, r, g, b, a, 0.625f, 0.375f,0f);
addVertex(beamConsumer, m, normal, r, g, b, a,0.375f, 0.375f, 0f);
poseStack.popPose();
}

@Override
public Vec3 getPos(float partialTick) {
return blockEntity.getBlockPos().getCenter();
}
});
}
}

@Override
public void preparePoseStack(MovingLightBlockEntity blockEntity, PoseStack poseStack, Direction facing, float partialTicks, boolean isFlipped, BlockState blockState, boolean isHanging) {
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit a76ca08

Please sign in to comment.