Add particles
This commit is contained in:
parent
06c1d1c42e
commit
d905718bab
6 changed files with 105 additions and 51 deletions
98
renderer.h
98
renderer.h
|
@ -112,51 +112,24 @@ struct
|
|||
unsigned int flatAndTransparent; /**< If non-zero, transparent (dithered)
|
||||
polygons will be drawn without texture,
|
||||
with color stored in this variable. */
|
||||
#if LCR_SETTING_PARTICLES
|
||||
uint16_t particleColor; /**< 0x0000 means no particles active. */
|
||||
#endif
|
||||
} LCR_renderer;
|
||||
|
||||
|
||||
void aaa(void)
|
||||
/**
|
||||
Sets particle effects drawn around wheels. The parameter says particle color,
|
||||
0x0000 turns particles off.
|
||||
*/
|
||||
void LCR_rendererSetParticles(uint16_t color)
|
||||
{
|
||||
printf("BAD TRIS (%d):\n",LCR_renderer.mapModel.triangleCount);
|
||||
|
||||
for (int i = 0; i < LCR_renderer.mapModel.triangleCount; ++i)
|
||||
{
|
||||
TPE_Unit sss =
|
||||
TPE_max(
|
||||
TPE_abs(LCR_renderer.mapModel.vertices[
|
||||
LCR_renderer.mapModel.triangles[i * 3] * 3] -
|
||||
LCR_renderer.mapModel.vertices[
|
||||
LCR_renderer.mapModel.triangles[i * 3 + 1] * 3]),
|
||||
TPE_abs(LCR_renderer.mapModel.vertices[
|
||||
LCR_renderer.mapModel.triangles[i * 3 + 1] * 3] -
|
||||
LCR_renderer.mapModel.vertices[
|
||||
LCR_renderer.mapModel.triangles[i * 3 + 2] * 3])
|
||||
);
|
||||
|
||||
if (sss > LCR_RENDERER_UNIT * 2)
|
||||
printf(" - %d (%d %d %d, %d %d %d, %d %d %d) %d %d %d\n",i,
|
||||
LCR_renderer.mapModel.vertices[LCR_renderer.mapModel.triangles[3 * i]],
|
||||
LCR_renderer.mapModel.vertices[LCR_renderer.mapModel.triangles[3 * i] + 1],
|
||||
LCR_renderer.mapModel.vertices[LCR_renderer.mapModel.triangles[3 * i] + 2],
|
||||
LCR_renderer.mapModel.vertices[LCR_renderer.mapModel.triangles[3 * i + 1]],
|
||||
LCR_renderer.mapModel.vertices[LCR_renderer.mapModel.triangles[3 * i + 1] + 1],
|
||||
LCR_renderer.mapModel.vertices[LCR_renderer.mapModel.triangles[3 * i + 1] + 2],
|
||||
LCR_renderer.mapModel.vertices[LCR_renderer.mapModel.triangles[3 * i + 2]],
|
||||
LCR_renderer.mapModel.vertices[LCR_renderer.mapModel.triangles[3 * i + 2] + 1],
|
||||
LCR_renderer.mapModel.vertices[LCR_renderer.mapModel.triangles[3 * i + 2] + 2],
|
||||
|
||||
LCR_renderer.mapModel.triangles[3 * i],
|
||||
LCR_renderer.mapModel.triangles[3 * i + 1],
|
||||
LCR_renderer.mapModel.triangles[3 * i + 2]
|
||||
|
||||
|
||||
);
|
||||
}
|
||||
#if LCR_SETTING_PARTICLES
|
||||
LCR_renderer.particleColor = color;
|
||||
#else
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void _LCR_rendererSetModelTransform(S3L_Model3D *model,
|
||||
LCR_GameUnit position[3], LCR_GameUnit rotation[3])
|
||||
{
|
||||
|
@ -2100,6 +2073,51 @@ void LCR_rendererDraw3D(void)
|
|||
|
||||
LCR_renderer.frame++;
|
||||
|
||||
#if LCR_SETTING_PARTICLES
|
||||
if (LCR_renderer.particleColor)
|
||||
{
|
||||
S3L_Vec4 p, r, s;
|
||||
|
||||
S3L_rotationToDirections(LCR_renderer.carModel->transform.rotation,
|
||||
LCR_RENDERER_UNIT / 2,&p,&r,0);
|
||||
|
||||
#define LCR_PARTICLE_SIZE (16 << (LCR_EFFECTIVE_RESOLUTION_X / 640))
|
||||
|
||||
p.w = LCR_PARTICLE_SIZE;
|
||||
|
||||
r.x /= 2;
|
||||
r.y /= 2;
|
||||
r.z /= 2;
|
||||
|
||||
S3L_vec3Add(&p,LCR_renderer.carModel->transform.translation);
|
||||
|
||||
for (int i = 0; i < 2; ++i) // for both wheels
|
||||
{
|
||||
S3L_vec3Add(&p,r);
|
||||
|
||||
S3L_project3DPointToScreen(p,LCR_renderer.scene.camera,&s);
|
||||
|
||||
if (s.w > 0)
|
||||
for (int j = 0; j < 4; ++j) // 4 particles
|
||||
{
|
||||
int pSize =
|
||||
((LCR_renderer.frame + 4 * j) << 2) % (2 * LCR_PARTICLE_SIZE);
|
||||
|
||||
LCR_rendererDrawRect(
|
||||
s.x - pSize / 2 + ((j % 2) ? -1 * pSize : pSize),
|
||||
s.y - pSize / 2 + ((j / 2) ? -1 * pSize : pSize),
|
||||
pSize,pSize,LCR_renderer.particleColor,1);
|
||||
}
|
||||
|
||||
r.x *= -2;
|
||||
r.y *= -2;
|
||||
r.z *= -2;
|
||||
}
|
||||
}
|
||||
#undef LCR_PARTICLE_SIZE
|
||||
|
||||
#endif
|
||||
|
||||
LCR_LOG2("3D rendering (end)");
|
||||
LCR_LOG2("rendering frame (end)");
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue