HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Несколько вопросов о коддинге (https://hlfx.ru/forum/showthread.php?threadid=1780)
Отправлено GuNsHiP 13-04-2009 в 15:21:
Проверь плиз
C++ Source Code:
1 | //========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ |
6 | //============================================================================= |
8 | // Triangle rendering, if any |
14 | // Triangle rendering apis are in gEngfuncs.pTriAPI |
17 | #include "entity_state.h" |
19 | #include "triangleapi.h" |
21 | // Triangle rendering apis are in gEngfuncs.pTriAPI |
24 | #include "entity_state.h" |
26 | #include "triangleapi.h" |
29 | //#include <gl/glext.h> |
33 | #define DLLEXPORT __declspec( dllexport ) |
37 | void DLLEXPORT HUD_DrawNormalTriangles( void ); |
38 | void DLLEXPORT HUD_DrawTransparentTriangles( void ); |
48 | Example routine. Draws a sprite offset from the player origin. |
52 | void Draw_Triangles( void ) |
57 | // Load it up with some bogus data |
58 | player = gEngfuncs.GetLocalPlayer(); |
67 | if (gHUD.m_hsprCursor == 0) |
70 | sprintf( sz, "sprites/cursor.spr" ); |
71 | gHUD.m_hsprCursor = SPR_Load( sz ); |
74 | if ( !gEngfuncs.pTriAPI->SpriteTexture( (struct model_s *)gEngfuncs.GetSpritePointer( gHUD.m_hsprCursor ), 0 )) |
79 | // Create a triangle, sigh |
80 | gEngfuncs.pTriAPI->RenderMode( kRenderNormal ); |
81 | gEngfuncs.pTriAPI->CullFace( TRI_NONE ); |
82 | gEngfuncs.pTriAPI->Begin( TRI_QUADS ); |
83 | // Overload p->color with index into tracer palette, p->packedColor with brightness |
84 | gEngfuncs.pTriAPI->Color4f( 1.0, 1.0, 1.0, 1.0 ); |
85 | // UNDONE: This gouraud shading causes tracers to disappear on some cards (permedia2) |
86 | gEngfuncs.pTriAPI->Brightness( 1 ); |
87 | gEngfuncs.pTriAPI->TexCoord2f( 0, 0 ); |
88 | gEngfuncs.pTriAPI->Vertex3f( org.x, org.y, org.z ); |
90 | gEngfuncs.pTriAPI->Brightness( 1 ); |
91 | gEngfuncs.pTriAPI->TexCoord2f( 0, 1 ); |
92 | gEngfuncs.pTriAPI->Vertex3f( org.x, org.y + 50, org.z ); |
94 | gEngfuncs.pTriAPI->Brightness( 1 ); |
95 | gEngfuncs.pTriAPI->TexCoord2f( 1, 1 ); |
96 | gEngfuncs.pTriAPI->Vertex3f( org.x + 50, org.y + 50, org.z ); |
98 | gEngfuncs.pTriAPI->Brightness( 1 ); |
99 | gEngfuncs.pTriAPI->TexCoord2f( 1, 0 ); |
100 | gEngfuncs.pTriAPI->Vertex3f( org.x + 50, org.y, org.z ); |
102 | gEngfuncs.pTriAPI->End(); |
103 | gEngfuncs.pTriAPI->RenderMode( kRenderNormal ); |
110 | HUD_DrawNormalTriangles |
112 | Non-transparent triangles-- add them here |
115 | void DLLEXPORT HUD_DrawNormalTriangles( void ) |
118 | gHUD.m_Spectator.DrawOverview(); |
120 | #if defined( TEST_IT ) |
127 | HUD_DrawTransparentTriangles |
129 | Render any triangles with transparent rendermode needs here |
132 | void DLLEXPORT HUD_DrawTransparentTriangles( void ) |
135 | #if defined( TEST_IT ) |
148 | #include "r_studioint.h" |
150 | extern engine_studio_api_t IEngineStudio; |
152 | bool g_bInitialised = false; |
154 | extern PFNGLACTIVETEXTUREARBPROC glActiveTextureARB; |
155 | extern PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB; |
157 | CGcontext g_cgContext; |
158 | CGprofile g_cgVertProfile; |
159 | CGprofile g_cgFragProfile; |
161 | CGprogram g_cgVP_GlowDarken; |
162 | CGprogram g_cgFP_GlowDarken; |
164 | CGprogram g_cgVP_GlowBlur; |
165 | CGprogram g_cgFP_GlowBlur; |
167 | CGprogram g_cgVP_GlowCombine; |
168 | CGprogram g_cgFP_GlowCombine; |
170 | CGparameter g_cgpVP0_ModelViewMatrix; |
171 | CGparameter g_cgpVP1_ModelViewMatrix; |
172 | CGparameter g_cgpVP1_XOffset; |
173 | CGparameter g_cgpVP1_YOffset; |
174 | CGparameter g_cgpVP2_ModelViewMatrix; |
176 | unsigned int g_uiSceneTex; |
177 | unsigned int g_uiBlurTex; |
179 | bool LoadProgram(CGprogram* pDest, CGprofile profile, const char* szFile) |
181 | const char* szGameDir = gEngfuncs.pfnGetGameDirectory(); |
183 | sprintf(file, "%s/%s", szGameDir, szFile); |
185 | *pDest = cgCreateProgramFromFile(g_cgContext, CG_SOURCE, file, profile, "main", 0); |
187 | MessageBox(NULL, cgGetErrorString(cgGetError()), NULL, NULL); |
191 | cgGLLoadProgram(*pDest); |
196 | void InitScreenGlow(void) |
198 | if (IEngineStudio.IsHardware() != 1) |
201 | gEngfuncs.pfnRegisterVariable("cg_blur_steps", "4", 0); |
203 | // OPENGL EXTENSION LOADING |
205 | glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC)wglGetProcAddress("glActiveTextureARB"); |
209 | unsigned char* pBlankTex = new unsigned char[ScreenWidth*ScreenHeight*3]; |
210 | memset(pBlankTex, 0, ScreenWidth*ScreenHeight*3); |
212 | glGenTextures(1, &g_uiSceneTex); |
213 | glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiSceneTex); |
214 | glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MIN_FILTER, GL_LINEAR); |
215 | glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MAG_FILTER, GL_LINEAR); |
216 | glTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB8, ScreenWidth, ScreenHeight, 0, GL_RGB8, GL_UNSIGNED_BYTE, pBlankTex); |
218 | glGenTextures(1, &g_uiBlurTex); |
219 | glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiBlurTex); |
220 | glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MIN_FILTER, GL_LINEAR); |
221 | glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MAG_FILTER, GL_LINEAR); |
222 | glTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB8, ScreenWidth/2, ScreenHeight/2, 0, GL_RGB8, GL_UNSIGNED_BYTE, pBlankTex); |
226 | g_bInitialised = true; |
230 | g_cgContext = cgCreateContext(); |
232 | MessageBox(NULL, "Couldn't make Cg context", NULL, NULL); |
238 | g_cgVertProfile = cgGLGetLatestProfile(CG_GL_VERTEX); |
239 | if (g_cgVertProfile == CG_PROFILE_UNKNOWN) { |
240 | MessageBox(NULL, "Couldn't fetch valid VP profile", NULL, NULL); |
244 | cgGLSetOptimalOptions(g_cgVertProfile); |
248 | if (!LoadProgram(&g_cgVP_GlowDarken, g_cgVertProfile, "cgprograms/glow_darken_vp.cg")) |
251 | if (!LoadProgram(&g_cgVP_GlowBlur, g_cgVertProfile, "cgprograms/glow_blur_vp.cg")) |
254 | if (!LoadProgram(&g_cgVP_GlowCombine, g_cgVertProfile, "cgprograms/glow_combine_vp.cg")) |
259 | g_cgpVP0_ModelViewMatrix = cgGetNamedParameter(g_cgVP_GlowDarken, "ModelViewProj"); |
261 | g_cgpVP1_ModelViewMatrix = cgGetNamedParameter(g_cgVP_GlowBlur, "ModelViewProj"); |
262 | g_cgpVP1_XOffset = cgGetNamedParameter(g_cgVP_GlowBlur, "XOffset"); |
263 | g_cgpVP1_YOffset = cgGetNamedParameter(g_cgVP_GlowBlur, "YOffset"); |
265 | g_cgpVP2_ModelViewMatrix = cgGetNamedParameter(g_cgVP_GlowCombine, "ModelViewProj"); |
269 | g_cgFragProfile = cgGLGetLatestProfile(CG_GL_FRAGMENT); |
270 | if (g_cgFragProfile == CG_PROFILE_UNKNOWN) { |
271 | MessageBox(NULL, "Couldn't fetch valid FP profile", NULL, NULL); |
275 | cgGLSetOptimalOptions(g_cgFragProfile); |
279 | if (!LoadProgram(&g_cgFP_GlowDarken, g_cgFragProfile, "cgprograms/glow_darken_fp.cg")) |
282 | if (!LoadProgram(&g_cgFP_GlowBlur, g_cgFragProfile, "cgprograms/glow_blur_fp.cg")) |
285 | if (!LoadProgram(&g_cgFP_GlowCombine, g_cgFragProfile, "cgprograms/glow_combine_fp.cg")) |
288 | void DrawQuad(int width, int height) |
293 | glVertex3f(0, 1, -1); |
294 | glTexCoord2f(0,height); |
295 | glVertex3f(0, 0, -1); |
296 | glTexCoord2f(width,height); |
297 | glVertex3f(1, 0, -1); |
298 | glTexCoord2f(width,0); |
299 | glVertex3f(1, 1, -1); |
304 | void DoBlur(unsigned int uiSrcTex, unsigned int uiTargetTex, int srcTexWidth, int srcTexHeight, int destTexWidth, int destTexHeight, float xofs, float yofs) |
306 | cgGLBindProgram(g_cgVP_GlowBlur); |
307 | cgGLBindProgram(g_cgFP_GlowBlur); |
309 | glActiveTextureARB(GL_TEXTURE0_ARB); |
310 | glEnable(GL_TEXTURE_RECTANGLE_NV); |
311 | glBindTexture(GL_TEXTURE_RECTANGLE_NV, uiSrcTex); |
313 | glActiveTextureARB(GL_TEXTURE1_ARB); |
314 | glEnable(GL_TEXTURE_RECTANGLE_NV); |
315 | glBindTexture(GL_TEXTURE_RECTANGLE_NV, uiSrcTex); |
317 | glActiveTextureARB(GL_TEXTURE2_ARB); |
318 | glEnable(GL_TEXTURE_RECTANGLE_NV); |
319 | glBindTexture(GL_TEXTURE_RECTANGLE_NV, uiSrcTex); |
321 | glActiveTextureARB(GL_TEXTURE3_ARB); |
322 | glEnable(GL_TEXTURE_RECTANGLE_NV); |
323 | glBindTexture(GL_TEXTURE_RECTANGLE_NV, uiSrcTex); |
325 | cgGLSetParameter1f(g_cgpVP1_XOffset, xofs); |
326 | cgGLSetParameter1f(g_cgpVP1_YOffset, yofs); |
328 | glViewport(0, 0, destTexWidth, destTexHeight); |
330 | DrawQuad(srcTexWidth, srcTexHeight); |
332 | glBindTexture(GL_TEXTURE_RECTANGLE_NV, uiTargetTex); |
333 | glCopyTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB, 0, 0, destTexWidth, destTexHeight, 0); |
336 | void RenderScreenGlow(void) |
338 | if (IEngineStudio.IsHardware() != 1) |
344 | if ((int)gEngfuncs.pfnGetCvarFloat("cg_blur_steps") == 0) |
347 | // STEP 1: Grab the screen and put it into a texture |
349 | glActiveTextureARB(GL_TEXTURE0_ARB); |
350 | glEnable(GL_TEXTURE_RECTANGLE_NV); |
352 | glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiSceneTex); |
353 | glCopyTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB, 0, 0, ScreenWidth, ScreenHeight, 0); |
355 | // STEP 2: Set up an orthogonal projection |
357 | glMatrixMode(GL_MODELVIEW); |
361 | glMatrixMode(GL_PROJECTION); |
364 | glOrtho(0, 1, 1, 0, 0.1, 100); |
368 | // STEP 3: Initialize Cg programs and parameters for darkening mid to dark areas of the scene |
370 | cgGLEnableProfile(g_cgVertProfile); |
371 | cgGLEnableProfile(g_cgFragProfile); |
373 | cgGLBindProgram(g_cgVP_GlowDarken); |
374 | cgGLBindProgram(g_cgFP_GlowDarken); |
376 | cgGLSetStateMatrixParameter(g_cgpVP0_ModelViewMatrix, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY); |
378 | // STEP 4: Render the current scene texture to a new, lower-res texture, darkening non-bright areas of the scene |
380 | glViewport(0, 0, ScreenWidth/2, ScreenHeight/2); |
382 | glActiveTextureARB(GL_TEXTURE0_ARB); |
383 | glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiSceneTex); |
385 | DrawQuad(ScreenWidth, ScreenHeight); |
387 | glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiBlurTex); |
388 | glCopyTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB, 0, 0, ScreenWidth/2, ScreenHeight/2, 0); |
390 | // STEP 5: Initialise Cg programs and parameters for blurring |
392 | cgGLBindProgram(g_cgVP_GlowBlur); |
393 | cgGLBindProgram(g_cgFP_GlowBlur); |
395 | cgGLSetStateMatrixParameter(g_cgpVP1_ModelViewMatrix, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY); |
397 | // STEP 6: Apply blur |
399 | int iNumBlurSteps = (int)gEngfuncs.pfnGetCvarFloat("cg_blur_steps"); |
400 | for (int i = 0; i < iNumBlurSteps; i++) { |
401 | DoBlur(g_uiBlurTex, g_uiBlurTex, ScreenWidth/2, ScreenHeight/2, ScreenWidth/2, ScreenHeight/2, 1, 0); |
402 | DoBlur(g_uiBlurTex, g_uiBlurTex, ScreenWidth/2, ScreenHeight/2, ScreenWidth/2, ScreenHeight/2, 0, 1); |
405 | // STEP 7: Set up Cg for combining blurred glow with original scene |
407 | cgGLBindProgram(g_cgVP_GlowCombine); |
408 | cgGLBindProgram(g_cgFP_GlowCombine); |
410 | cgGLSetStateMatrixParameter(g_cgpVP2_ModelViewMatrix, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY); |
412 | glActiveTextureARB(GL_TEXTURE0_ARB); |
413 | glEnable(GL_TEXTURE_RECTANGLE_NV); |
414 | glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiSceneTex); |
416 | glActiveTextureARB(GL_TEXTURE1_ARB); |
417 | glEnable(GL_TEXTURE_RECTANGLE_NV); |
418 | glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiBlurTex); |
420 | // STEP 8: Do the combination, rendering to the screen without grabbing it to a texture |
422 | glViewport(0, 0, ScreenWidth, ScreenHeight); |
424 | DrawQuad(ScreenWidth/2, ScreenHeight/2); |
426 | // STEP 9: Restore the original projection and modelview matrices and disable rectangular textures on all units |
428 | glMatrixMode(GL_PROJECTION); |
431 | glMatrixMode(GL_MODELVIEW); |
434 | cgGLDisableProfile(g_cgVertProfile); |
435 | cgGLDisableProfile(g_cgFragProfile); |
437 | glActiveTextureARB(GL_TEXTURE0_ARB); |
438 | glDisable(GL_TEXTURE_RECTANGLE_NV); |
440 | glActiveTextureARB(GL_TEXTURE1_ARB); |
441 | glDisable(GL_TEXTURE_RECTANGLE_NV); |
443 | glActiveTextureARB(GL_TEXTURE2_ARB); |
444 | glDisable(GL_TEXTURE_RECTANGLE_NV); |
446 | glActiveTextureARB(GL_TEXTURE3_ARB); |
447 | glDisable(GL_TEXTURE_RECTANGLE_NV); |
449 | glActiveTextureARB(GL_TEXTURE0_ARB); |
452 | void DLLEXPORT HUD_DrawNormalTriangles( void ) |
454 | if (g_HardwareCapable) |
456 | glPushAttrib(GL_ALL_ATTRIB_BITS); |
457 | glActiveTextureARB(GL_TEXTURE1_ARB); |
458 | glClientActiveTextureARB(GL_TEXTURE1_ARB); |
460 | glDisable(GL_TEXTURE_2D); |
462 | glActiveTextureARB(GL_TEXTURE0_ARB); |
463 | glClientActiveTextureARB(GL_TEXTURE0_ARB); |
470 | gHUD.m_Spectator.DrawOverview(); |
475 | HUD_DrawTransparentTriangles |
477 | Render any triangles with transparent rendermode needs here |
480 | void DLLEXPORT HUD_DrawTransparentTriangles( void ) |
482 | if (g_HardwareCapable) |
Отправлено Дядя Миша 13-04-2009 в 15:37:
йолки-моталки. ну сколько раз говорено: большой исходник - в аттач. 
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено GuNsHiP 13-04-2009 в 16:43:
Прошу свои извинения, в следующий раз - учту
Добавлено 13-04-2009 в 20:43:
Ладно, глоу не нужен...
Главное это как сделать базуку без прицела и
как сделать так, чтобы оружие стреляло только там, где есть небо
И ещё, добавил в раздел туториалы - туториал по созданию ПлазмаГана
Отправлено FiEctro 13-04-2009 в 17:14:
//#include <cg/cg.h>
//#include <cg/cgGL.h>
Это зря закоментил. У тебя есть glow_darken_fp.cg , glow_blur_fp.cg , glow_combine_fp.cg файлы ?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено GuNsHiP 13-04-2009 в 17:20:
Нет ниодного...если у тебя есть, скинь.(и скажи куда их вставлять)
Отправлено Ku2zoff 13-04-2009 в 18:01:
Имхо глоу нафиг не надо, я например на эту фигню забил. У меня впечатление, что FiEctro всё ещё пытается что-то замутить с граф.рендерером Паранойи, который я изуродовал
Цитата:
#include "gl_main.h"
Точно не знаю, можно ли провести проверку на присутствие неба в точке стрельбы, но если сделать некий триггер, при нахождении игрока в котором пушка стреляет, а вне него нет, то такой
вариант вполне реализуем.
Отправлено GuNsHiP 13-04-2009 в 18:10:
Да, с глоу покончено....Мне и на этих длл подходит
Но всё вавно FiEctro спасибо
Ku2zoff
Кстати, ты мне напомнил - помнишь ты(или нет) искал исходники паработов на хл1.Ты их себе ставил?Если да, то как. Я скачал исходники и что с ними делать не имею представления.
Отправлено FiEctro 13-04-2009 в 18:18:
Ku2zoff
Ничего я не пытаюсь. Это из исходников Оттис мода еще.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено GuNsHiP 13-04-2009 в 18:43:
Так что, кто-нибудь знает как добавить ботов в Халф-лайф1?
Отправлено Дядя Миша 13-04-2009 в 20:09:
Цитата:
Точно не знаю, можно ли провести проверку на присутствие неба в точке стрельбы
теоретически возможно писать некую инфу в амбиентные звуки лифов, которые в хл не используются. Но дело в том, что звук не отвечает за прямую видимость, soundpvs.cpp придется серъезно переписать__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Ku2zoff 14-04-2009 в 03:43:
GuNsHiP ставил я паработов. Если мод чисто сетевой, то вполне можно навесить их внешней дллкой. А вот если мод ещё и сингловый, то тут трабла: глюки после сохранения и последующей загрузки, тогда их надо интегрировать в дллку мода, а это трудновато для новичка, хотя бы потому, что придётся переписывать "обертки" для некоторых движковых функций, в основном использующихся для передачи мессаг на клиент.
Отправлено AlMod 14-04-2009 в 05:19:
По поводу неба - я уже не помню как в сдк, но в AMXX была функция TraceLine. Так вот, все что на самом деле нужно это пустить трейс вертикально вверх и проверить текстуру потолка - SKY = Улица, другая текстура - помещение. Вариант не идеален (под навесами на улице например не будет работать) но я думаю сгодится
__________________
Сайт поддержки кодеров на AMX Mod X
Отправлено XaeroX 14-04-2009 в 05:29:
Не только под навесами, но и вот, скажем, под лампой фонаря. Тогда хотя бы трейса 4 пускать со слегка разными отклонениями от "вверх".
__________________
Отправлено AlMod 14-04-2009 в 05:42:
2XaeroX, согласен - 4 трейса безусловно будет пустить лучше
add к посту моему:
вот нашел немного кода