Текстурные координаты


Автор Сообщение

бывалый
Группа: Участники
Сообщений: 49
Добавлено: 27-11-2009 11:23
Как натянуть один материал на несколько кубов с разными размерами? Я знаю функцию MaterialSetTextureScale, но тогда придётся создавать много материалов для каждого объекта. Как по-другому это сделать?

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 28-11-2009 10:44
По-другому никак. Разве что вручную создать куб из отдельных плоскостей - им можно назначить разрешение полигональной сетки.

бывалый
Группа: Участники
Сообщений: 49
Добавлено: 28-11-2009 16:51
Я имею ввиду, что у меня, допустим, три куба с одной текстурой: 16x80x320, 160x80x16 и 16x80x16. Что, нужно для каждого создавать по шесть материалов?!
Если да, то сколько они будут занимать памяти? Текстура загружается один раз или много?
Приведите, пожалуйста, пример, как лучше всего это сделать.
В новой версии X3D надо сделать, чтобы текстурные координаты можно было настраивать не у материала, а у объекта.

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 28-11-2009 21:09
Я имею ввиду, что у меня, допустим, три куба с одной текстурой: 16x80x320, 160x80x16 и 16x80x16. Что, нужно для каждого создавать по шесть материалов?!


В случае со стандартными кубами - да. Если надо, чтобы был один материал на все кубы, то, как я уже говорил, лучше вместо стандартных кубов создать свои - из плоскостей. Плоскостям, в отличие от кубов, можно индивидуально назначить разрешение (количество квадов по горизонтали и вертикали), что позволит многократно повторить на них текстуру.

В новой версии X3D надо сделать, чтобы текстурные координаты можно было настраивать не у материала, а у объекта.

Текстурные координаты вообще как правило не настраиваются и к материалу не имеют отношения. У примитивов их изменить невозможно, а у моделей они загружаются из файла вместе с моделью. Функция MaterialSetTextureScale не имеет дела с текстурными координатами - она изменяет текстурную матрицу OpenGL.

бывалый
Группа: Участники
Сообщений: 49
Добавлено: 29-11-2009 10:57
У примитивов их изменить невозможно, а у моделей они загружаются из файла вместе с моделью.

Можно сделать в будущих версиях X3D, чтобы можно было изменять текстурные координаты? Кстати, в U3D это можно сделать, не увеличивая при этом количество полигонов.
Если я вместо примитивов буду использовать модели кубов это снизит на производительность? Если да то во сколько? Что быстрее: 6 плоскостей или модель куба? Намного ли 6 плоскостей медленнее чем куб-примитив? Можно ли плоскость разбить на дробное количество частей? Ведь текстура может повторяться, например, 7.5 раз на объекте.

Меня так сильно интересуют эти вопросы, потому что у меня есть собственный редактор карт для моей игры, которую я делал на U3D. Но у U3D не очень хорошая производительность, в отличие от X3D, и я решил перейти на X3D и приспособить его под мой собственный редактор карт, который создаёт все уровни из кубов разных размеров, с разными текстурными координатами и текстурами, и записывает это в текстовый файл. В U3D с текстурными координатами проблем не было, а здесь появились. Если я не смогу найти нормального способа, мне придётся либо отказаться от редактора, либо перейти обратно на U3D, чего мне уже не хочется.

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 29-11-2009 16:15
Можно сделать в будущих версиях X3D, чтобы можно было изменять текстурные координаты?

У моделей это теориетически возможно. У примитивов - нет, так как они обычно вшиты в стандартную библиотеку GLU, которая работает поверх OpenGL. Можно, конечно, создать собственные классы примитивов, но этим никто не занимается, потому что в играх все используют модели, а в демках сойдут и такие.

Если я вместо примитивов буду использовать модели кубов это снизит на производительность? Если да то во сколько? Что быстрее: 6 плоскостей или модель куба? Намного ли 6 плоскостей медленнее чем куб-примитив?

Заметное снижение производительности начнется, когда количество кубов перевалит за несколько сотен, так как для графа сцены, разумеется, лучше рендерить один объект, чем шесть (но в такой ситуации обычно используют octree для оптимизации, так что страшного ничего не случится). А вот OpenGL, а тем более видеокарте, абсолютно безразлично как рендерить куб. На низком уровне команд OpenGL этот куб все равно будет составлен из шести отдельных квадов.

Можно ли плоскость разбить на дробное количество частей? Ведь текстура может повторяться, например, 7.5 раз на объекте.

На дробное - нельзя. Как ты себе представляешь, например, 7.5 полигонов или 7.5 вершин?


Меня так сильно интересуют эти вопросы, потому что у меня есть собственный редактор карт для моей игры, которую я делал на U3D. Но у U3D не очень хорошая производительность, в отличие от X3D, и я решил перейти на X3D и приспособить его под мой собственный редактор карт

Семантическая разница между U3D и X3D настолько огромна, что лучше написать новый редактор, чем пытаться оптимизировать старый.

бывалый
Группа: Участники
Сообщений: 49
Добавлено: 30-11-2009 15:49
На дробное - нельзя. Как ты себе представляешь, например, 7.5 полигонов или 7.5 вершин?

Например, чтобы 8 вершина была в два раза ближе к 7, чем 6 и 7.
Ладно, я решил изучить "чистый" OpenGL. Может даже напишу свой движок. А если не получится, то попробую способ с моделями кубов.

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 30-11-2009 19:43
Ну что ж, удачи тебе.

 

Offtop.ru © 2003