Rotation d'une texture d'une face



  • Bonjour à tous,

    Je suis en train d'attaquer mon premier mod, après avoir suivi divers tutos dont ceux présent sur ce site, bien évidement.
    Je me heurte à mon premier soucis: la rotation d'une texture sur une face. En gros, j'ai des blocs d'asphalte avec diverses lignes peintes dessus:

    Comme vous pouvez le voir, j'ai besoin d'avoir une orientation à 90° (la ligne peinte sera toujours sur la face supérieure du bloc, je ne compte pas faire de blocs posés sur le côté). Le soucis, c'est que les tutos de rotation de blocs que j'ai vu sont bien pour faire des blocs style fours, citrouille etc mais dans mon cas, il faudrait que je tourne la texture de 90°…
    Vous allez me dire: "suffit de faire une seconde texture tournée", effectivement ça marcherait. Si je n'avais qu'un bloc, ok. Mais là j'ai 6 blocs ligne différents, ce qui ferait 12 textures, puis j'ai mes blocs de coins, 4 rotations pour les 6 lignes différentes, soit 24 nouvelles textures, puis j'aurai les flèches... bref, je vais multiplier mes textures à fond pour rien.
    J'ai regardé un peu comment fonctionnent les bûches orientables, ça utilise la class BlockRotatedPillar mais je n'ai pas trouvé comment Minecraft faisait tourner les textures (et mon bloc n'est pas comme les bûches, dont je ne peux pas étendre ma class à BlockRotatedPillar).

    J'ai aussi trouvé ceci: http://greyminecraftcoder.blogspot.com.au/2013/07/rendering-non-standard-blocks.html et http://greyminecraftcoder.blogspot.com.au/2013/08/the-tessellator.html mais je n'ai pas trouvé comment m'en servir (et le deuxième lien parle encore du terrain.png, donc pas trop à jour).

    J'aimerai vraiment optimiser mon mod et éviter d'avoir à tripler mes textures pour ça, j'espère réussir à avancer grâce à vous!

    J'en profite pour poser une autre question rapide: est-il possible de faire un bloc avec rotation (en fonction du regard du joueur) et sous-blocs en metadata? Par exemple utiliser 6 metadatas pour 6 blocs, et 6 metadatas pour la version tournée à 90°, afin de se passer des tileEntities?

    Merci d'avance pour votre aide!

    PS: je n'ai pas inclus de fichier class à mon post car c'est juste les class basiques qu'on créé en suivant les tutos de MFF.



  • Y'a déjà plusieurs mois, je me souviens avoir eu un problème similaire au tien, j'ai donc crée ce sujet, désormais résolu 😃
    J'espère que ça t'aidera 😉


  • Administrateurs

    @'Julot10085':

    Y'a déjà plusieurs mois, je me souviens avoir eu un problème similaire au tien, j'ai donc crée ce sujet, désormais résolu 😃
    J'espère que ça t'aidera 😉

    Sauf qu'ici on avait créé deux textures et c'est ce qu'il veut éviter. Du-coup faudrait voir avec les FlippedIcon.

    @'KillerMapper':

    J'en profite pour poser une autre question rapide: est-il possible de faire un bloc avec rotation (en fonction du regard du joueur) et sous-blocs en metadata? Par exemple utiliser 6 metadatas pour 6 blocs, et 6 metadatas pour la version tournée à 90°, afin de se passer des tileEntities?

    Oui c'est possible. Les dalles utilisent ce principe. Il est possible de mettre jusqu'à 8 dalles en metadata, le metadata 0 est utilisé pour la première dalle en bas, le metadata 8 pour cette même dalle mais placé en position haute.


  • Correcteurs

    J'ai fais des blocs de route également, méthode brute: une texture = un bloc.

    C'est surtout du temps et il faut bien classer ses blocs (par orientation). 
    Même avec des textures qui tournent (ligne pour un virage) comme tu veux faire c'est juste du temps et de la méthode.

    Si tu trouves plus rapide c'est toujours ça de gagné ^^



  • Oui j'avais justement trouvé ce sujet mais comme je l'ai dit, j'aimerai éviter de gonfler le poids de mon mod avec des dizaines de textures.

    J'ai tenté le FlippedIcon, j'ai pu faire un "miroir" de ma texture, ce qui peut me servir pour les lignes d'angle et les flèches par exemple, mais pas pour tourner de 90°. Dans le pire des cas, je pourrai déjà réduire le nombre de textures de moitié (c'est déjà ça).

    Je cherche toujours à savoir comment est tournée la texture dans les blocs comme les bûches, les bottes de foin ou les piliers de quartz. Ça utilise la classe "BlockRotatedPillar", puis ça doit partir dans le code du rendu avec le getRenderType()… et là je me noie dans le code 😛

    Edit: J'ai pu avancer avec l'aide de membres du forum minecraftforge.net. À l'aide d'un ISBRH, il est possible de faire tourner des textures grâce aux fonctions uvRotate{Direction} (ce qui rejoint les 2 pages que j'ai mis en premier post). J'ai donc créé un render qui rend un bloc avec la texture tournée avec succès. Il ne me reste plus qu'à adapter ce rendu aux metadatas utilisés pour la rotation (j'espère y arriver ^^).

    Après mon dernier défi sera de faire plusieurs blocs das un ID, avec rotation + rendu ISBRH, le tout en utilisant que les metadatas et non le tile entity. Une fois ceci fait, une grosse partie de mon mod sera fonctionnel 🙂



  • Oui j'avais justement trouvé ce sujet mais comme je l'ai dit, j'aimerai éviter de gonfler le poids de mon mod avec des dizaines de textures.

    J'ai tenté le FlippedIcon, j'ai pu faire un "miroir" de ma texture, ce qui peut me servir pour les lignes d'angle et les flèches par exemple, mais pas pour tourner de 90°. Dans le pire des cas, je pourrai déjà réduire le nombre de textures de moitié (c'est déjà ça).

    Je cherche toujours à savoir comment est tournée la texture dans les blocs comme les bûches, les bottes de foin ou les piliers de quartz. Ça utilise la classe "BlockRotatedPillar", puis ça doit partir dans le code du rendu avec le getRenderType()… et là je me noie dans le code 😛

    Edit: J'ai pu avancer avec l'aide de membres du forum minecraftforge.net. À l'aide d'un ISBRH, il est possible de faire tourner des textures grâce aux fonctions uvRotate{Direction} (ce qui rejoint les 2 pages que j'ai mis en premier post). J'ai donc créé un render qui rend un bloc avec la texture tournée avec succès. Il ne me reste plus qu'à adapter ce rendu aux metadatas utilisés pour la rotation (j'espère y arriver ^^).

    Après mon dernier défi sera de faire plusieurs blocs das un ID, avec rotation + rendu ISBRH, le tout en utilisant que les metadatas et non le tile entity. Une fois ceci fait, une grosse partie de mon mod sera fonctionnel 🙂

    Edit 2: Bon bah une simple condition avec [size=x-smallworld.getBlockMetadata(x, y, z)] dans le renderWorldBlock de l'ISBRH a suffit visiblement 😛 Du coup j'ai mon bloc qui tourne avec juste une texture!



  • Double post rapide je sais, c'est juste pour prévenir que j'ai réglé le problème.

    J'ai désormais des blocs avec metadata, rotation et texture unique orientable le tout sans tileEntity 🙂

    Si certains veulent voir le code, j'ai setup un Github pour mon mod: https://github.com/KillerMapper/roadstuff
    Attention, c'est encore en gros bazar, j'ai pas mal de fichiers pour tester des trucs encore présents, je vais clean ça plus tard. Le code concerné par ce topic est dans la classe TestRotateBlock, utilisant la classe RenderAsphaltLines.

    Merci pour votre aide!



  • Merci pour ton partage surtout 😃
    Sa fait avancer la communauté et sa évitera d'autres nombreux postes du même genre 🙂