forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Текстуирование растянутых примитивов. (http://forum.boolean.name/showthread.php?t=5812)

DEGABB 27.02.2008 01:56

Текстуирование растянутых примитивов.
 
Как правильно натягивать текстуру на простой параллелепипед (кубик растянутый ScaleEntity по одной из проекции)?
Пример:
Нужно сделать простую кубическую стену.
Когда делаешь стену из стандартных кубиков, расположенных чётко друг к дружку, то при движении камеры, их границы немного шевелятся (на 1 пиксел).
Глупо.
Понимаю, что стена должна быть цельной.

border=CreateCube();Создаю куб
border_tex = LoadTexture("Wall.JPG")
ScaleEntity border,1,1,20; растягиваю куб по оси Z в 20 раз
EntityTexture border,border_tex; одеваю получившийся параллелепипед в текстуру.

В итоге:
торцы у него текстуированы правильно, а вот текстура на боках (которые растянуты) тоже растянута :(
И не важно, текстуировать ДО или ПОСЛЕ растяжения куба. Результат один.

И ещё:
опишите подробно, как правильно пользоваться командой
TextureCoords texture,coords
и что она даёт вообще?

И что означают значения 16 и 32 параметра flags в команде
CreateTexture ( width,height[,flags][,frames] )

Я так понял они ограничивают текстуру по координатам U и V.
Это только лишь для того, чтобы вырезать из картинки кусочек U на V для текстуры или это как-то может помочь моему предыдущему вопросу?

Заранее спасибо.

jimon 27.02.2008 08:40

Ответ: Текстуирование растянутых примитивов.
 
ScaleTexture texture,u_scale#,v_scale#
поиграйся со значениями < 1, конкретнее u_scale# = 1 / 20
или v_scale :) играйся в общем

про 16 и 32 флаги вот :
Цитата:

16: Clamp u - Any part of a texture that lies outsides the U coordinates of 0-1 will not be drawn. Prevents texture-wrapping.

32: Clamp v - Any part of a texture that lies outsides the v coordinates of 0-1 will not be drawn. Prevents texture-wrapping.
толком не понял ... кто-то другой ответит :)
по идее банально обрезает текстуру по текстурным координатам

Цитата:

TextureCoords texture,coords

Parameters:
texture - name of texture
coords -
0: UV coordinates are from first UV set in vertices (default)
1: UV coordinates are from second UV set in vertices
Description:
Sets the texture coordinate mode for a texture.

This determines where the UV values used to look up a texture come from.
это какой-то метод текстурирования, не уверен (никогда не юзал команду)
но возможно она инвертирует текстуру, или меняет набор UV координат из вершин (?)

HolyDel 27.02.2008 11:01

Ответ: Текстуирование растянутых примитивов.
 
TextureCoords
у вершины может быть два набора текстурных координат. эта команда определяет какой из наборов использовать. нужно для лайтмап.

тебе нужно скалить текстуру, Джимон уже написал.

DEGABB 29.02.2008 01:34

Ответ: Текстуирование растянутых примитивов.
 
Цитата:

Сообщение от HolyDel (Сообщение 78166)
TextureCoords
у вершины может быть два набора текстурных координат. эта команда определяет какой из наборов использовать. нужно для лайтмап.

тебе нужно скалить текстуру, Джимон уже написал.

Объясните тогда как скалить текстуру, если 1/2, 1/10, 1/100 коэффициенты приводят её к ужасно одинаково-растянутому виду. А увеличивать текстуру - будут видны её пикселы (например кирпичи растянутся до не мыслимых размеров).

Может есть другой способ создать стену размером 20,1,1 с квадратной текстурой?
Вариант с загрузкой сделанной заранее модели исключён.

Неужели всегда, когда объект нестандартного размера, текстура тоже растягивается?
Как ЕЁ размер зафиксировать?

tormoz 29.02.2008 01:56

Ответ: Текстуирование растянутых примитивов.
 
Да что сложного то ?
ScaleTexture texture, 0.05,1
Вот тебе в 20 раз по Х

HolyDel 29.02.2008 11:05

Ответ: Текстуирование растянутых примитивов.
 
Цитата:

Как ЕЁ размер зафиксировать?
Никак.

moka 29.02.2008 11:44

Ответ: Текстуирование растянутых примитивов.
 
Смотри, модель состоит из вершин и трианглов. Так вот информация о текстурах хранится в вершинах. UVW - текстурные коорлдинаты. Каждая вершина содержит эту инфу. Текстура слева направо вымеряется не по пикселям, а от 0 до 1.0. И таким образом, когда масштабируешь текстуру, то при рендере, все текстурные координаты умножаются на скейл.

DEGABB 03.03.2008 03:40

Ответ: Текстуирование растянутых примитивов.
 
Цитата:

Сообщение от MoKa (Сообщение 78353)
Смотри, модель состоит из вершин и трианглов. Так вот информация о текстурах хранится в вершинах. UVW - текстурные коорлдинаты. Каждая вершина содержит эту инфу. Текстура слева направо вымеряется не по пикселям, а от 0 до 1.0. И таким образом, когда масштабируешь текстуру, то при рендере, все текстурные координаты умножаются на скейл.

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

Придётся всё же создавать модель во внешнем редакторе?

Но как же быть, когда стена в игре от уровня к уровню меняет свою длину (размеры уровня разные)? Кстати, стена играет роль "забора", который определяет границы уровня.

jimon 03.03.2008 08:53

Ответ: Текстуирование растянутых примитивов.
 
DEGABB
тебе же написали что каждая вершина имеет свои текстурные координаты
тоесть можно текстурировать отдельно "стороны" куба
если повозится правда :/

FDsagizi 03.03.2008 10:03

Ответ: Текстуирование растянутых примитивов.
 
3Д мах

HolyDel 03.03.2008 11:10

Ответ: Текстуирование растянутых примитивов.
 
DEGABB, лучше эту стену делать самостоятельно (прям в блице, через AddVertex, AddTriangle)


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot