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=956)
Отправлено NorthWanderer 23-10-2007 в 13:34:
проблема с туманом
делал туман по тутору на http://www.game-lab.com/index.php?s...n=showtut&id=15
так возникает ошибка при компиляции:
fatal error C1083: Cannot open include file: 'glgl.h': No such file or directory
opengl32.lib подключил
Отправлено XaeroX 23-10-2007 в 14:08:
NorthWanderer ссылка не пашет...
Подозреваю, что пропущен слеш между gl и gl.h
__________________
Отправлено NorthWanderer 23-10-2007 в 14:40:
когда я пишу "gl/gl.h"
вылазиет ошибка:
single-player source\common\r_studioint.h(136) : error C2629: unexpected 'void ('
single-player source\common\r_studioint.h(136) : error C2238: unexpected token(s) preceding ';'
да вот та статья похоже она на француском:
Отправлено XaeroX 23-10-2007 в 15:10:
NorthWanderer тебе надо писать вопервых #include <gl/gl.h>, а вовторых, покажи код, который выдает ошибки. Либо ты чтото там испортил сам, либо у тебя глючный gl.h
__________________
Отправлено NorthWanderer 23-10-2007 в 15:35:
это в R_STUDIOINT.H
C++ Source Code:
1 | void ( *SV_StudioSetupBones )( struct model_s *pModel, |
6 | const byte *pcontroller, |
9 | const edict_t *pEdict ); |
10 | } sv_blending_interface_t; |
Добавлено 23-10-2007 в 21:35:
gl.h дифаултный с Visual C++ 6.0
Отправлено XaeroX 23-10-2007 в 16:00:
NorthWanderer у тебя какая то чушь в R_STUDIOINT.H. Замени на оригинал из СДК.
__________________
Отправлено NorthWanderer 23-10-2007 в 16:28:
я покзал где ошика возникает вот полный фаил
C++ Source Code:
1 | //========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ |
6 | //============================================================================= |
8 | #if !defined( R_STUDIOINT_H ) |
14 | #define STUDIO_INTERFACE_VERSION 1 |
16 | typedef struct engine_studio_api_s |
18 | // Allocate number*size bytes and zero it |
19 | void *( *Mem_Calloc ) ( int number, size_t size ); |
20 | // Check to see if pointer is in the cache |
21 | void *( *Cache_Check ) ( struct cache_user_s *c ); |
22 | // Load file into cache ( can be swapped out on demand ) |
23 | void ( *LoadCacheFile ) ( char *path, struct cache_user_s *cu ); |
24 | // Retrieve model pointer for the named model |
25 | struct model_s *( *Mod_ForName ) ( const char *name, int crash_if_missing ); |
26 | // Retrieve pointer to studio model data block from a model |
27 | void *( *Mod_Extradata ) ( struct model_s *mod ); |
28 | // Retrieve indexed model from client side model precache list |
29 | struct model_s *( *GetModelByIndex ) ( int index ); |
30 | // Get entity that is set for rendering |
31 | struct cl_entity_s * ( *GetCurrentEntity ) ( void ); |
32 | // Get referenced player_info_t |
33 | struct player_info_s *( *PlayerInfo ) ( int index ); |
34 | // Get most recently received player state data from network system |
35 | struct entity_state_s *( *GetPlayerState ) ( int index ); |
37 | struct cl_entity_s * ( *GetViewEntity ) ( void ); |
38 | // Get current frame count, and last two timestampes on client |
39 | void ( *GetTimes ) ( int *framecount, double *current, double *old ); |
40 | // Get a pointer to a cvar by name |
41 | struct cvar_s *( *GetCvar ) ( const char *name ); |
42 | // Get current render origin and view vectors ( up, right and vpn ) |
43 | void ( *GetViewInfo ) ( float *origin, float *upv, float *rightv, float *vpnv ); |
44 | // Get sprite model used for applying chrome effect |
45 | struct model_s *( *GetChromeSprite ) ( void ); |
46 | // Get model counters so we can incement instrumentation |
47 | void ( *GetModelCounters ) ( int **s, int **a ); |
48 | // Get software scaling coefficients |
49 | void ( *GetAliasScale ) ( float *x, float *y ); |
51 | // Get bone, light, alias, and rotation matrices |
52 | float ****( *StudioGetBoneTransform ) ( void ); |
53 | float ****( *StudioGetLightTransform )( void ); |
54 | float ***( *StudioGetAliasTransform ) ( void ); |
55 | float ***( *StudioGetRotationMatrix ) ( void ); |
57 | // Set up body part, and get submodel pointers |
58 | void ( *StudioSetupModel ) ( int bodypart, void **ppbodypart, void **ppsubmodel ); |
59 | // Check if entity's bbox is in the view frustum |
60 | int ( *StudioCheckBBox ) ( void ); |
61 | // Apply lighting effects to model |
62 | void ( *StudioDynamicLight ) ( struct cl_entity_s *ent, struct alight_s *plight ); |
63 | void ( *StudioEntityLight ) ( struct alight_s *plight ); |
64 | void ( *StudioSetupLighting ) ( struct alight_s *plighting ); |
67 | void ( *StudioDrawPoints ) ( void ); |
69 | // Draw hulls around bones |
70 | void ( *StudioDrawHulls ) ( void ); |
71 | // Draw bbox around studio models |
72 | void ( *StudioDrawAbsBBox ) ( void ); |
74 | void ( *StudioDrawBones ) ( void ); |
75 | // Loads in appropriate texture for model |
76 | void ( *StudioSetupSkin ) ( void *ptexturehdr, int index ); |
77 | // Sets up for remapped colors |
78 | void ( *StudioSetRemapColors ) ( int top, int bottom ); |
79 | // Set's player model and returns model pointer |
80 | struct model_s *( *SetupPlayerModel ) ( int index ); |
81 | // Fires any events embedded in animation |
82 | void ( *StudioClientEvents ) ( void ); |
83 | // Retrieve/set forced render effects flags |
84 | int ( *GetForceFaceFlags ) ( void ); |
85 | void ( *SetForceFaceFlags ) ( int flags ); |
86 | // Tell engine the value of the studio model header |
87 | void ( *StudioSetHeader ) ( void *header ); |
88 | // Tell engine which model_t * is being renderered |
89 | void ( *SetRenderModel ) ( struct model_s *model ); |
91 | // Final state setup and restore for rendering |
92 | void ( *SetupRenderer ) ( int rendermode ); |
93 | void ( *RestoreRenderer ) ( void ); |
95 | // Set render origin for applying chrome effect |
96 | void ( *SetChromeOrigin ) ( void ); |
98 | // True if using D3D/OpenGL |
99 | int ( *IsHardware ) ( void ); |
101 | // Only called by hardware interface |
102 | void ( *GL_StudioDrawShadow ) ( void ); |
103 | void ( *GL_SetRenderMode ) ( int mode ); |
104 | } engine_studio_api_t; |
106 | typedef struct server_studio_api_s |
108 | // Allocate number*size bytes and zero it |
109 | void *( *Mem_Calloc ) ( int number, size_t size ); |
110 | // Check to see if pointer is in the cache |
111 | void *( *Cache_Check ) ( struct cache_user_s *c ); |
112 | // Load file into cache ( can be swapped out on demand ) |
113 | void ( *LoadCacheFile ) ( char *path, struct cache_user_s *cu ); |
114 | // Retrieve pointer to studio model data block from a model |
115 | void *( *Mod_Extradata ) ( struct model_s *mod ); |
116 | } server_studio_api_t; |
120 | typedef struct r_studio_interface_s |
123 | int ( *StudioDrawModel ) ( int flags ); |
124 | int ( *StudioDrawPlayer ) ( int flags, struct entity_state_s *pplayer ); |
125 | } r_studio_interface_t; |
127 | extern r_studio_interface_t *pStudioAPI; |
130 | #define SV_BLENDING_INTERFACE_VERSION 1 |
132 | typedef struct sv_blending_interface_s |
136 | void ( *SV_StudioSetupBones )( struct model_s *pModel, |
141 | const byte *pcontroller, |
142 | const byte *pblending, |
144 | const edict_t *pEdict ); |
145 | } sv_blending_interface_t; |
147 | #endif // R_STUDIOINT_H |
Отправлено XaeroX 23-10-2007 в 16:30:
нет тут никаких ошибок, оно обязано компилироваться. 
__________________
Отправлено NorthWanderer 23-10-2007 в 17:15:
Так тогда обьясню как я вставлял туман по порядку:
1. создал fog.cpp с таким кодом
C++ Source Code:
3 | * Copyright © 1996-2001, Valve LLC. All rights reserved. |
5 | * this product contains software technology licensed from Id |
6 | * Software, Inc. ("Id Technology"). Id Technology © 1996 Id Software, Inc. |
9 | * Use, distribution, and modification of this source code and/or resulting |
10 | * object code is restricted to non-commercial enhancements to products from |
11 | * Valve LLC. All other use, distribution, or modification is prohibited |
12 | * without written permission from Valve LLC. |
18 | // implementation of CHudFog class |
21 | #define WIN32_LEAN_AND_MEAN |
26 | #include "r_studioint.h" |
27 | extern engine_studio_api_t IEngineStudio; |
39 | DECLARE_MESSAGE(m_Fog, Fog) |
41 | int CHudFog::Init(void) |
44 | gHUD.AddHudElem(this); |
49 | int CHudFog::VidInit(void) |
54 | int CHudFog:: MsgFunc_Fog(const char *pszName, int iSize, void *pbuf ) |
56 | m_iFlags |= HUD_ACTIVE; |
59 | BEGIN_READ( pbuf, iSize ); |
71 | int CHudFog::Draw(float flTime) |
73 | if( r == 0 && g == 0 && b == 0 )//si c'est noir on affiche pas car on ne verrait rien |
75 | if ( IEngineStudio.IsHardware() != 1) |
80 | float fDensity = 0.5, fStart = s, fEnd = e; |
84 | fogColor[0] = ((GLfloat)r)/255.0f; |
85 | fogColor[1] = ((GLfloat)g)/255.0f; |
86 | fogColor[2] = ((GLfloat)b)/255.0f; |
87 | fogColor[3] = ((GLfloat)a)/255.0f; |
89 | glFogi(GL_FOG_MODE, GL_LINEAR); |
90 | glFogfv(GL_FOG_COLOR, fogColor); |
91 | glFogf(GL_FOG_DENSITY, fDensity); |
92 | glHint(GL_FOG_HINT, GL_NICEST); |
93 | glFogf( GL_FOG_START, fStart); |
94 | glFogf( GL_FOG_END, fEnd ); |
потом в hud.h
после этого
C++ Source Code:
2 | //----------------------------------------------------- |
9 | int m_iFlags; // active, moving, |
10 | virtual ~CHudBase() {} |
11 | virtual int Init( void ) {return 0;} |
12 | virtual int VidInit( void ) {return 0;} |
13 | virtual int Draw(float flTime) {return 0;} |
14 | virtual void Think(void) {return;} |
15 | virtual void Reset(void) {return;} |
16 | virtual void InitHUDData( void ) {} // called every time a server is connected to |
28 | //----------------------------------------------------- |
30 | #include "..\game_shared\voice_status.h" |
31 | #include "hud_spectator.h" |
35 | //----------------------------------------------------- |
это:
C++ Source Code:
2 | //----------------------------------------------------- |
4 | class CHudFog : public CHudBase |
9 | int Draw(float flTime); |
10 | int MsgFunc_Fog(const char *pszName, int iSize, void *pbuf ); |
потом ниже и там же после этого:
C++ Source Code:
это:
C++ Source Code:
в hud.cpp
C++ Source Code:
3 | m_Fog.Init(); //новая сторчка |
ниже
C++ Source Code:
3 | m_Fog.VidInit(); //новая сторчка |
по тутариалу все вроде там еше на сервере описано не много но сервер компелится нормально
Отправлено XaeroX 23-10-2007 в 17:18:
Rebuild All пробовал?
__________________
Отправлено Дядя Миша 23-10-2007 в 17:58:
Цитата:
// server blending
#define SV_BLENDING_INTERFACE_VERSION 1
Эээээ, это еще что за лажа?
Отправлено Government-Man 23-10-2007 в 18:27:
Дядя Миша это какая-то дурацкая и неуместная пародия на сорсовские интерфейсы и их версии.
У меня в c3d почти также... =)
Отправлено XaeroX 23-10-2007 в 18:34:
Дядя Миша это какой то продвинутый блендинг, типа как в КС, наверное...
__________________
Отправлено NorthWanderer 23-10-2007 в 18:37:
Цитата:
Дядя Миша писал:
Эээээ, это еще что за лажа?
я не знаю это стандартный фаил в sdk 2.3
Добавлено 24-10-2007 в 00:37:
тут чето написано
Grâce au nouveau SDK (2.2 et plus),
мож код для sdk 2.2 а на 2.3 не идет
Отправлено Тренсфер 24-10-2007 в 07:08:
Ты случайно не про тот французский тутор ? Если он в нём ничего не работает, у меня есть мой рабочий тутор по туману в 80% готовности. Тем боле при подкючении опенгл иногда приисходит ругань на 4 строчки -надо их закомментировать. Подожди пару дней и выложу норамальный тутор по этому делу, а то в том я как минимум нашёл одну ошибку в С++ и несколько ошибок по опенгл (в результате которых туман не прозрацный
).
__________________
Хотелось бы, чтобы не только хотелось...
Отправлено XaeroX 24-10-2007 в 08:37:
NorthWanderer возможно, но у тебя и правда очень странная ошибка компилятора. Чем собираешь, шестой студией?
__________________
Отправлено FiEctro 24-10-2007 в 12:17:
XaeroX скорей всего у него gl.h не тот который нужен ...
Ведь с инете я находил около трёх вариантов этого файла ...
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено NorthWanderer 24-10-2007 в 13:40:
Цитата:
XaeroX писал:
NorthWanderer возможно, но у тебя и правда очень странная ошибка компилятора. Чем собираешь, шестой студией?
она самая а че с ней не так
Отправлено FiEctro 24-10-2007 в 14:07:
NorthWanderer да все что угодно ...
У меня к примеру иногда бывает что студия не компилит cpp шники ругаясь на какойто vc60.pdb ... лечится не знаю как ... но после повторной компиляции глюк пропадает ( может появляться в новых местах) ...
Но всеже я думаю что дело в корявом gl.h имхо я тоже тогда сколько немог скомпилить гыконтовские зеркала т.к. требуемые хеадеры имели совершенно другое содержание
...
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено Дядя Миша 24-10-2007 в 16:10:
NorthWanderer никакой это у тебя не стандартный файл!
это ты сам чего-то дописал и забыл.
Отправлено NorthWanderer 24-10-2007 в 16:30:
где дописал
?
и че забыл
?
в r_studioint.h или в gl.h
я туда не когда не лазил вобше
Добавлено 24-10-2007 в 22:30:
а Visual C++ я с рапидраша скачал
Отправлено Тренсфер 24-10-2007 в 16:34:
NorthWanderer при инициализации опенгл у тебя обязательно вызовут ругань компилятора строчки:
C++ Source Code:
1 | void ( *SV_StudioSetupBones )( struct model_s *pModel, |
6 | const byte *pcontroller, |
9 | const edict_t *pEdict ); |
в r_studioint.h закоментируй их обязательно!
Подожди пожалуста два дня и я дам тебе полноценный тутор о тумане.__________________
Хотелось бы, чтобы не только хотелось...
Отправлено NorthWanderer 24-10-2007 в 16:36:
Жду С нетерпением
Отправлено XaeroX 24-10-2007 в 17:47:
Цитата:
Тренсфер писал:
при инициализации опенгл у тебя обязательно вызовут ругань компилятора строчки:
Это почему же - обязательно?__________________
Отправлено Government-Man 24-10-2007 в 19:54:
Цитата:
Тренсфер писал:
при инициализации опенгл у тебя обязательно вызовут ругань компилятора строчки:
Почему же? Нормальное определение указателя на функцию... Сейчас специально проверил - все работает.
Этой ошибки просто быть не может... Разве что NorthWanderer cpp-файл в каком-нить редакторе типа ворда редактировал.
Отправлено Troll 24-10-2007 в 21:45:
Блин, а не проще забить на gl? Если тот-же туман есть в engfuncs->pTriApi-> ?
Заменить это -
glFogi(GL_FOG_MODE, GL_LINEAR);
glFogfv(GL_FOG_COLOR, fogColor);
glFogf(GL_FOG_DENSITY, fDensity);
glHint(GL_FOG_HINT, GL_NICEST);
glFogf( GL_FOG_START, fStart);
glFogf( GL_FOG_END, fEnd );
glEnable(GL_FOG);
на это -
oEngfuncs.pTriAPI->Fog(fogColor,fStart,fEnd,1);
И ненадо gl.h
Отправлено Тренсфер 25-10-2007 в 05:27:
А, понятно... Просто в французком туторе обьявляются две строчки
C++ Source Code:
//и функция обьявленая там: |
extern engine_studio_api_t IEngineStudio; |
Потом какая-то проверка :
C++ Source Code:
2 | int CHudFog::Draw(float flTime) |
4 | if ( IEngineStudio.IsHardware() != 1) |
Для чего эта проверка в тумане на неравность "аппаратных средств" 1 я так и не догнал
Очевидно это очередной баг тутора, который я признаюсь и без этого не работал
.
Добавлено 25-10-2007 в 09:27:
Без этих строк всё прекрасно работает__________________
Хотелось бы, чтобы не только хотелось...
Отправлено XaeroX 25-10-2007 в 07:31:
Цитата:
Тренсфер писал:
Для чего эта проверка в тумане на неравность "аппаратных средств" 1 я так и не догнал
Для того чтобы в софтварном режиме не выполнялся этот код - все равно не заработает. Что тут непонятного?
__________________
Отправлено Тренсфер 25-10-2007 в 08:08:
Ну раз не будет работать само, нафиг тогда лишний код и проблемы
Удалить его совсе что бы не висел 
__________________
Хотелось бы, чтобы не только хотелось...
Отправлено Government-Man 25-10-2007 в 08:49:
Цитата:
Тренсфер писал:
Ну раз не будет работать само
А вдруг оно само не будет и другим не даст?.. Так что лучше проверять все что можно! Хороший программист должен быть параноиком.
Отправлено Troll 25-10-2007 в 09:57:
Потому что иногда такой код может вылететь, так как будут обращения к библиотеке opengl. Даже на d3d может вылететь. Поэтому самое правильное это проверка -
if(!IEngineStudio.IsHardware())
return 0;
И после сделать туман через pTriApi. Тогда полётов точно не будет.
Отправлено Дядя Миша 25-10-2007 в 11:20:
Цитата:
Поэтому самое правильное это проверка -
if(!IEngineStudio.IsHardware())
return 0;
Неправильная это проверка. Hardware еще не указывает явно рендерим мы в d3d или в gl.
вот так проверять надо
Добавлено 25-10-2007 в 15:20:
Troll туман для триапи один чорт не работает в d3d, к тому же в гл можно настроить больше опций, по сравнению с триапи.
А вообще - лучше всего табличный туман
Отправлено XaeroX 25-10-2007 в 11:47:
Цитата:
Дядя Миша писал:
А вообще - лучше всего табличный туман

__________________
Отправлено Troll 25-10-2007 в 12:22:
Правильная это проверка!
Туман через ТриАпи не будут работать в d3d но и не будет летать как в случае с просто вызовом gl функций.
А вообще лучше сделать булевое разделение и сделать разделение d3d/gl, рендерить туман и прочие фишки поотдельности для каждого рендера.
glGetString - работает только в опенгл.
Отправлено Дядя Миша 25-10-2007 в 13:24:
Troll вообще-то d3d render в халфе нет.
есть FakeGL клиент, преобразующий ogl запросы в d3d команды.
И проверка это неправильная в данном случае, я уже объяснил почему.
Отправлено Тренсфер 25-10-2007 в 14:25:
Ну раз не будет на том режиме работать так зачем проверять? Тогода ведь игрок может и не заметить наш туман не влючив опегл и тогда все старания с туманом будут равны 0. Или отключить намеренно, пройдя игру слишком просто.
Я видал кучу обзоров на сити 17 где Иоанн часто говорил о том что замечал туман только когда проходил моды на третий раз влючив опегл.
Но тут уже личные требвания программиста, о вскусах не спорят
Кто-то гонится за размером диллок, кто то за скоростью выполнения, кто-то за серх графикой, кто-то за физикой... Каждый вибирает то что ему нравится, на пример лично для одного меня больше нравится без проверок
, вылет на совт варе для меня лучше чем невидимыйтуман.
Добавлено 25-10-2007 в 18:25:
Дядя Миша Спасибо за проверку -учту в туторе.
__________________
Хотелось бы, чтобы не только хотелось...
Отправлено XaeroX 25-10-2007 в 16:03:
Цитата:
Дядя Миша писал:
вообще-то d3d render в халфе нет.
есть FakeGL клиент, преобразующий ogl запросы в d3d команды.
да есть он там, есть 
никто там огл запросы не преобразует, что ты за ерунду пишешь 
__________________
Отправлено Troll 25-10-2007 в 20:38:
Цитата:
XaeroX писал:
Цитата:
Дядя Миша писал:
вообще-то d3d render в халфе нет.
есть FakeGL клиент, преобразующий ogl запросы в d3d команды.
да есть он там, есть
никто там огл запросы не преобразует, что ты за ерунду пишешь
Во-во, у меня аж вот так произошло
Цитата:
Дядя Миша писал:
Неправильная это проверка. Hardware еще не указывает явно рендерим мы в d3d или в gl.
вот так проверять надо
code:
//Check video mode
if (glGetString(GL_RENDERER))
{
}
Это у тебя она совершенно неправильная. Читай прошлую страницу - мы сначала проверяем на то что этот код будет исполнятся хотябы в одном из трёх рендеров.
Он правилен у тебя лишь тем что он просто невыполнится, так как не эта "gl" ненайдётся, об этом чуть ниже.
if(!IEngineStudio.IsHardware())
return 0;
Если true то мы разумеется исполняем код дальше и у нас остаётся только два рендера + плюс движок не делает лишнюю работу. Дальше почему я говорил использовать
oEngfuncs.pTriAPI->Fog(fogColor,fStart,fEnd,1);
Поскольку если протрейсить этот< туман то можно увидеть что в d3d он возвращает ноль (невыполняется функция).
Вызывая любую gl функцию на d3d мы получим либо крах либо ничего не получим, поскольку библиотека даже и не находится в процессе HL.
Вообще как я делаю -
Есть два буля
static bool d3d = true;
static bool opengl = false;
Если в модуле HL я обнаруживаю модуль opengl32.dll, то следовательно я выставляю их наоборот.
Далее пример функции -
void DrawGlFog();
void DrawD3dFog();
if(opengl)
DrawFog();
else if(d3d)
DrawD3dFog();
Что-то такого рода. Да и если мне говорится что EngStudio.IsHardware == false, я просто кидаю юзеру мессаджбокс: мол, переставь режим детка
Отправлено XaeroX 26-10-2007 в 02:09:
Цитата:
Troll писал:
Он правилен у тебя лишь тем что он просто невыполнится, так как не эта "gl" ненайдётся, об этом чуть ниже
Не понял смысла утверждения. Кто не выполнится? Это один из вариантов проверки, запущен ли OpenGL, если нет, то glGetString вернет NULL.
Добавлено 26-10-2007 в 09:09:
Цитата:
Troll писал:
DrawD3dFog
А как ты рисуешь D3D Fog? Вроде как нельзя получить доступ к халфовским СОМ-интерфейсам типа IDirect3DDevice7 и т.п.?__________________
Отправлено Troll 26-10-2007 в 04:21:
Короче говоря это я спросоня писал, опять таки забыл про то что у меня в этой области занятий иная специализация, вот вам и кричал яросто про то что неправильно. У меня и летают все gl
А так в вашем случае - да пожалуйста можно и так.
Цитата:
XaeroX писал:
А как ты рисуешь D3D Fog? Вроде как нельзя получить доступ к халфовским СОМ-интерфейсам типа IDirect3DDevice7 и т.п.?
Незнаю, я как уже говорил - хукаю.
Отправлено XaeroX 26-10-2007 в 06:11:
Troll хукаешь вызовы СОМ-интерфейсов?? 
__________________
Отправлено Дядя Миша 26-10-2007 в 07:45:
XaeroX докажи обратное ))))
Цитата:
Читай прошлую страницу - мы сначала проверяем на то что этот код будет исполнятся хотябы в одном из трёх рендеров.
нам его нужно выполнять лишь в одном рендерере, для которого мы его и проверям собсно.
Цитата:
Он правилен у тебя лишь тем что он просто невыполнится, так как не эта "gl" ненайдётся
смиялсо
Отправлено XaeroX 26-10-2007 в 12:50:
Цитата:
Дядя Миша писал:
докажи обратное ))))
Теоретически можно сделать декомпиляцию хв.длл старых версий, где она была нормальной дллкой... Но мне некогда 
__________________
Отправлено Дядя Миша 26-10-2007 в 14:16:
XaeroX держи образчик fakeGL клиента, чтобы не быть голословным.
Отправлено XaeroX 26-10-2007 в 15:11:
Дядя Миша если ты это имел в виду, то да, согласен, скорее всего в хл так и сделано 
__________________
Отправлено Тренсфер 26-10-2007 в 16:17:
NorthWanderer вот лови ссылку на тутор о тумане:
http://www.trensf.narod.ru/Fog.htm
Багов конечно полно, но зато работает 
__________________
Хотелось бы, чтобы не только хотелось...
Отправлено NorthWanderer 26-10-2007 в 19:48:
Спосибо Огромное 
Отправлено Дядя Миша 26-10-2007 в 20:30:
XaeroX да именно это.
Добавлено 27-10-2007 в 00:30:
Тренсфер у меня тут к тебе несколько вопросов по тутору:
Цитата:
Начну с клиента. В cbase.h в самый конец вставим объявление класса тумана:
Это как понимать
Пойдем далее - ты объявляешь параметры тумана как float, однако парсишь значения с карты как int (atoi).
И наконец передаешь первый байт каждого float
Оно вообще работает? тут по идее надо roundup сделать + умножение на 255 перед отправкой и деление на клиенте.
Это если учесть, что диапазон значений не выходит за рамки 0-1.0, как того требует OpenGL.
Далее если бы ты использовал стандартные переменные, тебе бы не пришлось юзать кастомную мессагу из 7 байт, а достаточно было бы записать энтиндекс и по нему отловить нужную энтить. Это гораздо проще и удобнее.
Место для вызова тумана - крайне неудачное к сожалению.
вот как сделано в xash
Тип тумана можешь выбросить, GL_EXP и GL_EXP2 дают отвратительные результаты.
Вызывать нужно перед V_CalcRefDef, но после завершения всех проходов (камер, мониторов итд).
Я возможно тряхну стариной и таки напишу тутор по табличному туману из Lazarus (был такой аналог спирита под Q2, тоже с мовевитчем, зеркалами и прочей бедой).
Там кстати говоря учтена видимость монстров в тумане - для этого мы просто в функции CanSee находим энтить env_fog, берем текущую плотность тумана и делим её на дистанцию по хитрой формуле. И туман начинает оказывать на монстров воздействие.
лоакльный туман немного сложнее, но в принципе реализуется подобным образом.
Отправлено Troll 27-10-2007 в 00:05:
Да, кстати, как пофиксить скай с туманом?
А то приходится его отключать.. Я пару вариантов пробовал, у меня либо просто не рисуется туман(на скае), либо небо начинает косячить(glclear мутил по всякому, ничего не вышло)
Может есть какие зарисовочки по этой теме?
Отправлено Тренсфер 27-10-2007 в 07:34:
Дядя Миша это меня вчера заглючило
Я даже тутор не проверил
Исправлю, всё исправлю и переменные и прочее. Вызов для тумана я взял из того французкого тутора.
А вот тип GL_EXP хоть убейте- мне понравился.
Этот тутор живёт только один день и в нём полно глюков.
__________________
Хотелось бы, чтобы не только хотелось...
Отправлено Дядя Миша 27-10-2007 в 09:52:
Troll никак не пофиксить, увы.
Ты имеешь в виду 3d sky ?
Отправлено Ku2zoff 27-10-2007 в 11:12:
очень обидно что туман работает только в комнатке где находится энтитя енв_скай, а в других частях карты, где небо из НУЛЛа не работает
Отправлено Дядя Миша 27-10-2007 в 11:25:
Ku2zoff можно сделать наоборот. если хочется.
Отправлено Ku2zoff 27-10-2007 в 13:06:
Дядя Миша вот мне как-то больше нравится наоборот. А вот чтобы и там и там работало, как я понял нельзя, либо придётся извращаться, мутить кучу разных функций...
Отправлено Troll 27-10-2007 в 22:14:
Да, 3d sky.. Посмотрел - через TriApi валвовцы тоже отключают небо... Так что приходится таким методом действовать..
Отправлено XaeroX 28-10-2007 в 06:19:
Troll на стадартном-то небе туман прекрасно работает...
__________________
Отправлено Дядя Миша 28-10-2007 в 07:20:
Обычный линейный туман не умеет работать в несколько проходов, к сожалению.
Я видел какую-то замуту с glDrawPixels но по-моему она тормозная.