HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Blur (https://hlfx.ru/forum/showthread.php?threadid=883)
Отправлено FiEctro 15-09-2007 в 15:23:
 Blur
Короче хотел я сделать шейдерный блюм но почему то текстура не правильно накладывается ...
Вот делал все по этому тутору : http://collective.valve-erc.com/index.php?go=tron2
Хотя другие говорили что у них было все нормально ...
 
Помогите плиз ! Напишите здесь полный нормальный рабочий код ( не пошагово как там ) самого блюма из того тутора для (tri.cpp) ... С нормальным наложением текстуры ...
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено FiEctro 16-09-2007 в 07:40:
 
Сабж
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено Ku2zoff 27-09-2007 в 06:42:
 
Я сделал всё по этому тутору, вроде ничего. Для преломления в оптическом прицеле неплохо.
Отправлено rocksTaa 27-09-2007 в 09:11:
 
а че за блюр собсно?
__________________
rt
Отправлено FiEctro 27-09-2007 в 11:29:
 
Ku2zoff выложи код функции плиз ...
Имхо я смотрел вчера её код и там большинство значений (ширины и длины) не верные ... Кое что растянул так начало зверски лагать 
 
А сам блюр у меня тоже работает... Но почему половина шейдеров накладываются нормально ... А другая половина тольок на чтверть экрана , при том на остольных 3ёх четвертях они размазываются 
 ?
И вот скрин :
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено Ku2zoff 27-09-2007 в 11:37:
 
-CJ- какой код? У меня всё точь-в-точь как в туторе и шейдеры я не менял, только вызвал функцию из другого места.
Отправлено FiEctro 27-09-2007 в 11:46:
 
>> какой код? У меня всё точь-в-точь как в туторе и шейдеры я не менял, только вызвал функцию из другого места.
Никакой это не мод ...
Это обычный хлсдк последней версии ...
Добавлено 27-09-2007 в 15:46:
Вот собсно код той самой функции ...
C++ Source Code:
1  | #include "r_studioint.h"  | 
3  | extern engine_studio_api_t IEngineStudio;  | 
5  | bool g_bInitialised = false;  | 
7  | extern PFNGLACTIVETEXTUREARBPROC glActiveTextureARB;  | 
8  | extern PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB;  | 
11  | CGprofile g_cgVertProfile;  | 
12  | CGprofile g_cgFragProfile;  | 
14  | CGprogram g_cgVP_GlowDarken;  | 
15  | CGprogram g_cgFP_GlowDarken;  | 
17  | CGprogram g_cgVP_GlowBlur;  | 
18  | CGprogram g_cgFP_GlowBlur;  | 
20  | CGprogram g_cgVP_GlowCombine;  | 
21  | CGprogram g_cgFP_GlowCombine;  | 
23  | CGparameter g_cgpVP0_ModelViewMatrix;  | 
24  | CGparameter g_cgpVP1_ModelViewMatrix;  | 
25  | CGparameter g_cgpVP1_XOffset;  | 
26  | CGparameter g_cgpVP1_YOffset;  | 
27  | CGparameter g_cgpVP2_ModelViewMatrix;  | 
29  | unsigned int g_uiSceneTex;  | 
30  | unsigned int g_uiBlurTex;  | 
32  | bool LoadProgram(CGprogram* pDest, CGprofile profile, const char* szFile)  | 
34  |   const char* szGameDir = gEngfuncs.pfnGetGameDirectory();  | 
36  |   sprintf(file, "%s/%s", szGameDir, szFile);  | 
38  |   *pDest = cgCreateProgramFromFile(g_cgContext, CG_SOURCE, file, profile, "main", 0);  | 
40  |     MessageBox(NULL, cgGetErrorString(cgGetError()), NULL, NULL);  | 
44  |   cgGLLoadProgram(*pDest);  | 
49  | void InitScreenGlow(void)  | 
51  |   if (IEngineStudio.IsHardware() != 1)  | 
54  |   gEngfuncs.pfnRegisterVariable("cg_blur_steps", "4", 0); | 
56  |   // OPENGL EXTENSION LOADING  | 
58  |   glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC)wglGetProcAddress("glActiveTextureARB"); | 
62  |   unsigned char* pBlankTex = new unsigned char[ScreenWidth*ScreenHeight*3];  | 
63  |   memset(pBlankTex, 0, ScreenWidth*ScreenHeight*3);  | 
65  |   glGenTextures(1, &g_uiSceneTex);  | 
66  |   glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiSceneTex);  | 
67  |   glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MIN_FILTER, GL_LINEAR);  | 
68  |   glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MAG_FILTER, GL_LINEAR);  | 
69  |   glTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB8, ScreenWidth, ScreenHeight, 0, GL_RGB8, GL_UNSIGNED_BYTE, pBlankTex);  | 
71  |   glGenTextures(1, &g_uiBlurTex);  | 
72  |   glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiBlurTex);  | 
73  |   glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MIN_FILTER, GL_LINEAR);  | 
74  |   glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MAG_FILTER, GL_LINEAR);  | 
75  |   glTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB8, ScreenWidth/2, ScreenHeight/2, 0, GL_RGB8, GL_UNSIGNED_BYTE, pBlankTex);  | 
79  |   g_bInitialised = true;  | 
83  |   g_cgContext = cgCreateContext();  | 
85  |     MessageBox(NULL, "Couldn't make Cg context", NULL, NULL);  | 
91  |   g_cgVertProfile = cgGLGetLatestProfile(CG_GL_VERTEX);  | 
92  |   if (g_cgVertProfile == CG_PROFILE_UNKNOWN) { | 
93  |     MessageBox(NULL, "Couldn't fetch valid VP profile", NULL, NULL);  | 
97  |   cgGLSetOptimalOptions(g_cgVertProfile);  | 
101  |   if (!LoadProgram(&g_cgVP_GlowDarken, g_cgVertProfile, "cgprograms/glow_darken_vp.cg"))  | 
104  |   if (!LoadProgram(&g_cgVP_GlowBlur, g_cgVertProfile, "cgprograms/glow_blur_vp.cg"))  | 
107  |   if (!LoadProgram(&g_cgVP_GlowCombine, g_cgVertProfile, "cgprograms/glow_combine_vp.cg"))  | 
112  |   g_cgpVP0_ModelViewMatrix = cgGetNamedParameter(g_cgVP_GlowDarken, "ModelViewProj");  | 
114  |   g_cgpVP1_ModelViewMatrix = cgGetNamedParameter(g_cgVP_GlowBlur, "ModelViewProj");  | 
115  |   g_cgpVP1_XOffset = cgGetNamedParameter(g_cgVP_GlowBlur, "XOffset");  | 
116  |   g_cgpVP1_YOffset = cgGetNamedParameter(g_cgVP_GlowBlur, "YOffset");  | 
118  |   g_cgpVP2_ModelViewMatrix = cgGetNamedParameter(g_cgVP_GlowCombine, "ModelViewProj");  | 
122  |   g_cgFragProfile = cgGLGetLatestProfile(CG_GL_FRAGMENT);  | 
123  |   if (g_cgFragProfile == CG_PROFILE_UNKNOWN) { | 
124  |     MessageBox(NULL, "Couldn't fetch valid FP profile", NULL, NULL);  | 
128  |   cgGLSetOptimalOptions(g_cgFragProfile);  | 
132  |   if (!LoadProgram(&g_cgFP_GlowDarken, g_cgFragProfile, "cgprograms/glow_darken_fp.cg"))  | 
135  |   if (!LoadProgram(&g_cgFP_GlowBlur, g_cgFragProfile, "cgprograms/glow_blur_fp.cg"))  | 
138  |   if (!LoadProgram(&g_cgFP_GlowCombine, g_cgFragProfile, "cgprograms/glow_combine_fp.cg"))  | 
141  | void DrawQuad(int width, int height)  | 
146  |   glVertex3f(0, 1, -1);  | 
147  |   glTexCoord2f(0,height);  | 
148  |   glVertex3f(0, 0, -1);  | 
149  |   glTexCoord2f(width,height);  | 
150  |   glVertex3f(1, 0, -1);  | 
151  |   glTexCoord2f(width,0);  | 
152  |   glVertex3f(1, 1, -1);  | 
157  | void DoBlur(unsigned int uiSrcTex, unsigned int uiTargetTex, int srcTexWidth, int srcTexHeight, int destTexWidth, int destTexHeight, float xofs, float yofs)  | 
159  |   cgGLBindProgram(g_cgVP_GlowBlur);  | 
160  |   cgGLBindProgram(g_cgFP_GlowBlur);  | 
162  |   glActiveTextureARB(GL_TEXTURE0_ARB);  | 
163  |   glEnable(GL_TEXTURE_RECTANGLE_NV);  | 
164  |   glBindTexture(GL_TEXTURE_RECTANGLE_NV, uiSrcTex);  | 
166  |   glActiveTextureARB(GL_TEXTURE1_ARB);  | 
167  |   glEnable(GL_TEXTURE_RECTANGLE_NV);  | 
168  |   glBindTexture(GL_TEXTURE_RECTANGLE_NV, uiSrcTex);  | 
170  |   glActiveTextureARB(GL_TEXTURE2_ARB);  | 
171  |   glEnable(GL_TEXTURE_RECTANGLE_NV);  | 
172  |   glBindTexture(GL_TEXTURE_RECTANGLE_NV, uiSrcTex);  | 
174  |   glActiveTextureARB(GL_TEXTURE3_ARB);  | 
175  |   glEnable(GL_TEXTURE_RECTANGLE_NV);  | 
176  |   glBindTexture(GL_TEXTURE_RECTANGLE_NV, uiSrcTex);  | 
178  |   cgGLSetParameter1f(g_cgpVP1_XOffset, xofs);  | 
179  |   cgGLSetParameter1f(g_cgpVP1_YOffset, yofs);  | 
181  |   glViewport(0, 0, destTexWidth, destTexHeight);  | 
183  |   DrawQuad(srcTexWidth, srcTexHeight);  | 
185  |   glBindTexture(GL_TEXTURE_RECTANGLE_NV, uiTargetTex);  | 
186  |   glCopyTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB, 0, 0, destTexWidth, destTexHeight, 0);  | 
189  | void RenderScreenGlow(void)  | 
191  |   if (IEngineStudio.IsHardware() != 1)  | 
197  |   if ((int)gEngfuncs.pfnGetCvarFloat("cg_blur_steps") == 0) | 
200  |   // STEP 1: Grab the screen and put it into a texture  | 
202  |   glActiveTextureARB(GL_TEXTURE0_ARB);  | 
203  |   glEnable(GL_TEXTURE_RECTANGLE_NV);  | 
205  |   glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiSceneTex);  | 
206  |   glCopyTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB, 0, 0, ScreenWidth, ScreenHeight, 0);  | 
208  |   // STEP 2: Set up an orthogonal projection  | 
210  |   glMatrixMode(GL_MODELVIEW);  | 
214  |   glMatrixMode(GL_PROJECTION);  | 
217  |   glOrtho(0, 1, 1, 0, 0.1, 100);  | 
221  |   // STEP 3: Initialize Cg programs and parameters for darkening mid to dark areas of the scene  | 
223  |   cgGLEnableProfile(g_cgVertProfile);  | 
224  |   cgGLEnableProfile(g_cgFragProfile);  | 
226  |   cgGLBindProgram(g_cgVP_GlowDarken);  | 
227  |   cgGLBindProgram(g_cgFP_GlowDarken);  | 
229  |   cgGLSetStateMatrixParameter(g_cgpVP0_ModelViewMatrix, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY);  | 
231  |   // STEP 4: Render the current scene texture to a new, lower-res texture, darkening non-bright areas of the scene  | 
233  |   glViewport(0, 0, ScreenWidth/2, ScreenHeight/2);  | 
235  |   glActiveTextureARB(GL_TEXTURE0_ARB);  | 
236  |   glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiSceneTex);  | 
238  |   DrawQuad(ScreenWidth, ScreenHeight);  | 
240  |   glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiBlurTex);  | 
241  |   glCopyTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB, 0, 0, ScreenWidth/2, ScreenHeight/2, 0);  | 
243  |   // STEP 5: Initialise Cg programs and parameters for blurring  | 
245  |   cgGLBindProgram(g_cgVP_GlowBlur);  | 
246  |   cgGLBindProgram(g_cgFP_GlowBlur);  | 
248  |   cgGLSetStateMatrixParameter(g_cgpVP1_ModelViewMatrix, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY);  | 
250  |   // STEP 6: Apply blur  | 
252  |   int iNumBlurSteps = (int)gEngfuncs.pfnGetCvarFloat("cg_blur_steps"); | 
253  |   for (int i = 0; i < iNumBlurSteps; i++) { | 
254  |     DoBlur(g_uiBlurTex, g_uiBlurTex, ScreenWidth/2, ScreenHeight/2, ScreenWidth/2, ScreenHeight/2, 1, 0);  | 
255  |     DoBlur(g_uiBlurTex, g_uiBlurTex, ScreenWidth/2, ScreenHeight/2, ScreenWidth/2, ScreenHeight/2, 0, 1);  | 
258  |   // STEP 7: Set up Cg for combining blurred glow with original scene  | 
260  |   cgGLBindProgram(g_cgVP_GlowCombine);  | 
261  |   cgGLBindProgram(g_cgFP_GlowCombine);  | 
263  |   cgGLSetStateMatrixParameter(g_cgpVP2_ModelViewMatrix, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY);  | 
265  |   glActiveTextureARB(GL_TEXTURE0_ARB);  | 
266  |   glEnable(GL_TEXTURE_RECTANGLE_NV);  | 
267  |   glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiSceneTex);  | 
269  |   glActiveTextureARB(GL_TEXTURE1_ARB);  | 
270  |   glEnable(GL_TEXTURE_RECTANGLE_NV);  | 
271  |   glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiBlurTex);  | 
273  |   // STEP 8: Do the combination, rendering to the screen without grabbing it to a texture  | 
275  |   glViewport(0, 0, ScreenWidth, ScreenHeight);  | 
277  |   DrawQuad(ScreenWidth/2, ScreenHeight/2);  | 
279  |   // STEP 9: Restore the original projection and modelview matrices and disable rectangular textures on all units  | 
281  |   glMatrixMode(GL_PROJECTION);  | 
284  |   glMatrixMode(GL_MODELVIEW);  | 
287  |   cgGLDisableProfile(g_cgVertProfile);  | 
288  |   cgGLDisableProfile(g_cgFragProfile);  | 
290  |   glActiveTextureARB(GL_TEXTURE0_ARB);  | 
291  |   glDisable(GL_TEXTURE_RECTANGLE_NV);  | 
293  |   glActiveTextureARB(GL_TEXTURE1_ARB);  | 
294  |   glDisable(GL_TEXTURE_RECTANGLE_NV);  | 
296  |   glActiveTextureARB(GL_TEXTURE2_ARB);  | 
297  |   glDisable(GL_TEXTURE_RECTANGLE_NV);  | 
299  |   glActiveTextureARB(GL_TEXTURE3_ARB);  | 
300  |   glDisable(GL_TEXTURE_RECTANGLE_NV);  | 
302  |   glActiveTextureARB(GL_TEXTURE0_ARB);  | 
 __________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено Ku2zoff 27-09-2007 в 11:46:
 
-CJ- какой тебе код надо, я не понял? 
Я знаю что это код для ХЛСДК 2.3.
Отправлено FiEctro 27-09-2007 в 11:49:
 
Ku2zoff рабочий код блюра который по твоим словам работает без глюков ...
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено Ku2zoff 27-09-2007 в 11:52:
 
У меня шейдеры накладываются правильно...
Я вообще оружием занялся в последнее время
 Вот на днях написал лазерный пистолет... как в ТFС у инженера...
Отправлено FiEctro 27-09-2007 в 11:54:
 
Ku2zoff гдеже правильно когда у тебя тоже он только на четверть ?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено Ku2zoff 27-09-2007 в 11:59:
 
-CJ- ну у меня же ни чё не размывается. А зачем его на весь экран? Какой тебе эффект нужен?
Отправлено FiEctro 27-09-2007 в 12:03:
 
Ku2zoff ппц я над тобой пац столом 
 
Блюр - это отражение света от поверхности , а не эффект прицела ... Вот как правльно он должен выглядеть , и заметь там нет никаких четвертинок !
http://collective.valve-erc.com/dat...beforeafter.jpg
А размытия есть и у тебя ...
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено Ku2zoff 27-09-2007 в 12:15:
 
<<А размытия есть и у тебя ...
но не такие же страшные!
-CJ- надо вытрясти из авторов тутора нормальный код, я не знаю как его править. Хотя всё сделано правильно(в смысле по тутору). Наделают всякой фигни, а потом хрен поймешь как это правильно работает
Отправлено FiEctro 27-09-2007 в 12:19:
 
Ku2zoff я про тоже ... 
Вот держи еще ссылку на другой блюм ...
Он работает так как должен ! Но качество у него на большую букву "Г" , может быть получится взять что нибудь оттутда ?
http://collective.valve-erc.com/index.php?go=tron2
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!