1.15.2 Modèle OBJ complétement sombre au rendu



  • Bonjour,
    je me suis récemment mis aux modèles .obj mais j'ai rencontré un problème quant au rendu, je n'arrive pas à comprendre si le problème pourrait venir du .mtl ou alors simplement du système que j'utilise pour afficher mes modèles.
    Voici ce que j'ai en jeu:
    2020-05-07_11.25.14.png
    Et voici mon code:

    package com.twiguinou.powersfa.client.registry;
    
    import com.mojang.blaze3d.matrix.MatrixStack;
    import com.mojang.blaze3d.vertex.IVertexBuilder;
    import com.twiguinou.powersfa.StringID;
    import com.twiguinou.powersfa.util.client.RendererUtil;
    import net.minecraft.client.renderer.Atlases;
    import net.minecraft.client.renderer.IRenderTypeBuffer;
    import net.minecraft.client.renderer.model.*;
    import net.minecraft.client.renderer.texture.NativeImage;
    import net.minecraft.client.renderer.texture.OverlayTexture;
    import net.minecraft.client.renderer.texture.TextureAtlasSprite;
    import net.minecraft.client.resources.data.AnimationMetadataSection;
    import net.minecraft.util.ResourceLocation;
    import net.minecraftforge.api.distmarker.Dist;
    import net.minecraftforge.api.distmarker.OnlyIn;
    import net.minecraftforge.client.model.IModelConfiguration;
    import net.minecraftforge.client.model.ModelLoader;
    import net.minecraftforge.client.model.data.EmptyModelData;
    import net.minecraftforge.client.model.obj.OBJLoader;
    import net.minecraftforge.client.model.obj.OBJModel;
    
    import javax.annotation.Nullable;
    import java.util.Random;
    
    public class AssociativeOBJModel {
    
        private final ResourceLocation location;
    
        @OnlyIn(Dist.CLIENT)
        private final OBJModel objModel;
    
        public AssociativeOBJModel(String label) {
            this.location = new ResourceLocation(StringID.ID, "models/customs/obj/" + label);
            this.objModel = OBJLoader.INSTANCE.loadModel(new OBJModel.ModelSettings(this.location, false, true, true, true, null));
        }
    
        @OnlyIn(Dist.CLIENT)
        public void render(MatrixStack matrix, IRenderTypeBuffer buffer, int light) {
            matrix.push();
            IBakedModel bakedModel = this.objModel.bake(new OBJModelConfiguration(this.location), ModelLoader.instance(), (material) -> new DummySprite(), ModelRotation.X0_Y0, null, this.location);
            IVertexBuilder builder = buffer.getBuffer(Atlases.getSolidBlockType());
            for(BakedQuad quad : bakedModel.getQuads(null, null, new Random(), EmptyModelData.INSTANCE)) {
                float[] colors = RendererUtil.decode(quad.getTintIndex());
                builder.addVertexData(matrix.getLast(), quad, colors[0], colors[1], colors[2], colors[3], light, OverlayTexture.NO_OVERLAY, true);
            }
            matrix.pop();
        }
    
        private static class DummySprite extends TextureAtlasSprite {
            protected DummySprite() {
                super(null, new Info(OBJModelConfiguration.TEXTURE, 1, 1, AnimationMetadataSection.EMPTY), 0, 1, 1, 0, 0, new NativeImage(1, 1, false));
            }
            @Override
            public float getInterpolatedU(double u) {
                return (float) u / 16;
            }
            @Override
            public float getInterpolatedV(double v) {
                return (float) v / 16;
            }
        }
    
        private static class OBJModelConfiguration implements IModelConfiguration {
            private static final ResourceLocation TEXTURE = new ResourceLocation(StringID.ID, "dummy");
            private final ResourceLocation modelLocation;
            public OBJModelConfiguration(ResourceLocation location) {
                this.modelLocation = location;
            }
            @Nullable
            @Override
            public IUnbakedModel getOwnerModel() {
                return null;
            }
            @Override
            public String getModelName() {
                return modelLocation.toString();
            }
            @Override
            public boolean isTexturePresent(String name) {
                return false;
            }
            @Override
            public Material resolveTexture(String name) {
                return new Material(TEXTURE, TEXTURE);
            }
            @Override
            public boolean isShadedInGui() {
                return true;
            }
            @Override
            public boolean isSideLit() {
                return true;
            }
            @Override
            public boolean useSmoothLighting() {
                return true;
            }
            @Override
            public ItemCameraTransforms getCameraTransforms() {
                return ItemCameraTransforms.DEFAULT;
            }
            @Override
            public IModelTransform getCombinedTransform() {
                return ModelRotation.X0_Y0;
            }
        }
    
    }
    


  • Bonjour,

    Petite question que je trouve importante, le rendu est sombre (mais avec les bonnes textures) ou noir (parce qu'il semble l'être) ?



  • Puisque il est complètement noir je ne peux pas trop déterminer si le rendu est trop sombre ou simplement dépourvu de couleur. En sachant que je n’ai pas de message d’erreur concernant l’accès à la texture que je veux appliquer.


Log in to reply