Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
OpenGL
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Requirements
Requirements
List
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
Insights
Issue
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
C-Fu
OpenGL
Commits
1c0ed61b
Commit
1c0ed61b
authored
Nov 30, 2016
by
Anakin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
adjust boundingbox (only for SINF)
use else if
parent
ef2c341a
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
45 additions
and
57 deletions
+45
-57
MshViewer/Header/Object.h
MshViewer/Header/Object.h
+1
-1
MshViewer/Source/Object.cpp
MshViewer/Source/Object.cpp
+44
-56
No files found.
MshViewer/Header/Object.h
View file @
1c0ed61b
...
...
@@ -39,7 +39,6 @@ struct Modl {
Mtyp
type
=
null
;
std
::
int32_t
renderFlags
=
-
1
;
glm
::
mat4
m4x4Translation
=
glm
::
mat4
(
1.0
f
);
Bbox
boundingBox
;
std
::
vector
<
Segment
*>
segmLst
;
};
...
...
@@ -55,6 +54,7 @@ private:
std
::
vector
<
Modl
*>*
vModls
;
std
::
fstream
fsMesh
;
std
::
vector
<
std
::
string
>
vTextures
;
Bbox
boundingBox
;
private:
void
loadChunks
(
std
::
list
<
ChunkHeader
*>
&
destination
,
std
::
streampos
start
,
const
std
::
uint32_t
end
);
...
...
MshViewer/Source/Object.cpp
View file @
1c0ed61b
...
...
@@ -109,12 +109,38 @@ void Object::analyseMsh2Chunks(std::list<ChunkHeader*>& chunkList)
{
for
(
auto
&
it
:
chunkList
)
{
if
(
!
strcmp
(
"MATL"
,
it
->
name
))
if
(
!
strcmp
(
"SINF"
,
it
->
name
))
{
std
::
list
<
ChunkHeader
*>
tempSinfChunks
;
loadChunks
(
tempSinfChunks
,
it
->
position
,
it
->
size
);
// evaluate MATL subchunks
for
(
auto
&
it
:
tempSinfChunks
)
{
if
(
!
strcmp
(
"BBOX"
,
it
->
name
))
{
fsMesh
.
seekg
(
it
->
position
);
// read in the quaternion
for
(
int
i
=
0
;
i
<
4
;
i
++
)
fsMesh
.
read
(
reinterpret_cast
<
char
*>
(
&
boundingBox
.
quaternion
[
i
]),
sizeof
(
float
));
//read in the center
for
(
int
i
=
0
;
i
<
3
;
i
++
)
fsMesh
.
read
(
reinterpret_cast
<
char
*>
(
&
boundingBox
.
center
[
i
]),
sizeof
(
float
));
//read in the extents
for
(
int
i
=
0
;
i
<
3
;
i
++
)
fsMesh
.
read
(
reinterpret_cast
<
char
*>
(
&
boundingBox
.
extents
[
i
]),
sizeof
(
float
));
}
}
}
else
if
(
!
strcmp
(
"MATL"
,
it
->
name
))
{
// "useless" information how many MATD follow
fsMesh
.
seekg
(
it
->
position
);
std
::
uint32_t
tempMatdCount
;
fsMesh
.
read
(
reinterpret_cast
<
char
*>
(
&
tempMatdCount
),
sizeof
(
std
::
uint32_t
));
fsMesh
.
seekg
(
sizeof
(
std
::
uint32_t
),
std
::
ios_base
::
cur
);
// get all MATD from MATL list
std
::
list
<
ChunkHeader
*>
tempMatlChunks
;
...
...
@@ -152,11 +178,9 @@ void Object::analyseMsh2Chunks(std::list<ChunkHeader*>& chunkList)
tempMatlChunks
.
pop_front
();
delete
tempCursor
;
}
continue
;
}
if
(
!
strcmp
(
"MODL"
,
it
->
name
))
else
if
(
!
strcmp
(
"MODL"
,
it
->
name
))
{
Modl
*
tempModl
=
new
Modl
;
...
...
@@ -177,8 +201,6 @@ void Object::analyseMsh2Chunks(std::list<ChunkHeader*>& chunkList)
// save Model data
vModls
->
push_back
(
tempModl
);
continue
;
}
}
}
...
...
@@ -196,7 +218,6 @@ void Object::analyseMatdChunks(std::list<ChunkHeader*>& chunkList)
fsMesh
.
read
(
buffer
,
it
->
size
);
vTextures
.
back
()
=
buffer
;
delete
buffer
;
continue
;
}
}
}
...
...
@@ -211,10 +232,9 @@ void Object::analyseModlChunks(Modl* dataDestination, std::list<ChunkHeader*>& c
std
::
uint32_t
tempType
;
fsMesh
.
read
(
reinterpret_cast
<
char
*>
(
&
tempType
),
sizeof
(
tempType
));
dataDestination
->
type
=
(
Mtyp
)
tempType
;
continue
;
}
if
(
!
strcmp
(
"PRNT"
,
it
->
name
))
else
if
(
!
strcmp
(
"PRNT"
,
it
->
name
))
{
fsMesh
.
seekg
(
it
->
position
);
char
*
buffer
=
new
char
[
it
->
size
];
...
...
@@ -222,10 +242,9 @@ void Object::analyseModlChunks(Modl* dataDestination, std::list<ChunkHeader*>& c
fsMesh
.
read
(
buffer
,
it
->
size
);
dataDestination
->
parent
=
buffer
;
delete
buffer
;
continue
;
}
if
(
!
strcmp
(
"NAME"
,
it
->
name
))
else
if
(
!
strcmp
(
"NAME"
,
it
->
name
))
{
fsMesh
.
seekg
(
it
->
position
);
char
*
buffer
=
new
char
[
it
->
size
];
...
...
@@ -233,17 +252,15 @@ void Object::analyseModlChunks(Modl* dataDestination, std::list<ChunkHeader*>& c
fsMesh
.
read
(
buffer
,
it
->
size
);
dataDestination
->
name
=
buffer
;
delete
buffer
;
continue
;
}
if
(
!
strcmp
(
"FLGS"
,
it
->
name
))
else
if
(
!
strcmp
(
"FLGS"
,
it
->
name
))
{
fsMesh
.
seekg
(
it
->
position
);
fsMesh
.
read
(
reinterpret_cast
<
char
*>
(
&
dataDestination
->
renderFlags
),
sizeof
(
dataDestination
->
renderFlags
));
continue
;
}
if
(
!
strcmp
(
"TRAN"
,
it
->
name
))
else
if
(
!
strcmp
(
"TRAN"
,
it
->
name
))
{
float
tempScale
[
3
];
float
tempRotation
[
4
];
...
...
@@ -251,6 +268,7 @@ void Object::analyseModlChunks(Modl* dataDestination, std::list<ChunkHeader*>& c
fsMesh
.
seekg
(
it
->
position
);
//TODO: use loop
fsMesh
.
read
(
reinterpret_cast
<
char
*>
(
&
tempScale
[
0
]),
sizeof
(
float
));
fsMesh
.
read
(
reinterpret_cast
<
char
*>
(
&
tempScale
[
1
]),
sizeof
(
float
));
fsMesh
.
read
(
reinterpret_cast
<
char
*>
(
&
tempScale
[
2
]),
sizeof
(
float
));
...
...
@@ -300,10 +318,9 @@ void Object::analyseModlChunks(Modl* dataDestination, std::list<ChunkHeader*>& c
glm
::
vec3
(
0
,
0
,
1
)
);
continue
;
}
if
(
!
strcmp
(
"GEOM"
,
it
->
name
))
else
if
(
!
strcmp
(
"GEOM"
,
it
->
name
))
{
// get all subchunks
std
::
list
<
ChunkHeader
*>
tempGeomChunks
;
...
...
@@ -319,8 +336,6 @@ void Object::analyseModlChunks(Modl* dataDestination, std::list<ChunkHeader*>& c
tempGeomChunks
.
pop_front
();
delete
tempCursor
;
}
continue
;
}
}
}
...
...
@@ -329,25 +344,6 @@ void Object::analyseGeomChunks(Modl * dataDestination, std::list<ChunkHeader*>&
{
for
(
auto
&
it
:
chunkList
)
{
if
(
!
strcmp
(
"BBOX"
,
it
->
name
))
{
fsMesh
.
seekg
(
it
->
position
);
// read in the quaternion
for
(
int
i
=
0
;
i
<
4
;
i
++
)
fsMesh
.
read
(
reinterpret_cast
<
char
*>
(
&
dataDestination
->
boundingBox
.
quaternion
[
i
]),
sizeof
(
float
));
//read in the center
for
(
int
i
=
0
;
i
<
3
;
i
++
)
fsMesh
.
read
(
reinterpret_cast
<
char
*>
(
&
dataDestination
->
boundingBox
.
center
[
i
]),
sizeof
(
float
));
//read in the extents
for
(
int
i
=
0
;
i
<
3
;
i
++
)
fsMesh
.
read
(
reinterpret_cast
<
char
*>
(
&
dataDestination
->
boundingBox
.
extents
[
i
]),
sizeof
(
float
));
continue
;
}
if
(
!
strcmp
(
"SEGM"
,
it
->
name
))
{
// get all subchunks
...
...
@@ -398,16 +394,14 @@ void Object::analyseSegmChunks(Modl * dataDestination, std::list<ChunkHeader*>&
{
fsMesh
.
seekg
(
it
->
position
);
fsMesh
.
read
(
reinterpret_cast
<
char
*>
(
&
tempData
->
textureIndex
),
sizeof
(
tempData
->
textureIndex
));
continue
;
}
if
(
!
strcmp
(
"POSL"
,
it
->
name
))
else
if
(
!
strcmp
(
"POSL"
,
it
->
name
))
{
readVertex
(
tempData
,
it
->
position
);
continue
;
}
/*if (!strcmp("NRML", it->name))
/*
else
if (!strcmp("NRML", it->name))
{
fsMesh.seekg(it->position);
std::uint32_t tempSize;
...
...
@@ -415,16 +409,14 @@ void Object::analyseSegmChunks(Modl * dataDestination, std::list<ChunkHeader*>&
// List of normals
// long int - 4 - number of normal vectores stored in this list
// float[3][] - 12 each - UVW vector for each vertex
continue;
}*/
if
(
!
strcmp
(
"UV0L"
,
it
->
name
))
else
if
(
!
strcmp
(
"UV0L"
,
it
->
name
))
{
readUV
(
tempData
,
it
->
position
);
continue
;
}
if
(
!
strcmp
(
"STRP"
,
it
->
name
))
else
if
(
!
strcmp
(
"STRP"
,
it
->
name
))
{
// don't get null, bone, shadowMesh and hidden mesh indices
if
(
dataDestination
->
type
==
null
||
...
...
@@ -486,9 +478,9 @@ void Object::analyseSegmChunks(Modl * dataDestination, std::list<ChunkHeader*>&
// kick the first element, it's empty as a reason of the algo above;
tempData
->
meshIndices
.
erase
(
tempData
->
meshIndices
.
begin
());
continue
;
}
}
dataDestination
->
segmLst
.
push_back
(
tempData
);
}
...
...
@@ -524,22 +516,19 @@ void Object::analyseClthChunks(Modl * dataDestination, std::list<ChunkHeader*>&
}
delete
buffer
;
continue
;
}
if
(
!
strcmp
(
"CPOS"
,
it
->
name
))
else
if
(
!
strcmp
(
"CPOS"
,
it
->
name
))
{
readVertex
(
tempData
,
it
->
position
);
continue
;
}
if
(
!
strcmp
(
"CUV0"
,
it
->
name
))
else
if
(
!
strcmp
(
"CUV0"
,
it
->
name
))
{
readUV
(
tempData
,
it
->
position
);
continue
;
}
if
(
!
strcmp
(
"CMSH"
,
it
->
name
))
else
if
(
!
strcmp
(
"CMSH"
,
it
->
name
))
{
// jump to the data section and read the size;
std
::
uint32_t
tempSize
;
...
...
@@ -562,7 +551,6 @@ void Object::analyseClthChunks(Modl * dataDestination, std::list<ChunkHeader*>&
}
tempData
->
meshIndices
.
push_back
(
tempPoly
);
}
continue
;
}
}
dataDestination
->
segmLst
.
push_back
(
tempData
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment