Improve renderer a bit
This commit is contained in:
parent
6f020c852f
commit
2b4516f408
2 changed files with 58 additions and 29 deletions
41
renderer.h
41
renderer.h
|
@ -138,10 +138,8 @@ void _LCR_addMapTriangle(S3L_Index a, S3L_Index b, S3L_Index c)
|
|||
{
|
||||
S3L_Index *t = &(LCR_renderer.mapTriangles[LCR_renderer.mapModel->triangleCount * 3]);
|
||||
|
||||
*t = a;
|
||||
t++;
|
||||
*t = b;
|
||||
t++;
|
||||
*t = a; t++;
|
||||
*t = b; t++;
|
||||
*t = c;
|
||||
|
||||
LCR_renderer.mapModel->triangleCount++;
|
||||
|
@ -316,11 +314,11 @@ void _LCR_rendererCullHiddenMapTriangles(void)
|
|||
|
||||
/*
|
||||
We'll be moving the covered triangles to the end of the array, then at the
|
||||
end we'll just shorten the array.
|
||||
end we'll just shorten the array by number of removed triangles.
|
||||
*/
|
||||
while (i < LCR_renderer.mapModel->triangleCount - n)
|
||||
{
|
||||
t2 = t1 + 3;
|
||||
t2 = t1 + 3; // t2 is the the other triangle against which we check
|
||||
|
||||
int t1Covered = 0;
|
||||
|
||||
|
@ -334,21 +332,22 @@ void _LCR_rendererCullHiddenMapTriangles(void)
|
|||
{
|
||||
if (j < LCR_renderer.mapModel->triangleCount - n)
|
||||
{
|
||||
_LCR_rendererSwapTriangles(t2,
|
||||
LCR_renderer.mapTriangles + (LCR_renderer.mapModel->triangleCount - 1 - n) * 3);
|
||||
_LCR_rendererSwapTriangles(t2,LCR_renderer.mapTriangles +
|
||||
(LCR_renderer.mapModel->triangleCount - 1 - n) * 3);
|
||||
|
||||
n++;
|
||||
}
|
||||
}
|
||||
|
||||
t2 += 3;
|
||||
t2 += 3; // check next triangle
|
||||
}
|
||||
|
||||
if (t1Covered)
|
||||
{
|
||||
_LCR_rendererSwapTriangles(t1,
|
||||
LCR_renderer.mapTriangles + (LCR_renderer.mapModel->triangleCount - 1 - n) * 3);
|
||||
_LCR_rendererSwapTriangles(t1,LCR_renderer.mapTriangles +
|
||||
(LCR_renderer.mapModel->triangleCount - 1 - n) * 3);
|
||||
n++;
|
||||
// we stay at this position because we've swapped the triangle here
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -357,7 +356,7 @@ void _LCR_rendererCullHiddenMapTriangles(void)
|
|||
}
|
||||
}
|
||||
|
||||
LCR_renderer.mapModel->triangleCount -= n;
|
||||
LCR_renderer.mapModel->triangleCount -= n; // cut off the removed triangles
|
||||
|
||||
// remove unused vertices:
|
||||
|
||||
|
@ -412,7 +411,9 @@ uint8_t _LCR_rendererBuildMapModel(void)
|
|||
LCR_mapBlockGetTransform(LCR_currentMap.blocks + j * LCR_BLOCK_SIZE),
|
||||
blockShapeBytes,&blockShapeByteCount);
|
||||
|
||||
uint8_t vx, vy, vz, vi = 0;
|
||||
uint8_t vx, vy, vz, vi = 0,
|
||||
isAtFloor = by == 0,
|
||||
isAtCeiling = by == LCR_MAP_SIZE_BLOCKS - 1;
|
||||
S3L_Index triangleIndices[3];
|
||||
|
||||
S3L_Unit originOffset = -1 * LCR_MAP_SIZE_BLOCKS / 2 * LCR_RENDERER_UNIT;
|
||||
|
@ -421,6 +422,9 @@ uint8_t _LCR_rendererBuildMapModel(void)
|
|||
{
|
||||
LCR_decodeMapBlockCoords(blockShapeBytes[i],&vx,&vy,&vz);
|
||||
|
||||
isAtFloor &= vy == 0;
|
||||
isAtCeiling &= vy == 12;
|
||||
|
||||
triangleIndices[vi] = _LCR_addMapVertex(
|
||||
originOffset + (((S3L_Unit) bx) * LCR_RENDERER_UNIT) + (LCR_RENDERER_UNIT * ((S3L_Unit) vx)) / 12,
|
||||
(originOffset + (((S3L_Unit) by) * LCR_RENDERER_UNIT)) / 2 + (LCR_RENDERER_UNIT / 2 * ((S3L_Unit) vy)) / 12,
|
||||
|
@ -430,13 +434,20 @@ uint8_t _LCR_rendererBuildMapModel(void)
|
|||
vi++;
|
||||
else
|
||||
{
|
||||
_LCR_addMapTriangle(
|
||||
triangleIndices[0],triangleIndices[1],triangleIndices[2]);
|
||||
// don't add triangles completely at the floor or ceiling of the map
|
||||
if (!isAtFloor && !isAtCeiling)
|
||||
_LCR_addMapTriangle(
|
||||
triangleIndices[0],triangleIndices[1],triangleIndices[2]);
|
||||
|
||||
vi = 0;
|
||||
isAtFloor = by == 0;
|
||||
isAtCeiling = by == LCR_MAP_SIZE_BLOCKS - 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: also cull the triangles in the loop by some N steps
|
||||
|
||||
_LCR_rendererCullHiddenMapTriangles();
|
||||
|
||||
return 1;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue