Как сделать объединяющуюся текстуру?

Версия Minecraft
1.7.10
5,018
47
783
Народ, все наверно видели, как обьединяются текстуры во многих модах. (Типо ставишь блок, рядом еще один, и текстуры объединяются). Точно также стекло в OptiFine делается. Конечно, это все понятно, что при условии на если с этой стороны стоит такой блок, заменить текстуру на другую. А вот как конкретно на одной конкретной стороне указать, что нужно менять текстуру? 
Обобщу вопрос как второй - Как это сделать?
 
471
5
Ну ёпт, ты же сам написал
это все понятно, что при условии на если с этой стороны стоит такой блок, заменить текстуру на другую

Как я понимаю, делается 10 различных текстур (9 текстур у тебя на скрине и 10ая та, когда блок стоит один). И "подбирается" одна из текстур, в зависимости от того с чем и с какой стороны соприкасается блок.
 
5,018
47
783
Drovosek написал(а):
Ну ёпт, ты же сам написал
это все понятно, что при условии на если с этой стороны стоит такой блок, заменить текстуру на другую

Как я понимаю, делается 10 различных текстур (9 текстур у тебя на скрине и 10ая та, когда блок стоит один). И "подбирается" одна из текстур, в зависимости от того с чем и с какой стороны соприкасается блок.

На одну сторону приходится 4 текстуры в разные стороны, потом еще угловые 4 штуки, потом еще без трех 4 штуки, и одна с ребрами и одна без ребер. Итого 12+2=14 текстур надо на каждую сторону. Это хорошо, если блок одинаковый. можно всего 14 текстур иметь , а если разносторонний? Кошмар))) 
Вопрос все еще остается открытым!

Вот


Ну вот. Я понимаю как. Мне именно код нужен(ну или толчок к верному пути)
 
250
12
24
Можно сделать так:
1 текстура(без граней)
4 грани
Рендерить по условию.


Так в оптифайне и сделано.
{Текстура стекла рендерится без граней. А потом уже по условию дорендериваются они-же}
 
3,005
192
592
Optifine большой мод, копаться долго. Но все же, есть и в других модах эти "соединения".
Mod name: Ender IO. Block: Reservoir. "Соединяет" текстуру, как на скрине.
Mod name: Ender IO. Block: Telepad Block. "Соединяет" текстуру, только если он 3х1х3.
Mod name: Ender IO. Block: Photovoltaic Cell. "Соединят" текстуру только по 1 высоте. (вроде как)
Mod name: Ender IO. Block: (any) Capacitor Bank. "Соединяет" текстуру, как на скрине.
Mod name: Chisel. Block: Laboratory Block (with face). "Соединяет" тексту, только по 1 высоте.
Mod name: Extreme Reactors. Block: Reactor Fuel Rod. "Соединяет" текстуру, только в верх. (вроде как)
Mod name: Extreme Reactors. Block: Reactor Glass. "Соединяет" текстуру, как на скрине.
Mod name: Tinkers' Construct. Block: Clear Glass. "Соединяет" текстуру, как на скрине.
Это с 1.10.2. (Если можно.. Код не только на 1.7.10, но и на 1.10.2)


RinKirin написал(а):
1 текстура(без граней)
4 грани

Сам блок, как блок.
4 с углом.
4 без угла, просто бок.
1 центр.
Без этого не как не обойтись, если текстура будет более, чем 2х2х2.
 
250
12
24
Может я чего-то не понимаю? Но мне кажется ты не прав.
Просто сделать по стандарту центр и 4 грани, а потом их наложением на блок рендерить
 
3,005
192
592
RinKirin написал(а):
Может я чего-то не понимаю? Но мне кажется ты не прав.
Просто сделать по стандарту центр и 4 грани, а потом их наложением на блок рендерить

Окей, текстура 3х1х3, ты должен сделать центр, 4 угла, 4 боковины, что бы получилась целая текстура. Как ты ее собираешь делать из центра и 4х граней? Если делать наложением - они будут мерцать. (точно не знаю)
 
250
12
24
В данном случае не должны. 
Мерцать начинает когда 2 !разные! текстуры будет, а в данном случае углы у граней будут повторяться.
Или если криво наложить, тоже будут. Я не проверял, но если логически то так. Если не логически, то днем напишу может быть. аганапишуконечно 
 
3,005
192
592
RinKirin написал(а):
В данном случае не должны.

Может и нет. Я не проверял, но видел в других играх.
Даже и если они будут нормально соединяться - то факт в том, что тебе нужно будет указать не просто текстуру - а написать не такой уж и большой, но код, который будет накладывать тебе текстуру и тд.
 
5,018
47
783
Ваша дискуссия конечно очень интересна, но все таки что насчет кода? :)
 
3,005
192
592
Maxik001 написал(а):
Ваша дискуссия конечно очень интересна, но все таки что насчет кода? :)

Посмотри тот лист блоков, может есть не такие и жирные коды. По идеи у тинкера не такой большой код, ибо он не где не используется.
 
471
5
Maxik001 написал(а):
Ну вот. Я понимаю как. Мне именно код нужен(ну или толчок к верному пути)

Такой толчок подойдёт? :D

awsome_face_toilet.jpg
 
608
5
15
http://forum.mcmodding.ru/%D0%A2%D0%B5%D0%BC%D0%B0-%D0%9E%D1%82%D1%80%D0%B5%D0%BD%D0%B4%D0%B5%D1%80%D0%B8%D1%82%D1%8C-%D1%82%D1%80%D1%83%D0%B1%D1%83-%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4?highlight=%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%B0

Держи, там код, который тебе поможет. Итого тебе надо 4 текстуры (1 со всеми рёбрами, 1 с тремя, 1 с двумя и одна с одним ребром), а дальше вертишь из условий.
Будет конечно муторно, зато не 14 текстур :D
 
5,018
47
783
svk2140 написал(а):
http://forum.mcmodding.ru/%D0%A2%D0%B5%D0%BC%D0%B0-%D0%9E%D1%82%D1%80%D0%B5%D0%BD%D0%B4%D0%B5%D1%80%D0%B8%D1%82%D1%8C-%D1%82%D1%80%D1%83%D0%B1%D1%83-%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4?highlight=%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%B0

Держи, там код, который тебе поможет. Итого тебе надо 4 текстуры (1 со всеми рёбрами, 1 с тремя, 1 с двумя и одна с одним ребром), а дальше вертишь из условий.
Будет конечно муторно, зато не 14 текстур :D

Из условий?? Смотри сейчас что происходит, и это я еще не доделал.
Код:
 if (world.getBlock(x, y, z + 1) == BlocksSA.polishedMarsStone && world.getBlock(x, y, z - 1) == BlocksSA.polishedMarsStone ){
 if(side == 0) return this.iconDownW2;
}else
if (world.getBlock(x - 1, y, z) == BlocksSA.polishedMarsStone && world.getBlock(x + 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 0) return this.iconDownW1;
}else
if (world.getBlock(x - 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 0) return this.iconDown1;
}else
if (world.getBlock(x + 1, y, z) == BlocksSA.polishedMarsStone){
if(side == 0) return this.iconDown3;
}else
if (world.getBlock(x, y, z - 1) == BlocksSA.polishedMarsStone){
if(side == 0) return this.iconDown2;
}else
if (world.getBlock(x, y, z + 1) == BlocksSA.polishedMarsStone){
if(side == 0) return this.iconDown4;
}else
if (world.getBlock(x - 1, y, z) == BlocksSA.polishedMarsStone && world.getBlock(x, y, z - 1) == BlocksSA.polishedMarsStone){
if(side == 0) return this.iconDownA3;
}else

if(side == 0) return this.iconDown;
if(side == 1) return this.iconTop;
if(side == 2) return this.iconBack;
if(side == 3) return this.iconLeft;
if(side == 4) return this.iconRight;
if(side == 5) return this.iconFront;
return this.iconBack;
У тебя там настолько муторно, что нажать в фотошопе кнопку "повернуть на 90 градусов" гораздо проще)))
 
3,005
192
592
https://github.com/SlimeKnights/TinkersConstruct/blob/1.7.10/src/main/java/tconstruct/smeltery/blocks/GlassBlockConnected.java

Метод getConnectedBlockTexture.
 
5,018
47
783
Doc написал(а):
https://github.com/SlimeKnights/TinkersConstruct/blob/1.7.10/src/main/java/tconstruct/smeltery/blocks/GlassBlockConnected.java

Метод getConnectedBlockTexture.

Это надо тинкеровскую библиотеку подкючать. Я уж как нибудь без тинкера) Да я собственно, почти сделал уже
А стоп. Во я тупой. Можно же украсть!:)
Точнее, не украсть, а воспользоваться халявой!
 
5,018
47
783
Doc написал(а):
Ну так-то да, я для этого и скинул ...

Я посмотрел. Какая то дикая дичь. Мой код выходит проще и меньше....
Походу тинкерс какие то извращенцы кода писали. :)
 
2,505
81
397
Maxik001 написал(а):
Doc написал(а):
Ну так-то да, я для этого и скинул ...

Я посмотрел. Какая то дикая дичь. Мой код выходит проще и меньше....
Походу тинкерс какие то извращенцы кода писали. :)
Покажешь?
 
Сверху