mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-05-11 13:06:56 +03:00
Store the min/max height in LandData
This commit is contained in:
parent
051c17a184
commit
0fc465da59
6 changed files with 21 additions and 20 deletions
|
@ -203,16 +203,27 @@ namespace ESM
|
|||
if (reader.isNextSub("VHGT")) {
|
||||
VHGT vhgt;
|
||||
if (condLoad(reader, flags, target->mDataLoaded, DATA_VHGT, &vhgt, sizeof(vhgt))) {
|
||||
target->mMinHeight = FLT_MAX;
|
||||
target->mMaxHeight = -FLT_MAX;
|
||||
float rowOffset = vhgt.mHeightOffset;
|
||||
for (int y = 0; y < LAND_SIZE; y++) {
|
||||
rowOffset += vhgt.mHeightData[y * LAND_SIZE];
|
||||
|
||||
target->mHeights[y * LAND_SIZE] = rowOffset * HEIGHT_SCALE;
|
||||
if (rowOffset * HEIGHT_SCALE > target->mMaxHeight)
|
||||
target->mMaxHeight = rowOffset * HEIGHT_SCALE;
|
||||
if (rowOffset * HEIGHT_SCALE < target->mMinHeight)
|
||||
target->mMinHeight = rowOffset * HEIGHT_SCALE;
|
||||
|
||||
float colOffset = rowOffset;
|
||||
for (int x = 1; x < LAND_SIZE; x++) {
|
||||
colOffset += vhgt.mHeightData[y * LAND_SIZE + x];
|
||||
target->mHeights[x + y * LAND_SIZE] = colOffset * HEIGHT_SCALE;
|
||||
|
||||
if (colOffset * HEIGHT_SCALE > target->mMaxHeight)
|
||||
target->mMaxHeight = colOffset * HEIGHT_SCALE;
|
||||
if (colOffset * HEIGHT_SCALE < target->mMinHeight)
|
||||
target->mMinHeight = colOffset * HEIGHT_SCALE;
|
||||
}
|
||||
}
|
||||
target->mUnk1 = vhgt.mUnk1;
|
||||
|
|
|
@ -87,6 +87,8 @@ struct Land
|
|||
float mHeightOffset;
|
||||
// Height in world space for each vertex
|
||||
float mHeights[LAND_NUM_VERTS];
|
||||
float mMinHeight;
|
||||
float mMaxHeight;
|
||||
|
||||
// 24-bit normals, these aren't always correct though. Edge and corner normals may be garbage.
|
||||
VNML mNormals[LAND_NUM_VERTS * 3];
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue