HLFX.Ru Forum
Показать все 57 сообщений этой темы на одной странице

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:

Half-Life проблема с туманом

делал туман по тутору на 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

__________________

xaerox on Vivino


Отправлено 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

__________________

xaerox on Vivino


Отправлено NorthWanderer 23-10-2007 в 15:35:

это в R_STUDIOINT.H

C++ Source Code:
1
void	( *SV_StudioSetupBones )( struct model_s *pModel,
2
float frame,
3
int sequence,
4
const vec3_t angles,
5
const vec3_t origin,
6
const byte *pcontroller,
7
const byte *pblending,
8
int iBone,
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. Замени на оригинал из СДК.

__________________

xaerox on Vivino


Отправлено NorthWanderer 23-10-2007 в 16:28:

я покзал где ошика возникает вот полный фаил

C++ Source Code:
1
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============
2
//
3
// Purpose:
4
//
5
// $NoKeywords: $
6
//=============================================================================
7
 
8
#if !defined( R_STUDIOINT_H )
9
#define R_STUDIOINT_H
10
#if defined( _WIN32 )
11
#pragma once
12
#endif
13
 
14
#define STUDIO_INTERFACE_VERSION 1
15
 
16
typedef struct engine_studio_api_s
17
{
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 );
36
  // Get viewentity
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 );
50
 
51
  // Get bone, light, alias, and rotation matrices
52
  float			****( *StudioGetBoneTransform ) ( void );
53
  float			****( *StudioGetLightTransform )( void );
54
  float			***( *StudioGetAliasTransform ) ( void );
55
  float			***( *StudioGetRotationMatrix ) ( void );
56
 
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 );
65
 
66
  // Draw mesh vertices
67
  void			( *StudioDrawPoints )			( void );
68
 
69
  // Draw hulls around bones
70
  void			( *StudioDrawHulls )			( void );
71
  // Draw bbox around studio models
72
  void			( *StudioDrawAbsBBox )			( void );
73
  // Draws bones
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 );
90
 
91
  // Final state setup and restore for rendering
92
  void			( *SetupRenderer )				( int rendermode );
93
  void			( *RestoreRenderer )			( void );
94
 
95
  // Set render origin for applying chrome effect
96
  void			( *SetChromeOrigin )			( void );
97
 
98
  // True if using D3D/OpenGL
99
  int				( *IsHardware )					( void );
100
 
101
  // Only called by hardware interface
102
  void			( *GL_StudioDrawShadow )		( void );
103
  void			( *GL_SetRenderMode )			( int mode );
104
} engine_studio_api_t;
105
 
106
typedef struct server_studio_api_s
107
{
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;
117
 
118
 
119
// client blending
120
typedef struct r_studio_interface_s
121
{
122
  int				version;
123
  int				( *StudioDrawModel	)			( int flags );
124
  int				( *StudioDrawPlayer	)			( int flags, struct entity_state_s *pplayer );
125
} r_studio_interface_t;
126
 
127
extern r_studio_interface_t *pStudioAPI;
128
 
129
// server blending
130
#define SV_BLENDING_INTERFACE_VERSION 1
131
 
132
typedef struct sv_blending_interface_s
133
{
134
  int	version;
135
 
136
  void	( *SV_StudioSetupBones )( struct model_s *pModel,
137
  float frame,
138
  int sequence,
139
  const vec3_t angles,
140
  const vec3_t origin,
141
  const byte *pcontroller,
142
  const byte *pblending,
143
  int iBone,
144
  const edict_t *pEdict );
145
} sv_blending_interface_t;
146
 
147
#endif // R_STUDIOINT_H
148
 


Отправлено XaeroX 23-10-2007 в 16:30:

нет тут никаких ошибок, оно обязано компилироваться.

__________________

xaerox on Vivino


Отправлено NorthWanderer 23-10-2007 в 17:15:

Так тогда обьясню как я вставлял туман по порядку:
1. создал fog.cpp с таким кодом

C++ Source Code:
1
/***
2
*
3
*        Copyright &copy; 1996-2001, Valve LLC. All rights reserved.
4
*
5
*        this product contains software technology licensed from Id
6
*        Software, Inc. ("Id Technology").  Id Technology &copy; 1996 Id Software, Inc.
7
*        All Rights Reserved.
8
*
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.
13
*
14
****/
15
//
16
// fog.cpp
17
//
18
// implementation of CHudFog class
19
//
20
 
21
#define WIN32_LEAN_AND_MEAN
22
#include <windows.h>
23
#include <gl/gl.h>
24
 
25
 
26
#include "r_studioint.h"
27
extern engine_studio_api_t IEngineStudio;
28
 
29
 
30
 
31
 
32
#include "hud.h"
33
#include "cl_util.h"
34
#include "parsemsg.h"
35
 
36
#include <stdio.h>
37
#include <string.h>
38
 
39
DECLARE_MESSAGE(m_Fog, Fog)
40
 
41
int CHudFog::Init(void)
42
{
43
  HOOK_MESSAGE(Fog);
44
  gHUD.AddHudElem(this);
45
  return 1;
46
};
47
 
48
 
49
int CHudFog::VidInit(void)
50
{
51
  return 1;
52
};
53
 
54
int CHudFog:: MsgFunc_Fog(const char *pszName,  int iSize, void *pbuf )
55
{
56
  m_iFlags |= HUD_ACTIVE;
57
 
58
 
59
  BEGIN_READ( pbuf, iSize );
60
 
61
  r = READ_SHORT();
62
  g = READ_SHORT();
63
  b = READ_SHORT();
64
  s = READ_SHORT();
65
  e = READ_SHORT();
66
 
67
  return 1;
68
}
69
 
70
 
71
int CHudFog::Draw(float flTime)
72
{
73
  if( r == 0 && g == 0 && b == 0 )//si c'est noir on affiche pas car on ne verrait rien
74
    return 1;
75
  if ( IEngineStudio.IsHardware() != 1)
76
    return 1;
77
 
78
  int a = 128;
79
 
80
  float fDensity = 0.5, fStart = s, fEnd = e;
81
 
82
  float fogColor[4];
83
 
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;
88
 
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 );
95
  glEnable(GL_FOG);
96
 
97
  return 1;
98
}


потом в hud.h

после этого

C++ Source Code:
1
//
2
//-----------------------------------------------------
3
//
4
class CHudBase
5
{
6
public:
7
  POSITION  m_pos;
8
  int   m_type;
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
17
 
18
};
19
 
20
struct HUDLIST {
21
  CHudBase	*p;
22
  HUDLIST		*pNext;
23
};
24
 
25
 
26
 
27
//
28
//-----------------------------------------------------
29
//
30
#include "..\game_shared\voice_status.h"
31
#include "hud_spectator.h"
32
 
33
 
34
//
35
//-----------------------------------------------------
36
//


это:

C++ Source Code:
1
//Bicou
2
//-----------------------------------------------------
3
//
4
class CHudFog : public CHudBase
5
{
6
public:
7
  int Init( void );
8
  int VidInit( void );
9
  int Draw(float flTime);
10
  int MsgFunc_Fog(const char *pszName,  int iSize, void *pbuf );
11
 
12
private:
13
  int r, g, b, s, e;
14
};
15
//Bicou -fin
16
 


потом ниже и там же после этого:

C++ Source Code:
CHudBattery            m_Battery;


это:

C++ Source Code:
CHudFog                m_Fog;
 


в hud.cpp

C++ Source Code:
1
m_Train.Init();
2
m_Battery.Init();
3
m_Fog.Init();           //новая сторчка
4
m_Flash.Init();
5
m_Message.Init();


ниже
C++ Source Code:
1
m_Train.VidInit();
2
m_Battery.VidInit();
3
m_Fog.VidInit();   //новая сторчка
4
m_Flash.VidInit();
5
m_Message.VidInit();


по тутариалу все вроде там еше на сервере описано не много но сервер компелится нормально


Отправлено XaeroX 23-10-2007 в 17:18:

Rebuild All пробовал?

__________________

xaerox on Vivino


Отправлено Дядя Миша 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:

Дядя Миша это какой то продвинутый блендинг, типа как в КС, наверное...

__________________

xaerox on Vivino


Отправлено 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 возможно, но у тебя и правда очень странная ошибка компилятора. Чем собираешь, шестой студией?

__________________

xaerox on Vivino


Отправлено 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,
2
float frame,
3
int sequence,
4
const vec3_t angles,
5
const vec3_t origin,
6
const byte *pcontroller,
7
const byte *pblending,
8
int iBone,
9
const edict_t *pEdict );

в r_studioint.h закоментируй их обязательно!
Подожди пожалуста два дня и я дам тебе полноценный тутор о тумане.

__________________
Хотелось бы, чтобы не только хотелось...


Отправлено NorthWanderer 24-10-2007 в 16:36:

Жду С нетерпением


Отправлено XaeroX 24-10-2007 в 17:47:

Цитата:
Тренсфер писал:
при инициализации опенгл у тебя обязательно вызовут ругань компилятора строчки:

Это почему же - обязательно?

__________________

xaerox on Vivino


Отправлено 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:
#include "r_studioint.h"
//и функция обьявленая там:
extern engine_studio_api_t IEngineStudio;

Потом какая-то проверка :
C++ Source Code:
1
...
2
int CHudFog::Draw(float flTime)
3
{
4
  if ( IEngineStudio.IsHardware() != 1)
5
    return 1;
6
  float fogColor[4];
7
  ...

Для чего эта проверка в тумане на неравность "аппаратных средств" 1 я так и не догнал Очевидно это очередной баг тутора, который я признаюсь и без этого не работал .

Добавлено 25-10-2007 в 09:27:

Без этих строк всё прекрасно работает

__________________
Хотелось бы, чтобы не только хотелось...


Отправлено XaeroX 25-10-2007 в 07:31:

Цитата:
Тренсфер писал:
Для чего эта проверка в тумане на неравность "аппаратных средств" 1 я так и не догнал

Для того чтобы в софтварном режиме не выполнялся этот код - все равно не заработает. Что тут непонятного?

__________________

xaerox on Vivino


Отправлено Тренсфер 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.
вот так проверять надо
code:
//Check video mode if (glGetString(GL_RENDERER)) { }


Добавлено 25-10-2007 в 15:20:

Troll туман для триапи один чорт не работает в d3d, к тому же в гл можно настроить больше опций, по сравнению с триапи.
А вообще - лучше всего табличный туман


Отправлено XaeroX 25-10-2007 в 11:47:

Цитата:
Дядя Миша писал:
А вообще - лучше всего табличный туман

__________________

xaerox on Vivino


Отправлено 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 команды.

да есть он там, есть
никто там огл запросы не преобразует, что ты за ерунду пишешь

__________________

xaerox on Vivino


Отправлено 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 и т.п.?

__________________

xaerox on Vivino


Отправлено Troll 26-10-2007 в 04:21:

Короче говоря это я спросоня писал, опять таки забыл про то что у меня в этой области занятий иная специализация, вот вам и кричал яросто про то что неправильно. У меня и летают все gl
А так в вашем случае - да пожалуйста можно и так.

Цитата:
XaeroX писал:
А как ты рисуешь D3D Fog? Вроде как нельзя получить доступ к халфовским СОМ-интерфейсам типа IDirect3DDevice7 и т.п.?

Незнаю, я как уже говорил - хукаю.


Отправлено XaeroX 26-10-2007 в 06:11:

Troll хукаешь вызовы СОМ-интерфейсов??

__________________

xaerox on Vivino


Отправлено Дядя Миша 26-10-2007 в 07:45:

XaeroX докажи обратное ))))

Цитата:
Читай прошлую страницу - мы сначала проверяем на то что этот код будет исполнятся хотябы в одном из трёх рендеров.

нам его нужно выполнять лишь в одном рендерере, для которого мы его и проверям собсно.
Цитата:
Он правилен у тебя лишь тем что он просто невыполнится, так как не эта "gl" ненайдётся

смиялсо


Отправлено XaeroX 26-10-2007 в 12:50:

Цитата:
Дядя Миша писал:
докажи обратное ))))

Теоретически можно сделать декомпиляцию хв.длл старых версий, где она была нормальной дллкой... Но мне некогда

__________________

xaerox on Vivino


Отправлено Дядя Миша 26-10-2007 в 14:16:

XaeroX держи образчик fakeGL клиента, чтобы не быть голословным.


Отправлено XaeroX 26-10-2007 в 15:11:

Дядя Миша если ты это имел в виду, то да, согласен, скорее всего в хл так и сделано

__________________

xaerox on Vivino


Отправлено Тренсфер 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
code:
//========================== // V_CalcGlobalFog //========================== void V_CalcGlobalFog( struct ref_params_s *pparams ) { float g_fFogColor[4] = { FogColor.x, FogColor.y, FogColor.z, 1.0 }; bool bFog = pparams->waterlevel < 2 && g_fStartDist > 0 && g_fEndDist > 0; if (!bFog) return; //rendering global fog glEnable(GL_FOG); glFogf(GL_FOG_DENSITY, 0.0025); glFogi(GL_FOG_MODE, GL_LINEAR); glFogfv(GL_FOG_COLOR, g_fFogColor); glFogf(GL_FOG_START, g_fStartDist); glFogf(GL_FOG_END, g_fEndDist); glHint(GL_FOG_HINT, GL_NICEST); }

Тип тумана можешь выбросить, 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 на стадартном-то небе туман прекрасно работает...

__________________

xaerox on Vivino


Отправлено Дядя Миша 28-10-2007 в 07:20:

Обычный линейный туман не умеет работать в несколько проходов, к сожалению.
Я видел какую-то замуту с glDrawPixels но по-моему она тормозная.


Временная зона GMT. Текущее время 10:19.
Показать все 57 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024