[9.0c] Рисуване на по-глеми точки

Всичко свързано с Microsoft DirectX. Въпроси относно HLSL.
Zammy
Power User
Power User
Мнения: 170
Регистриран на: 17 фев 2008 05:47
Местоположение: София/Пловдив

[9.0c] Рисуване на по-глеми точки

Мнение от Zammy » 28 апр 2009 14:02

Опитвам се да нарисувам точки(points) по-големи на екрана.

Тук се вижда, че има някаква опция за рендерирането, но като я променя с : gd3dDevice->SetRenderState(D3DRS_POINTSIZE,2)
нищо не се променя.

Код: Избери всички

 
typedef enum D3DRENDERSTATETYPE
{
    ...

    D3DRS_POINTSIZE = 154,

    ...
    D3DRS_FORCE_DWORD = 0x7fffffff,
} D3DRENDERSTATETYPE, *LPD3DRENDERSTATETYPE;
После в един форум ми казаха да пробвам във вертекс шейдара.

Код: Избери всички

float4 PointVertexShader(float3 pos : POSITION0,out float size : PSIZE) : POSITION
{
	float4 posW = mul( float4(pos,0), WVP);
	
	 size = 2;
	
	return posW;
}
Това пак съвсем нищо не изкарва като се опитам да рисувам.

Много благодаря ако ме насочите към правилният начин.

Евгени

Потребителски аватар
haho
Power User
Power User
Мнения: 999
Регистриран на: 07 дек 2003 21:52
Местоположение: България
Контакти:

Re: [9.0c] Рисуване на по-глеми точки

Мнение от haho » 28 апр 2009 15:09

Изобщо рендват ли ти се точки? Има един флаг за USAGE, още като създаваш ВБ. Не забравяй, че размера на точкие е в екранни кордината, така че 2 е много малко число. Също ако си включил сайз във вертексдекларацията то тогава gd3dDevice->SetRenderState(D3DRS_POINTSIZE,2) не играе роля, а се използва размера от въртекса.

Zammy
Power User
Power User
Мнения: 170
Регистриран на: 17 фев 2008 05:47
Местоположение: София/Пловдив

Re: [9.0c] Рисуване на по-глеми точки

Мнение от Zammy » 28 апр 2009 16:51

haho написа:Изобщо рендват ли ти се точки? Има един флаг за USAGE, още като създаваш ВБ. Не забравяй, че размера на точкие е в екранни кордината, така че 2 е много малко число. Също ако си включил сайз във вертексдекларацията то тогава gd3dDevice->SetRenderState(D3DRS_POINTSIZE,2) не играе роля, а се използва размера от въртекса.
При първият вариант, (без да ползвам шейдър) да. Но са големи 1 пиксел.

Код: Избери всички

	HR(gd3dDevice->SetRenderState(D3DRS_POINTSIZE,5));
Каквото и число да сложа винаги точката е с големина 1 пиксел.

Когато правя вертекс буфера му казвам, че са точки с флаг. (Не трябва ли? ).
Как мога да кажа колко е голям вертекса при вертекса декларацията?

Код: Избери всички

struct VertexPos
{
	VertexPos():pos(0.0f, 0.0f, 0.0f){}
	VertexPos(float x, float y, float z):pos(x,y,z){}
	VertexPos(const D3DXVECTOR3& v):pos(v){}

	D3DXVECTOR3 pos;
	static IDirect3DVertexDeclaration9* Decl;
};
Самата концепция, размер на вертекс не разбирам.

Потребителски аватар
haho
Power User
Power User
Мнения: 999
Регистриран на: 07 дек 2003 21:52
Местоположение: България
Контакти:

Re: [9.0c] Рисуване на по-глеми точки

Мнение от haho » 28 апр 2009 18:30

размер на точката имах предвид

Потребителски аватар
YE
Power User
Power User
Мнения: 1554
Регистриран на: 01 дек 2003 21:08
Местоположение: Outer Qwghlm
Контакти:

Re: [9.0c] Рисуване на по-глеми точки

Мнение от YE » 28 апр 2009 23:36

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

Точките (point sprites) са deprecated като идея - май ги махнаха от DirectX 10/11, направи си минималното количество труд и си свърши работата с quads от по два триъгълника в triangle list, за да ти е мирна главата. Драйвера и без това сигурно нещо такова прави.

Потребителски аватар
YE
Power User
Power User
Мнения: 1554
Регистриран на: 01 дек 2003 21:08
Местоположение: Outer Qwghlm
Контакти:

Re: [9.0c] Рисуване на по-глеми точки

Мнение от YE » 28 апр 2009 23:40

Още: "Размер на вертекс" няма смисъл, ако вертексите ги рисуваш като триъгълници; ако обаче ги рисуваш като примитив "point list", има смисъл, и смисълът е точно този, което ти трябва на теб.

Потребителски аватар
haho
Power User
Power User
Мнения: 999
Регистриран на: 07 дек 2003 21:52
Местоположение: България
Контакти:

Re: [9.0c] Рисуване на по-глеми точки

Мнение от haho » 29 апр 2009 10:32

YE написа:Мисля, че имa CAPS бит дали устройството поддържа размер на точки.

Точките (point sprites) са deprecated като идея - май ги махнаха от DirectX 10/11, направи си минималното количество труд и си свърши работата с quads от по два триъгълника в triangle list, за да ти е мирна главата. Драйвера и без това сигурно нещо такова прави.
Не вярвам това да е така, даже напротив, мисля че не го прави драйвера а е заложено в хардуера, особено при енвидиа. Има енджини, които много разчитат на точките, например за рендване на партикли, или за тайл рендеринг на постпроцесната текстура, където всеки тайл е класифициран по различен начин и след това се рендва като пойнт спрайт със съответния шейдър.

Потребителски аватар
YE
Power User
Power User
Мнения: 1554
Регистриран на: 01 дек 2003 21:08
Местоположение: Outer Qwghlm
Контакти:

Re: [9.0c] Рисуване на по-глеми точки

Мнение от YE » 29 апр 2009 10:49

Какво имало по енджините няма значение. То и fixed function имаше, ама го разкараха като взе да пречи на хардуера.

Ако имаше адекватна хардуерна поддръжка, нямаше да го махнат от DX10.

За партикли ми се струват особено неподходящи - не можеш да ги въртиш, не можеш да ги правиш произволно големи, не можеш да анимираш текстура по тях.
А това за постпроцесинга не го разбрах и затова ми прозвуча интересно, можеш ли да обясниш по-добре?

Потребителски аватар
haho
Power User
Power User
Мнения: 999
Регистриран на: 07 дек 2003 21:52
Местоположение: България
Контакти:

Re: [9.0c] Рисуване на по-глеми точки

Мнение от haho » 29 апр 2009 12:32

YE написа:Какво имало по енджините няма значение. То и fixed function имаше, ама го разкараха като взе да пречи на хардуера.

Ако имаше адекватна хардуерна поддръжка, нямаше да го махнат от DX10.

За партикли ми се струват особено неподходящи - не можеш да ги въртиш, не можеш да ги правиш произволно големи, не можеш да анимираш текстура по тях.
А това за постпроцесинга не го разбрах и затова ми прозвуча интересно, можеш ли да обясниш по-добре?
Информацията не ти е съвсем точна. Гледам, че в DX10 имаме D3D10_PRIMITIVE_TOPOLOGY_POINTLIST. Вярно е, че не можеш да въртиш точките, но можеш да им променяш големината, разбира се по всички оси едновременно, и можеш да им анимираш текстура с един лек трик. В СОТС партиклите са само точки.

Колкото до постпроцесинга, ами например за defered lighting, та там нали екрана може да се раздели на тайлове и за всеки тайл да се изпълни шейдър с различен брой светлини. Става дума че тези тайлове се рендват като пойнтспрайтове после. Просто още една оптимизация, не че не може и като 2 триъгълника.

Потребителски аватар
YE
Power User
Power User
Мнения: 1554
Регистриран на: 01 дек 2003 21:08
Местоположение: Outer Qwghlm
Контакти:

Re: [9.0c] Рисуване на по-глеми точки

Мнение от YE » 29 апр 2009 18:24

haho написа:Колкото до постпроцесинга, ами например за defered lighting, та там нали екрана може да се раздели на тайлове и за всеки тайл да се изпълни шейдър с различен брой светлини. Става дума че тези тайлове се рендват като пойнтспрайтове после. Просто още една оптимизация, не че не може и като 2 триъгълника.
Каква оптимизация е това? Особено като не можеш да им задаваш размера точно и да ги правиш правоъгълници?

Zammy
Power User
Power User
Мнения: 170
Регистриран на: 17 фев 2008 05:47
Местоположение: София/Пловдив

Re: [9.0c] Рисуване на по-глеми точки

Мнение от Zammy » 30 апр 2009 03:18

Благодаря ви за отговорите. Май дори се появи нова тема на разговор. Не съм се занимавал с точките,но не са ми толкова важни.
Все пак като ми остане пак време може да ги пробвам да ги нарисувам, алтернативата явно е просто да направя куадс. (два триъгълника? )

Update:

Това със шейдъра проработи! Имал съм грешка :)

Код: Избери всички

float4 PointVertexShader(float3 pos : POSITION0,out float size : PSIZE) : POSITION
{
   float4 posW = mul( float4(pos,[b]1[/b]), WVP);
   
    size = 2;
   
   return posW;
}

Отговори

Кой е на линия

Потребители, разглеждащи този форум: Няма регистрирани потребители и 1 гост