2013-04-03 4 views
3

Мое приложение для заливки объемного луча в WebGL почти закончено. Но я нашел проблему. Мне нужно смоделировать 3D-текстуру с помощью 2D-текстуры. Это не проблема. Я создаю огромную текстуру из маленьких кусочков. Размеры огромной текстуры составляют около 4096x4096 пикселей. Проблема в том, что в некоторых примерах (это зависит от количества срезов) создается sth. как на изображении ниже (я заполнил огромную текстуру до белого, чтобы фрагмент стал более заметным).Текстура не работает (вероятно)

Fragment in image - cube should be only white without stripes

Я знаю, что кол-во полос зависит от NUM строк в огромной текстуры. Я создаю эту текстуру около 4096x4096px (но не совсем). Это может быть 4080x4060 и т. Д. Я думаю, проблема в том, что Three.js загружает мою текстуру в gpu, но не масштабирует ее до 4096x4096. Так что я читаю черный фрагмент черного цвета на границе текстуры, потому что webgl работает только с квадратные текстуры (512x512, 1024x1024 ... и т. д.). Это вызвало появление черных полос в изображении.

Проблема в том, что мое приложение Three.js не работает с WebGL Inspector..так я не уверен.

Любая идея, как исправить это?

Спасибо.

Томаш

EDIT:

Хорошо, я нашел problem..and "решение" ... но техника его подводит решение работа хорошо. У меня есть 2 набора данных. Все в порядке, вторая по-прежнему та же ошибка.

2 варианта кода (каждый из них прекрасно работает для одного набора данных, но не для второй):

Первый)

dx = mod(slice, numColsInTexture)/numColsInTexture; 
dy = 1.0 - (floor(slice/numColsInTexture)/numRowsInTexture); 

Второй)

dx = 1.0 - (mod(slice, numColsInTexture)/numColsInTexture); 
dy = (floor(slice/numColsInTexture)/numRowsInTexture); 

Я действительно не знаю, , почему он не работает для обоих наборов данных ... Я попытался свалить GPU (инспектор WebGL). Оба текстуры загружаются на GPU (одинаковая ориентация, одинаковые размеры). Все одинаково.

Пожалуйста, помогите мне .... спасибо.

+0

Я знаю, что это старый пост, но вы заработали его правильно? Возможно ли ваше приложение где-нибудь случайно? Мне бы очень хотелось посмотреть. Лучший – Nicolas

+0

Привет, вы можете видеть его там: https://www.youtube.com/watch?v=tVCJUmnxvIs – Xrew

+0

Приятный материал! Это выглядит очень хорошо! Является ли код открытым исходным кодом? И если да, то с ним хорошо? – Nicolas

ответ

0

Являются ли ваши фильтры MIN и MAX вашей текстуры установленными на БЛИЖАЙШИЕ? И ваш WRAP [ST] установлен в CLAMP_TO_EDGE?

+0

Да, это: threeSrcTexture.magFilter = THREE.NearestFilter; threeSrcTexture.minFilter = THREE.NearestFilter; threeSrcTexture.wrapS = THREE.ClampToEdgeWrapping; threeSrcTexture.wrapT = THREE.ClampToEdgeWrapping; threeSrcTexture.needsUpdate = true; Ошибка все еще такая же ... – Xrew

+0

Это будет идеально, если она масштабирует мою текстуру до идеальных размеров. Я думаю, что это не волнует, если отношение текстуры будет изменено. – Xrew

+0

И что произойдет, если вы точно используете текстуру 4096x4096. – gaitat