World of Might and Magic  0.2.0
Open reimplementation of Might and Magic 6 7 8 game engine
Файл SpellFxRenderer.cpp

См. исходные тексты.

Функции

unsigned int ModulateColor (unsigned int diffuse, float multiplier)
 
bool sr_42620A (RenderVertexSoft *p)
 

Функции

◆ ModulateColor()

unsigned int ModulateColor ( unsigned int  diffuse,
float  multiplier 
)

См. определение в файле SpellFxRenderer.cpp строка 28

28  {
29  float alpha = multiplier * ((diffuse >> 24) & 0xFF);
30  int a = (int)floorf(alpha + 0.5f);
31  a = std::max(0, std::min(255, a));
32 
33  float red = multiplier * ((diffuse >> 16) & 0xFF);
34  int r = (int)floorf(red + 0.5f);
35  r = std::max(0, std::min(255, r));
36 
37  float green = multiplier * ((diffuse >> 8) & 0xFF);
38  int g = (int)floorf(green + 0.5f);
39  g = std::max(0, std::min(255, g));
40 
41  float blue = multiplier * ((diffuse >> 0) & 0xFF);
42  int b = (int)floorf(blue + 0.5f);
43  b = std::max(0, std::min(255, b));
44 
45  return (a << 24) | (r << 16) | (g << 8) | b;
46 }

Используется в SpellFxRenderer::_4A7688_fireball_collision_particle() и SpellFxRenderer::_4A77FD_implosion_particle_d3d().

+ Граф вызова функции:

◆ sr_42620A()

bool sr_42620A ( RenderVertexSoft p)

См. определение в файле SpellFxRenderer.cpp строка 49

49  {
50  // __int16 v1; // fps@1
51  unsigned __int8 v2; // c0@2
52  char v3; // c2@2
53  unsigned __int8 v4; // c3@2
54  // bool result; // eax@2
55  unsigned __int8 v6; // c0@4
56  char v7; // c2@4
57  unsigned __int8 v8; // c3@4
58  unsigned __int8 v9; // c0@6
59  char v10; // c2@6
60  unsigned __int8 v11; // c3@6
61  float v13; // ST04_4@7
62  float v14; // ST00_4@7
63  float v17; // ST04_4@8
64  float v18; // ST00_4@8
65 
66  if (p->vWorldViewPosition.x < 300.0 ||
67  (v2 = 300.0 < p[1].vWorldViewPosition.x, v3 = 0,
68  v4 = 300.0 == p[1].vWorldViewPosition.x,
69 
70  !(v2 | v4))) {
71  if (p->vWorldViewPosition.x < 300.0) {
72  v6 = 300.0 < p[1].vWorldViewPosition.x;
73  v7 = 0;
74  v8 = 300.0 == p[1].vWorldViewPosition.x;
75 
76  if (!(v6 | v8)) {
77  return false;
78  }
79  }
80  v9 = 300.0 < p->vWorldViewPosition.x;
81  v10 = 0;
82  v11 = 300.0 == p->vWorldViewPosition.x;
83 
84  if (v9 | v11) {
85  float v16 =
86  1.0f / (p->vWorldViewPosition.x - p[1].vWorldViewPosition.x);
87  v17 = (p->vWorldViewPosition.y - p[1].vWorldViewPosition.y) * v16;
88  v18 = (p->vWorldViewPosition.z - p[1].vWorldViewPosition.z) * v16;
89  float v19 = 300.0 - p[1].vWorldViewPosition.x;
90  p[1].vWorldViewPosition.x = v19 + p[1].vWorldViewPosition.x;
91  p[1].vWorldViewPosition.y = v17 * v19 + p[1].vWorldViewPosition.y;
92  p[1].vWorldViewPosition.z = v19 * v18 + p[1].vWorldViewPosition.z;
93  } else {
94  float v12 =
95  1.0f / (p[1].vWorldViewPosition.x - p->vWorldViewPosition.x);
96  v13 = (p[1].vWorldViewPosition.y - p->vWorldViewPosition.y) * v12;
97  v14 = (p[1].vWorldViewPosition.z - p->vWorldViewPosition.z) * v12;
98  float v15 = 300.0 - p->vWorldViewPosition.x;
99  p->vWorldViewPosition.x = v15 + p->vWorldViewPosition.x;
100  p->vWorldViewPosition.y = v13 * v15 + p->vWorldViewPosition.y;
101  p->vWorldViewPosition.z = v15 * v14 + p->vWorldViewPosition.z;
102  }
103  }
104 
105  return true;
106 }

Используется в SpellFxRenderer::DrawProjectiles().

+ Граф вызова функции:
alpha
GLfloat GLfloat GLfloat alpha
Definition: SDL_opengl_glext.h:415
p
GLfloat GLfloat p
Definition: SDL_opengl_glext.h:11093
f
GLfloat f
Definition: SDL_opengl_glext.h:1873
blue
GLbyte GLbyte blue
Definition: SDL_opengl_glext.h:382
green
GLbyte green
Definition: SDL_opengl_glext.h:382
b
GLboolean GLboolean GLboolean b
Definition: SDL_opengl_glext.h:1112
r
GLdouble GLdouble GLdouble r
Definition: SDL_opengl.h:2079
v2
GLfloat GLfloat GLfloat v2
Definition: SDL_opengl_glext.h:695
v3
GLfloat GLfloat GLfloat GLfloat v3
Definition: SDL_opengl_glext.h:696
a
GLboolean GLboolean GLboolean GLboolean a
Definition: SDL_opengl_glext.h:1112
g
GLboolean GLboolean g
Definition: SDL_opengl_glext.h:1112