|
Общие вопросы вопросы не попадающие ни в один из доступных разделов |
03.01.2011, 15:03
|
#16
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Не получается натянуть текстуру на террайн
Неплохо бы тогда показать весь код, иначе трудно предполагать.
|
(Offline)
|
|
04.01.2011, 12:59
|
#17
|
Нуждающийся
Регистрация: 23.09.2010
Сообщений: 54
Написано 8 полезных сообщений (для 26 пользователей)
|
Ответ: Не получается натянуть текстуру на террайн
Да, конечно, вот код где назначаются текстуры:
SplatPrototype[] test = new SplatPrototype[3]; float[,,] splatmapData; int Tw = terrain.terrainData.heightmapWidth - 1; splatmapData = terrain.terrainData.GetAlphamaps(0, 0, Tw, Tw); terrain.terrainData.alphamapResolution = Tw; //float[,,] splatmapData = new float[terrain.terrainData.alphamapWidth, terrain.terrainData.alphamapHeight, terrain.terrainData.alphamapLayers]; test[0] = new SplatPrototype(); test[0].texture = (Texture2D)Resources.Load("grass", typeof(Texture2D)); test[0].tileOffset = new Vector2(0, 0); test[0].tileSize = new Vector2(15, 15); test[1] = new SplatPrototype(); test[1].texture = (Texture2D)Resources.Load("Balmoral", typeof(Texture2D)); test[1].tileOffset = new Vector2(0, 0); test[1].tileSize = new Vector2(15, 15); test[1].texture.Apply(true); test[2] = new SplatPrototype(); test[2].texture = (Texture2D)Resources.Load("grydirt2", typeof(Texture2D)); test[2].tileOffset = new Vector2(0, 0); test[2].tileSize = new Vector2(15, 15); test[2].texture.Apply(true); terrain.terrainData.splatPrototypes = test;
а вот кусок, где пытаюсь назначить эти текстуры:
for(int y=0; y < terrain.terrainData.alphamapHeight; y++) { for(int x=0; x < terrain.terrainData.alphamapWidth; x++) { float height = terrain.terrainData.GetHeight(x,y); Vector3 splat = new Vector3(0,1,0); if (height > 10.0) { splat = Vector3.Lerp(splat, new Vector3(0,0,1), (height-0.5f)*2 ); } else { splat = Vector3.Lerp(splat, new Vector3(1,0,0), height*2 ); } splat.Normalize(); splatmapData[x, y, 0] = splat.x; splatmapData[x, y, 1] = splat.y; splatmapData[x, y, 2] = splat.z; } } terrain.terrainData.Flush();
Если нужно. могу выслать на мыло все куском.
|
(Offline)
|
|
04.01.2011, 18:43
|
#18
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Не получается натянуть текстуру на террайн
Возможно проблема в том что массив размером
int Tw = terrain.terrainData.heightmapWidth - 1;
а перебор идет по
for(int y=0; y < terrain.terrainData.alphamapHeight; y++) { for(int x=0; x < terrain.terrainData.alphamapWidth; x++) {
На какой строке ошибка? В посте 13 написано что она на 149 строке. Где эта строка?
|
(Offline)
|
|
04.01.2011, 20:31
|
#19
|
Нуждающийся
Регистрация: 23.09.2010
Сообщений: 54
Написано 8 полезных сообщений (для 26 пользователей)
|
Ответ: Не получается натянуть текстуру на террайн
ошибка бьет на строку: splatmapData[x, y, 0] = splat.x;
если есть время и возможность, могк сам проект сохоанить и отослать
|
(Offline)
|
|
04.01.2011, 22:31
|
#20
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Не получается натянуть текстуру на террайн
Ну ответ прост, x или y выходят за пределы массива splatmapData. Проверь его размерность. Выведи в дебаг индекс x и y при возникновении ошибки.
|
(Offline)
|
|
05.01.2011, 21:03
|
#21
|
Нуждающийся
Регистрация: 23.09.2010
Сообщений: 54
Написано 8 полезных сообщений (для 26 пользователей)
|
Ответ: Не получается натянуть текстуру на террайн
вот отладочная печать процесса:
alphamapHeight=512, alphamapWidth=512
alphamapLayers=3
splat=(0.0, 0.0, 1.0) ,x=0 ,y=0
и получается в самом начале цикла ошибка:
IndexOutOfRangeException: Array index is out of range.
(wrapper managed-to-managed) object:ElementAddr (object,int,int,int)
может мне выслать весь материал на мыло?
Вот тут вроде подробно все расписано и я сделал также, но опять фиаско
|
(Offline)
|
|
06.01.2011, 15:42
|
#22
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Не получается натянуть текстуру на террайн
Кидай в личку проект, посмотрим. Можно так же по ICQ или Skype.
UPD: проблема была в неверном порядке операций, РЕШЕНО.
Последний раз редактировалось pax, 06.01.2011 в 23:02.
|
(Offline)
|
|
07.01.2011, 13:12
|
#23
|
Нуждающийся
Регистрация: 23.09.2010
Сообщений: 54
Написано 8 полезных сообщений (для 26 пользователей)
|
Ответ: Не получается натянуть текстуру на террайн
Проблема решена, спасибо за это PAX'у.
Если кому будет интересно, проблема была банальна splatmapData была определенна до того как были назначены текстуры на террайн.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:32.
|