Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   В Away3D текстура растягивается, вместо того, чтобы повторяться (http://www.flasher.ru/forum/showthread.php?t=173750)

Parez 10.01.2012 20:30

В Away3D текстура растягивается, вместо того, чтобы повторяться
 
Сегодня решил начать использовать Away3D в своём проекте и столкнулся с проблемой. Когда я создаю объект Plane с текстурой, которая должна повторяться (это указано при инициализации текстуры), текстура всё равно растягивается по размеру объекта Plane.
Вот код:
Код AS3:

var floorMaterial:BitmapMaterial = new BitmapMaterial(floorTexture,true,true,true);
var plane:Plane = new Plane();
plane.material = floorMaterial;
plane.segmentsW = pathWidth/10;
plane.segmentsH = pathWidth/10;
plane.width = pathWidth;
plane.height = pathWidth;
view.scene.addChild(plane);


Dima_DPE 11.01.2012 03:07

Все правильно, у плейна координаты текстуры идут от 0 до 1, от одного края к другому и ему ничего повторять и не надо, чтобы вызвать повторения, надо эти самые координаты изменить. Попробуйте, что нибуть типа

plane.geometry.scaleUV(3, 3); // это по идее заставит вашу текстуру 3 раза повторится

Parez 12.01.2012 17:20

Dima_DPE, в новых версиях метод scaleUV имеет только один параметр scale:Number. Это очень странно и раздражает.

Dima_DPE 12.01.2012 18:19

Чтото глядя сюда https://raw.github.com/profelis/away...se/Geometry.as я вижу именно scaleUV, а это последняя версия Geometry из master ветки и отдельно scale, но это уже для масштабирования непосредственно геометрии, а не координат текстур.

Или идите напрямую к subGeometries и меняйте там. https://raw.github.com/profelis/away...SubGeometry.as

Parez 12.01.2012 20:17

Dima_DPE, да, вы правы. Видимо у меня была не последняя версия. Теперь скачал последнюю с github и всё нормально. Кстати, вы не знаете, как задать разные scaleUV для разных поверхностей куба или другой фигуры?

Dima_DPE 12.01.2012 21:24

Цитата:

Сообщение от Parez (Сообщение 1056406)
Кстати, вы не знаете, как задать разные scaleUV для разных поверхностей куба или другой фигуры?

Самый простой вариант это сделать свой куб и добавив ему нужный функционал. Я бы посоветовал взять стандартный примитив куб и посмотреть в нем метоб buildGeometry или чтото в этом роде. И в месте где создаются uv координаты попробовать пошаманить :)

Parez 12.01.2012 21:44

А с классом LinearExtrude дело обстоит так же?

Dima_DPE 12.01.2012 21:46

Не, buildUVs надо смотреть по всей видимости.

Добавлено через 7 минут
Цитата:

Сообщение от Parez (Сообщение 1056418)
А с классом LinearExtrude дело обстоит так же?

LinearExtrude хоть сам и использую, но сильно его не люблю. В других экслудерах можно передать дополнительные масштабы для uv координат, а в нем нельзя. Так что, тут снова scaleUV ручками :) Для постоения стен мне пришлось каждую стену сделать отдельно иначе там вообще с uv не разобраться и "обои" на стены красиво не наложить.

По идее если у вас не сложная геометрия и вы в состоянии сами расчитать им координаты вершин и uv координаты, то может стоит самому собрать меш используя MeshHelper.build().

Parez 12.01.2012 22:17

Цитата:

Для постоения стен мне пришлось каждую стену сделать отдельно иначе там вообще с uv не разобраться и "обои" на стены красиво не наложить.
Я вот тут у них на форуме щас примерно тот же вопрос задал. Мне админ всё советует всё-таки использовать LinearExtrude, и похоже предлагает делать стены блоками. Только я не совсем понимаю, как совместить LinearExtrude с блочностью...
Вот что написал админ:
Цитата:

Parez, again, if you define your segments with all same length, like if your maze is defined on a grid, you do not even need repeat, Linearextrude will do it for you, if you set coverAll boolean to false… then using seamless square map, it will look marvelous. no distort, no stretch, a maze ing
Я просто особо раньше с 3D дела не имел, поэтому плохо понимаю что к чему..

Dima_DPE 12.01.2012 22:27

Цитата:

Сообщение от Parez (Сообщение 1056427)
Я просто особо раньше с 3D дела не имел, поэтому плохо понимаю что к чему..

Ну вот он и советует не использовать coverAll, т.е. coverAll=false и посмотреть на результат, он убеждает что все будет смотреться пучком. Возможно теперь именно так. Я бы именно так сначала и попробовал сделать.

Но раньше я делал каждую стену отдельно этим же экструдером и отдельно масштабировал uv координаты в зависимости от длины стены. Выглядело это примерно так: (год писал с головы и многое упростил)

Код AS3:

for (i=0; i < n; i++)
{
 wall = buildWall(start[i], end[i], bmpTexture); // делаем стену от начальной точки до конечной
                                                              // и с текстурой
 wall.geometry.scaleUV(wallLength(start[[i], end[i]) / bmpTexture.width, wallHeight / bmpTexture.height);
}



Часовой пояс GMT +4, время: 00:38.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.