ok, fellas, after spending some time on these forums i came to the conclusion that the following may actually be of some use to those of you striving to get their 3d assets in order.
it is one of my home-made testbed tools that i have been using for some time now to test this, tinker with that, and generally, waste my spare time. accidentally, it also can be very useful for inspecting mesh properties, particularly: normals orientation and length across the surface, and mesh appearance under phong shading - all that controllable in real-time, in both per-vertex and per-pixel flavors. it also shows mesh bounding boxes no questions asked, and demonstrates a simple view-frustum clipping algorithm in real time (using two cameras for the purpose), giving you a visual clue how your meshes would behave under frustum clipping.
the tool is ogl-based (doh), and runs on a bunch of platforms - osx (tested with ATI under ogl 1.4 and intel GMA under ogl 2.0), linux (tested with ati`s ogl 2.0 through 3.0) and cygwin (intel GMA under ogl 1.4). to build the tool you will need GLUT (across all platforms), GLEW (under linux and cygwin) and lib3ds (again, across the board).
the tool`s code is also not for the faint-hearted - it does certain things people with good manners would never, ever do, even under the privacy of their own showers. it is not expected to be liked, though, but to get certain job done. so, here, without further ado, right from darkblu`s dark, humid dungeons, i unleash upon you the
CODE
http://singularity.homeunix.net/ntsh-jass.html
* batteries not included.
to spare you some of the frustration in case you decided to actually try it out, here is a brief on the run-time controls:
"z", "Z": lift primary camera`s position along the Y axis
"x", "X": lower primary camera`s position along the Y axis
"a", "A": lift primary camera`s aim
"s", "S": lower primary camera`s aim
"q", "Q": halve primary camera`s orbiting radius (around Y)
"w", "W": double primary camera`s orbiting radius
<space>: toggle primary camera`s orbiting around y
<return>: take a snapshot of the framebuffer, saved in raw format in the current dir
"4", <numpad_left>: move secondary camera along -x
"6", <numpad_right>: move secondary camera along +x
"2", <numpad_down>: move secondary camera along -y
"8", <numpad_up>: move secondary camera along +y
"5", <numpad_center>: move secondary camera along -z
"0", <numpad_bottom>: move secondary camera along +z
"i", "I": switch main camera to using normal-direction-visualizer material, repeat for per-vertex version
"o", "O": switch main camera to using normal-length visualiser, repeat for per-vertex version
"p", "P": switch main camera to Blinn-Phong shading, repeat for per-vertex version
"`": toggle culling between CCW and CW (by default CW is culled, CCW is shown)
"-": halve secondary camera`s side extents
"+": double secondary camera`s side extents
".": save the currently view mesh set to native format in the current dir, under the name "out.mesh"
now, the tool handles two mesh formats:
(1) its native .mesh (text-based, just position + normal, indexed) - in both reading and writing, and
(2) .3ds - the famous 3d studio format, from the time when 3ds studio still had a standardized file format - as read-only.
whereas the native format handling is fairly bland, the 3ds handling comes in two flavors: simple and lib3ds-based. the difference being that the former does a quick-n-dirty handling of smoothing groups, while the lib3ds-based handling is quite sophisticated. as a matter of fact it is so sophisticated that it could take some heavier meshes several minutes for read-in and pre-processing (i do a topology optimization pass on top of what lib3ds provides). generally, if you dont have the patience to open some mind-boggling-complex 3ds file on your desktop, ask your overclocker friends to use the tool, open the file and save it to native mesh format. needless to say the native-format version would load way faster.
well, that is about all there is to it. hopefully somebody here would find it useful.
cheers.
ps: just to make it clear: the package on that page contains _sources_only_ - you will need to build it for your platform using the Makefile, or the xcode project, in case you run osx; the Makefile can be used under osx too, but might prove to be too complicated in comparison.
it is one of my home-made testbed tools that i have been using for some time now to test this, tinker with that, and generally, waste my spare time. accidentally, it also can be very useful for inspecting mesh properties, particularly: normals orientation and length across the surface, and mesh appearance under phong shading - all that controllable in real-time, in both per-vertex and per-pixel flavors. it also shows mesh bounding boxes no questions asked, and demonstrates a simple view-frustum clipping algorithm in real time (using two cameras for the purpose), giving you a visual clue how your meshes would behave under frustum clipping.
the tool is ogl-based (doh), and runs on a bunch of platforms - osx (tested with ATI under ogl 1.4 and intel GMA under ogl 2.0), linux (tested with ati`s ogl 2.0 through 3.0) and cygwin (intel GMA under ogl 1.4). to build the tool you will need GLUT (across all platforms), GLEW (under linux and cygwin) and lib3ds (again, across the board).
the tool`s code is also not for the faint-hearted - it does certain things people with good manners would never, ever do, even under the privacy of their own showers. it is not expected to be liked, though, but to get certain job done. so, here, without further ado, right from darkblu`s dark, humid dungeons, i unleash upon you the
CODE
http://singularity.homeunix.net/ntsh-jass.html
* batteries not included.
to spare you some of the frustration in case you decided to actually try it out, here is a brief on the run-time controls:
"z", "Z": lift primary camera`s position along the Y axis
"x", "X": lower primary camera`s position along the Y axis
"a", "A": lift primary camera`s aim
"s", "S": lower primary camera`s aim
"q", "Q": halve primary camera`s orbiting radius (around Y)
"w", "W": double primary camera`s orbiting radius
<space>: toggle primary camera`s orbiting around y
<return>: take a snapshot of the framebuffer, saved in raw format in the current dir
"4", <numpad_left>: move secondary camera along -x
"6", <numpad_right>: move secondary camera along +x
"2", <numpad_down>: move secondary camera along -y
"8", <numpad_up>: move secondary camera along +y
"5", <numpad_center>: move secondary camera along -z
"0", <numpad_bottom>: move secondary camera along +z
"i", "I": switch main camera to using normal-direction-visualizer material, repeat for per-vertex version
"o", "O": switch main camera to using normal-length visualiser, repeat for per-vertex version
"p", "P": switch main camera to Blinn-Phong shading, repeat for per-vertex version
"`": toggle culling between CCW and CW (by default CW is culled, CCW is shown)
"-": halve secondary camera`s side extents
"+": double secondary camera`s side extents
".": save the currently view mesh set to native format in the current dir, under the name "out.mesh"
now, the tool handles two mesh formats:
(1) its native .mesh (text-based, just position + normal, indexed) - in both reading and writing, and
(2) .3ds - the famous 3d studio format, from the time when 3ds studio still had a standardized file format - as read-only.
whereas the native format handling is fairly bland, the 3ds handling comes in two flavors: simple and lib3ds-based. the difference being that the former does a quick-n-dirty handling of smoothing groups, while the lib3ds-based handling is quite sophisticated. as a matter of fact it is so sophisticated that it could take some heavier meshes several minutes for read-in and pre-processing (i do a topology optimization pass on top of what lib3ds provides). generally, if you dont have the patience to open some mind-boggling-complex 3ds file on your desktop, ask your overclocker friends to use the tool, open the file and save it to native mesh format. needless to say the native-format version would load way faster.
well, that is about all there is to it. hopefully somebody here would find it useful.
cheers.
ps: just to make it clear: the package on that page contains _sources_only_ - you will need to build it for your platform using the Makefile, or the xcode project, in case you run osx; the Makefile can be used under osx too, but might prove to be too complicated in comparison.