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
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!