158 / 144 / 14
Регистрация: 03.02.2012
Сообщений: 746
Записей в блоге: 1
1

Разные текстуры на один объект

28.11.2014, 09:38. Показов 1483. Ответов 11
Метки нет (Все метки)

Возможно ли наложить разные текстуры на разные стороны одного куба? Или всё-таки обычно делают одну текстуру и накладывают её целиком на объект ?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.11.2014, 09:38
Ответы с готовыми решениями:

Как наложить разные текстуры на разные грани одного и того же куба?
ЗДРАВСТВУЙТЕ! Подскажите пожалуйста как наложить разные текстуры на разные грани одного и тогоже...

Рисование в разные текстуры через FBO
Товарищи, поправьте, пожалуйста, что я делаю не так? Вроде рисую в разные текстуры, а получаю одну...

Разные цены на один товар, но разные единицы измерения
Доброго времени суток! Конфигурация УТ10.3, есть ли возможность установить разные цены на один и...

Работа с дисками. Как сделать чтобы разные диски записывались в разные переменные, а не в один root?
Есть код, он записывает названия всех съемных носителей в root и выводит его. Если в root - 2...

11
80 / 80 / 19
Регистрация: 07.05.2009
Сообщений: 316
28.11.2014, 11:41 2
Да. Да.

Добавлено через 3 минуты
Иногда ещё делают текстурный атлас, и рисуют одним DIP`ом сразу пачку объектов. Это выгодно с точки зрения производительности.
0
158 / 144 / 14
Регистрация: 03.02.2012
Сообщений: 746
Записей в блоге: 1
28.11.2014, 11:45  [ТС] 3
да. да. -это как понимать ? ( с наложением одной большой текстуры на объект понятно. )

Если возможно наложить разные текстуры на разные стороны куба, то хотелось бы пояснений, - как именно ( если возможно - ссылку на код или книгу где поясняют как это делать )?

Как в шейдере распознать какой именно объект отрисовывается сейчас ?
0
80 / 80 / 19
Регистрация: 07.05.2009
Сообщений: 316
28.11.2014, 12:40 4
Цитата Сообщение от Kabak Посмотреть сообщение
Если возможно наложить разные текстуры на разные стороны куба, то хотелось бы пояснений, - как именно ( если возможно - ссылку на код или книгу где поясняют как это делать )?
Есть два варианта как это сделать:
Можно использовать мультитекстурирование рисовать все 6 плоскостей куба одним DIP`ом, но это тогда придётся в пиксельном шейдере грязными хаками выбирать какой текстурой пользоваться.
Сам код шейдера простой, если надо могу написать.
Рисовать вот так:
C++
1
2
3
4
5
6
7
pDev->SetPixelShader(...);
pDev->SetStreamSource(...);
for(int i=0;i<6;i++)
{
  pDev->SetTextureStageState(i,cupetexarr[i]);
}
pDev->DrawIndexedPrimitive(...);
Можно не использовать мультитекстурирование и рисовать все 6 плоскостей за 6 DIP`ов и тогда можно обойтись Fixed Function Pipeline.
Рисовать вот так:
C++
1
2
3
4
5
6
for(int i=0;i<6;i++)
{
  pDev->SetStreamSource(...);
  pDev->SetTextureStageState(i,cupetexarr[i]);
  pDev->DrawIndexedPrimitive(...);
}
Добавлено через 4 минуты
Цитата Сообщение от Kabak Посмотреть сообщение
Как в шейдере распознать какой именно объект отрисовывается сейчас ?
Передать константу с id`шником объекта в шейдер через SetVertexShaderConstantI, не?
1
158 / 144 / 14
Регистрация: 03.02.2012
Сообщений: 746
Записей в блоге: 1
28.11.2014, 13:06  [ТС] 5
1) Где кроме MSDN ознакомиться с HLSL языком ? Книги есть только на английском и нет в электронном виде. искал (английский не проблема). Покупать на E-bay как-то долго ждать. Я хочу сам разобраться, а не того, чтобы за меня писали код шейдера.

2) Как в пиксельном шейдере распознать какую грань/сторону/треугольники из которых состоит сторона куба сейчас будет обрабатывать пиксельный шейер ?

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

4) Кстати, если накладывать одну текстуру на все грани одного куба, то всё равно встаёт вопрос как отличить в пиксельном шейдере, какой сейчас куб отрисовывается из 26 возможных ?

Спасибо вам за ответы.
0
80 / 80 / 19
Регистрация: 07.05.2009
Сообщений: 316
28.11.2014, 13:36 6
Цитата Сообщение от Kabak Посмотреть сообщение
Где кроме MSDN ознакомиться с HLSL?
https://ru.wikipedia.org/wiki/HLSL
http://www.gamedev.ru/code/articles/HLSL

Цитата Сообщение от Kabak Посмотреть сообщение
кубик Рубика
Тут самый простой и самый быстрый способ - вообще не использовать текстуры и шейдеры. Просто каждый элемент в "кубик Рубика" рисовать своим цветом.
Для этого надо сначала сформировать вершинный и индексный буфер для всех элементов в "кубике Рубика".
Затем каждый кадр его обновлять и рисовать примерно вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//struct Ver{float x,y,z;QapColor color;};
//IDirect3DVertexBuffer9*VB;
//IDirect3DIndexBuffer9*IB;
//Ver*VBA=nullptr;
//int*IBA=nullptr;
//int MaxVPos,MaxIPos;
//void DrawRubiksCube(int*IBA,Ver*VBA,int&VPos,int&IPos);// - это ваша функция.
void Render(...) //вызывать между pDev->BeginScene(...) и pDev->BeginEnd(...)
{
  int VPos=0;
  int IPos=0;
  IB->Lock(0,sizeof(int)*MaxIPos,(void**)&IBA,0);
  VB->Lock(0,sizeof(Ver)*MaxVPos,(void**)&VBA,0);
  DrawRubiksCube(IBA,VBA,VPos,IPos); // - это ваша функция.
  {
    pDev->SetFVF(D3DFVF_XYZ|D3DFVF_DIFFUSE);
    pDev->SetStreamSource(0,VB,0,sizeof(Ver));
    pDev->SetIndices(IB);
    pDev->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,VPos,0,IPos/3);
  }
  IB->Unlock();
  VB->Unlock();
}
0
158 / 144 / 14
Регистрация: 03.02.2012
Сообщений: 746
Записей в блоге: 1
28.11.2014, 13:47  [ТС] 7
Я просто взял урок Tutorial 04: 3D Spaces из DirectX SDK и на базе него пытаюсь разукрасить пока единственный куб разными цветами - шейдерами. Так как из урока видно что если вершины куба имеют разный цвет пиксельный шейдер интерполирует цвет к следующей вершине куба. Я задал один цвет для всех вершин и встал вопрос о наложении либо одной текстуры сразу на куб или одной текстуры на каждую сторону.

А что, возможно задать цвет каждой стороне куба без текстур ( при условии что вершины для граней общие ) ?
0
80 / 80 / 19
Регистрация: 07.05.2009
Сообщений: 316
28.11.2014, 13:47 8
Забыл QapColor из QapLite развернуть.
Короче это что-то типа:
C++
1
struct QapColor{typedef unsigned char uchar;uchar b,g,r,a;};
https://www.cyberforum.ru/dire... 56386.html

То есть формат вершины можно вот так описать:
C++
1
2
typedef unsigned char uchar;
struct Ver{float x,y,z;uchar b,g,r,a;};// brga - это цвет вершины.
0
158 / 144 / 14
Регистрация: 03.02.2012
Сообщений: 746
Записей в блоге: 1
28.11.2014, 14:09  [ТС] 9
А что, возможно задать цвет каждой стороне куба без текстур ( при условии что вершины для граней общие ) ?

Я сразу отбросил DX9. Изучаю DX11
0
80 / 80 / 19
Регистрация: 07.05.2009
Сообщений: 316
28.11.2014, 14:10 10
Цитата Сообщение от Kabak Посмотреть сообщение
А что, возможно задать цвет каждой стороне куба без текстур ( при условии что вершины для граней общие ) ?
Вроде для одной вершины нельзя два цвета задать, но я не уверен. Я обычно в 2D игры делаю, мне одного цвета на вершину хватает и в таких случаях я просто дублирую веришины, то есть у них одинаковые координаты, но разные цвета.
Цитата Сообщение от Kabak Посмотреть сообщение
Tutorial 04: 3D Spaces
Это же из DX10.
0
158 / 144 / 14
Регистрация: 03.02.2012
Сообщений: 746
Записей в блоге: 1
28.11.2014, 14:19  [ТС] 11
Там похожие уроки, потому что DX11 - расширение для DX10.

В этом уроке куб раскрашивается разными цветами именно потому что цвета у каждой вершины разные.

А как в шейдере определить какой именно объект или треугольник или вершину от конкретного треугольника сейчас отрисовывает пиксельный шейдер ?

Добавлено через 5 минут
Я как раз и хотел в пиксельном шейдере распознавать какой кубик из 26 и какая конретно его сторона отрисовывается в данный момент и из соответствующей текстуры накладывать пиксели. - выводим на экран.
0
158 / 144 / 14
Регистрация: 03.02.2012
Сообщений: 746
Записей в блоге: 1
29.11.2014, 18:21  [ТС] 12
Ура ! Вот тут я понял как наложить разные текстуры на разные грани куба
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.11.2014, 18:21

Как прикрутить разные текстуры к кубу, используя vbo?
помогите! такая проблема: Имеется куб, то есть 6 граней. Как, используя буфера (vbo), наложить на...

Наложение текстуры на прозрачный объект
Здравствуйте! У меня возникла задача: хочу наложить текстуру так, чтобы часть её была не видна. К...

Как загрузить текстуры на объект? (Unity 3d)
Привет. Я скачал с Asset store несколько текстур, но как их загрузить на объект не знаю, не могу...

Как поместить объект текстуры в UIImage *image?
Доброго дня! Я загружаю текстуру, все красиво получается при выводе, но мне нужен объект...

Наложению текстуры на объект при использовании индексов в OpenGL
Уважаемые КиберФорумцы, подскажите решения задачи связанное с текстурированием. Ситуация №1 ...

Один сервлет один jsp разные формы
Servlet &lt;servlet&gt; &lt;servlet-name&gt;dispatcher&lt;/servlet-name&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.