AssimpView:

- postprocessing configuration is no (partially) configurable.
 - adding linsk to Assimp homepage/bugtracker/forums.
 - updating about dialog.  
 - fixing colors of texture view (tiny array overrun ...).
 - minor UI theme adjustments.
 - 'setup file extensions' works again.
 - normal smooth limit is now used for primary import, too.
 - minor spelling fixes in the UI.

git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@417 67173fc5-114c-0410-ac8e-9d2fd5bffc1f
pull/1/head
aramis_acg 2009-05-09 23:27:48 +00:00
parent b7ecf79a03
commit 84c6b4fde6
12 changed files with 315 additions and 107 deletions

View File

@ -61,3 +61,6 @@ Contributed fixes for the documentation and the doxygen markup
- Zhao Lei
Contributed several bugfixes fixing memory leaks and improving float parsing
- sueastside
Updated PyAssimp to the latest Assimp data structures and provided a script to keep the Python binding up-to-date.

View File

@ -15,14 +15,13 @@ set /p addtext= < tmpfile.txt
del /q tmpfile.txt
cd ..\mkutil
echo #define SVNRevision > revision.h
echo #define SVNRevision > tmpfile.txt
if exist tmpfile.txt del /q tmpfile.txt
for /f "delims=" %%l in (revision.h) Do (
echo %%l %addtext% >> tmpfile.txt
if exist revision.h del /q revision.h
for /f "delims=" %%l in (tmpfile.txt) Do (
echo %%l %addtext% >> revision.h
)
del /q revision.h
ren tmpfile.txt revision.h
del /q tmpfile.txt

View File

@ -87,7 +87,7 @@ private:
this->m_aiImageList[4] = 4;
this->m_avCheckerColors[0].x = this->m_avCheckerColors[0].y = this->m_avCheckerColors[0].z = 0.4f;
this->m_avCheckerColors[0].x = this->m_avCheckerColors[1].y = this->m_avCheckerColors[2].z = 0.6f;
this->m_avCheckerColors[1].x = this->m_avCheckerColors[1].y = this->m_avCheckerColors[1].z = 0.6f;
}
public:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 42 KiB

View File

@ -122,7 +122,7 @@ void CLogDisplay::OnRender()
// if no asset is loaded draw a "no asset loaded" text in the center
if (!g_pcAsset)
{
const char* szText = "No asset loaded\r\nUse [Viewer | Open asset] to load one";
const char* szText = "Nothing to display ... \r\nTry [Viewer | Open asset] to load an asset";
// shadow
RECT sCopy;

View File

@ -80,15 +80,22 @@ void MakeFileAssociations()
HKEY g_hRegistry;
aiString list;
aiString list, tmp;
aiGetExtensionList(&list);
tmp = list;
while (1)
const char* sz = strtok(list.data,";");
do
{
RegCreateKeyEx(HKEY_CURRENT_USER,"Software\\Classes\\.3ds",NULL,NULL,0,KEY_ALL_ACCESS, NULL, &g_hRegistry,NULL);
char buf[256];
assert(sz[0] == '*');
sprintf(buf,"Software\\Classes\\%s",sz+1);
RegCreateKeyEx(HKEY_CURRENT_USER,buf,NULL,NULL,0,KEY_ALL_ACCESS, NULL, &g_hRegistry,NULL);
RegSetValueEx(g_hRegistry,"",0,REG_SZ,(const BYTE*)"ASSIMPVIEW_CLASS",(DWORD)strlen("ASSIMPVIEW_CLASS")+1);
RegCloseKey(g_hRegistry);
}
while (sz = strtok(NULL,";"));
RegCreateKeyEx(HKEY_CURRENT_USER,"Software\\Classes\\ASSIMPVIEW_CLASS",NULL,NULL,0,KEY_ALL_ACCESS, NULL, &g_hRegistry,NULL);
RegCloseKey(g_hRegistry);
@ -100,11 +107,7 @@ void MakeFileAssociations()
CLogDisplay::Instance().AddEntry("[OK] File assocations have been registered",
D3DCOLOR_ARGB(0xFF,0,0xFF,0));
aiString sz;
aiGetExtensionList(&sz);
CLogDisplay::Instance().AddEntry(sz.data,
D3DCOLOR_ARGB(0xFF,0,0xFF,0));
return;
CLogDisplay::Instance().AddEntry(tmp.data,D3DCOLOR_ARGB(0xFF,0,0xFF,0));
}
@ -192,6 +195,16 @@ void LoadCheckerPatternColors()
(BYTE*) /* jep, this is evil */ CDisplay::Instance().GetSecondCheckerColor(),&dwTemp);
}
//-------------------------------------------------------------------------------
// Changed pp setup
//-------------------------------------------------------------------------------
void UpdatePPSettings()
{
DWORD dwValue = ppsteps;
RegSetValueExA(g_hRegistry,"PostProcessing",0,REG_DWORD,(const BYTE*)&dwValue,4);
UpdateWindow(g_hDlg);
}
//-------------------------------------------------------------------------------
// Toggle the "Display Normals" state
//-------------------------------------------------------------------------------
@ -203,7 +216,6 @@ void ToggleNormals()
DWORD dwValue = 0;
if (g_sOptions.bRenderNormals)dwValue = 1;
RegSetValueExA(g_hRegistry,"RenderNormals",0,REG_DWORD,(const BYTE*)&dwValue,4);
UpdateWindow(g_hDlg);
}
//-------------------------------------------------------------------------------
@ -232,7 +244,6 @@ void ToggleFPSView()
DWORD dwValue = 0;
if (g_bFPSView)dwValue = 1;
RegSetValueExA(g_hRegistry,"FPSView",0,REG_DWORD,(const BYTE*)&dwValue,4);
UpdateWindow(g_hDlg);
}
//-------------------------------------------------------------------------------
@ -246,7 +257,6 @@ void ToggleMultipleLights()
DWORD dwValue = 0;
if (g_sOptions.b3Lights)dwValue = 1;
RegSetValueExA(g_hRegistry,"MultipleLights",0,REG_DWORD,(const BYTE*)&dwValue,4);
UpdateWindow(g_hDlg);
}
//-------------------------------------------------------------------------------
@ -260,7 +270,6 @@ void ToggleLightRotate()
DWORD dwValue = 0;
if (g_sOptions.bLightRotate)dwValue = 1;
RegSetValueExA(g_hRegistry,"LightRotate",0,REG_DWORD,(const BYTE*)&dwValue,4);
UpdateWindow(g_hDlg);
}
//-------------------------------------------------------------------------------
@ -274,7 +283,6 @@ void ToggleLowQuality()
DWORD dwValue = 0;
if (g_sOptions.bLowQuality)dwValue = 1;
RegSetValueExA(g_hRegistry,"LowQuality",0,REG_DWORD,(const BYTE*)&dwValue,4);
UpdateWindow(g_hDlg);
}
//-------------------------------------------------------------------------------
@ -291,7 +299,6 @@ void ToggleSpecular()
// update all specular materials
CMaterialManager::Instance().UpdateSpecularMaterials();
UpdateWindow(g_hDlg);
}
//-------------------------------------------------------------------------------
@ -308,7 +315,6 @@ void ToggleMats()
// update all specular materials
CMaterialManager::Instance().UpdateSpecularMaterials();
UpdateWindow(g_hDlg);
}
//-------------------------------------------------------------------------------
@ -350,7 +356,6 @@ void ToggleWireFrame()
DWORD dwValue = 0;
if (RenderOptions::WIREFRAME == g_sOptions.eDrawMode)dwValue = 1;
RegSetValueExA(g_hRegistry,"Wireframe",0,REG_DWORD,(const BYTE*)&dwValue,4);
UpdateWindow(g_hDlg);
}
@ -386,7 +391,6 @@ void ToggleMS()
DWORD dwValue = 0;
if (g_sOptions.bMultiSample)dwValue = 1;
RegSetValueExA(g_hRegistry,"MultiSampling",0,REG_DWORD,(const BYTE*)&dwValue,4);
UpdateWindow(g_hDlg);
}
//-------------------------------------------------------------------------------
@ -958,6 +962,28 @@ void OpenAsset()
return;
}
//-------------------------------------------------------------------------------
void SetupPPUIState()
{
// fucking hell, that's ugly. anyone willing to rewrite me from scratch?
HMENU hMenu = GetMenu(g_hDlg);
CheckMenuItem(hMenu,ID_VIEWER_PP_JIV,ppsteps & aiProcess_JoinIdenticalVertices ? MF_CHECKED : MF_UNCHECKED);
CheckMenuItem(hMenu,ID_VIEWER_PP_CTS,ppsteps & aiProcess_CalcTangentSpace ? MF_CHECKED : MF_UNCHECKED);
CheckMenuItem(hMenu,ID_VIEWER_PP_FD,ppsteps & aiProcess_FindDegenerates ? MF_CHECKED : MF_UNCHECKED);
CheckMenuItem(hMenu,ID_VIEWER_PP_FID,ppsteps & aiProcess_FindInvalidData ? MF_CHECKED : MF_UNCHECKED);
CheckMenuItem(hMenu,ID_VIEWER_PP_FIM,ppsteps & aiProcess_FindInstances ? MF_CHECKED : MF_UNCHECKED);
CheckMenuItem(hMenu,ID_VIEWER_PP_FIN,ppsteps & aiProcess_FixInfacingNormals ? MF_CHECKED : MF_UNCHECKED);
CheckMenuItem(hMenu,ID_VIEWER_PP_GUV,ppsteps & aiProcess_GenUVCoords ? MF_CHECKED : MF_UNCHECKED);
CheckMenuItem(hMenu,ID_VIEWER_PP_ICL,ppsteps & aiProcess_ImproveCacheLocality ? MF_CHECKED : MF_UNCHECKED);
CheckMenuItem(hMenu,ID_VIEWER_PP_OG,ppsteps & aiProcess_OptimizeGraph ? MF_CHECKED : MF_UNCHECKED);
CheckMenuItem(hMenu,ID_VIEWER_PP_OM,ppsteps & aiProcess_OptimizeMeshes ? MF_CHECKED : MF_UNCHECKED);
CheckMenuItem(hMenu,ID_VIEWER_PP_PTV,ppsteps & aiProcess_PreTransformVertices ? MF_CHECKED : MF_UNCHECKED);
CheckMenuItem(hMenu,ID_VIEWER_PP_RRM2,ppsteps & aiProcess_RemoveRedundantMaterials ? MF_CHECKED : MF_UNCHECKED);
CheckMenuItem(hMenu,ID_VIEWER_PP_TUV,ppsteps & aiProcess_TransformUVCoords ? MF_CHECKED : MF_UNCHECKED);
CheckMenuItem(hMenu,ID_VIEWER_PP_VDS,ppsteps & aiProcess_ValidateDataStructure ? MF_CHECKED : MF_UNCHECKED);
}
//-------------------------------------------------------------------------------
// Initialize the user interface
//-------------------------------------------------------------------------------
@ -1149,6 +1175,12 @@ void InitUI()
g_sOptions.eDrawMode = RenderOptions::WIREFRAME;
CheckDlgButton(g_hDlg,IDC_TOGGLEWIRE,BST_CHECKED);
}
if(ERROR_SUCCESS != RegQueryValueEx(g_hRegistry,"PostProcessing",NULL,NULL,(BYTE*)&dwValue,&dwTemp))
ppsteps = ppstepsdefault;
else ppsteps = dwValue;
SetupPPUIState();
LoadCheckerPatternColors();
SendDlgItemMessage(g_hDlg,IDC_SLIDERANIM,TBM_SETRANGEMIN,TRUE,0);
@ -1649,6 +1681,7 @@ INT_PTR CALLBACK MessageProc(HWND hwndDlg,UINT uMsg,
case WM_COMMAND:
HMENU hMenu = GetMenu(g_hDlg);
if (ID_VIEWER_QUIT == LOWORD(wParam))
{
PostQuitMessage(0);
@ -1680,6 +1713,22 @@ INT_PTR CALLBACK MessageProc(HWND hwndDlg,UINT uMsg,
{
CLogWindow::Instance().Show();
}
else if (ID__WEBSITE == LOWORD(wParam))
{
ShellExecute(NULL,"open","http://assimp.sourceforge.net","","",SW_SHOW);
}
else if (ID__WEBSITESF == LOWORD(wParam))
{
ShellExecute(NULL,"open","https://sourceforge.net/projects/assimp","","",SW_SHOW);
}
else if (ID_REPORTBUG == LOWORD(wParam))
{
ShellExecute(NULL,"open","https://sourceforge.net/tracker/?func=add&group_id=226462&atid=1067632","","",SW_SHOW);
}
else if (ID_FR == LOWORD(wParam))
{
ShellExecute(NULL,"open","https://sourceforge.net/forum/forum.php?forum_id=817653","","",SW_SHOW);
}
else if (ID_TOOLS_CLEARLOG == LOWORD(wParam))
{
CLogWindow::Instance().Clear();
@ -1727,34 +1776,122 @@ INT_PTR CALLBACK MessageProc(HWND hwndDlg,UINT uMsg,
g_pcAsset->FlipNormals();
}
}
// fucking hell, this is ugly. anyone willing to rewrite it from scratch using wxwidgets or similar?
else if (ID_VIEWER_PP_JIV == LOWORD(wParam)) {
ppsteps ^= aiProcess_JoinIdenticalVertices;
CheckMenuItem(hMenu,ID_VIEWER_PP_JIV,ppsteps & aiProcess_JoinIdenticalVertices ? MF_CHECKED : MF_UNCHECKED);
UpdatePPSettings();
}
else if (ID_VIEWER_PP_CTS == LOWORD(wParam)) {
ppsteps ^= aiProcess_CalcTangentSpace;
CheckMenuItem(hMenu,ID_VIEWER_PP_CTS,ppsteps & aiProcess_CalcTangentSpace ? MF_CHECKED : MF_UNCHECKED);
UpdatePPSettings();
}
else if (ID_VIEWER_PP_FD == LOWORD(wParam)) {
ppsteps ^= aiProcess_FindDegenerates;
CheckMenuItem(hMenu,ID_VIEWER_PP_FD,ppsteps & aiProcess_FindDegenerates ? MF_CHECKED : MF_UNCHECKED);
UpdatePPSettings();
}
else if (ID_VIEWER_PP_FID == LOWORD(wParam)) {
ppsteps ^= aiProcess_FindInvalidData;
CheckMenuItem(hMenu,ID_VIEWER_PP_FID,ppsteps & aiProcess_FindInvalidData ? MF_CHECKED : MF_UNCHECKED);
UpdatePPSettings();
}
else if (ID_VIEWER_PP_FIM == LOWORD(wParam)) {
ppsteps ^= aiProcess_FindInstances;
CheckMenuItem(hMenu,ID_VIEWER_PP_FIM,ppsteps & aiProcess_FindInstances ? MF_CHECKED : MF_UNCHECKED);
UpdatePPSettings();
}
else if (ID_VIEWER_PP_FIN == LOWORD(wParam)) {
ppsteps ^= aiProcess_FixInfacingNormals;
CheckMenuItem(hMenu,ID_VIEWER_PP_FIN,ppsteps & aiProcess_FixInfacingNormals ? MF_CHECKED : MF_UNCHECKED);
UpdatePPSettings();
}
else if (ID_VIEWER_PP_GUV == LOWORD(wParam)) {
ppsteps ^= aiProcess_GenUVCoords;
CheckMenuItem(hMenu,ID_VIEWER_PP_GUV,ppsteps & aiProcess_GenUVCoords ? MF_CHECKED : MF_UNCHECKED);
UpdatePPSettings();
}
else if (ID_VIEWER_PP_ICL == LOWORD(wParam)) {
ppsteps ^= aiProcess_ImproveCacheLocality;
CheckMenuItem(hMenu,ID_VIEWER_PP_ICL,ppsteps & aiProcess_ImproveCacheLocality ? MF_CHECKED : MF_UNCHECKED);
UpdatePPSettings();
}
else if (ID_VIEWER_PP_OG == LOWORD(wParam)) {
if (ppsteps & aiProcess_PreTransformVertices) {
CLogDisplay::Instance().AddEntry("[ERROR] This setting is incompatible with \'Pretransform Vertices\'");
}
else {
ppsteps ^= aiProcess_OptimizeGraph;
CheckMenuItem(hMenu,ID_VIEWER_PP_OG,ppsteps & aiProcess_OptimizeGraph ? MF_CHECKED : MF_UNCHECKED);
UpdatePPSettings();
}
}
else if (ID_VIEWER_PP_OM == LOWORD(wParam)) {
ppsteps ^= aiProcess_OptimizeMeshes;
CheckMenuItem(hMenu,ID_VIEWER_PP_OM,ppsteps & aiProcess_OptimizeMeshes ? MF_CHECKED : MF_UNCHECKED);
UpdatePPSettings();
}
else if (ID_VIEWER_PP_PTV == LOWORD(wParam)) {
if (ppsteps & aiProcess_OptimizeGraph) {
CLogDisplay::Instance().AddEntry("[ERROR] This setting is incompatible with \'Optimize Scenegraph\'");
}
else {
ppsteps ^= aiProcess_PreTransformVertices;
CheckMenuItem(hMenu,ID_VIEWER_PP_PTV,ppsteps & aiProcess_PreTransformVertices ? MF_CHECKED : MF_UNCHECKED);
UpdatePPSettings();
}
}
else if (ID_VIEWER_PP_RRM2 == LOWORD(wParam)) {
ppsteps ^= aiProcess_RemoveRedundantMaterials;
CheckMenuItem(hMenu,ID_VIEWER_PP_RRM2,ppsteps & aiProcess_RemoveRedundantMaterials ? MF_CHECKED : MF_UNCHECKED);
UpdatePPSettings();
}
else if (ID_VIEWER_PP_TUV == LOWORD(wParam)) {
ppsteps ^= aiProcess_TransformUVCoords;
CheckMenuItem(hMenu,ID_VIEWER_PP_TUV,ppsteps & aiProcess_TransformUVCoords ? MF_CHECKED : MF_UNCHECKED);
UpdatePPSettings();
}
else if (ID_VIEWER_PP_VDS == LOWORD(wParam)) {
ppsteps ^= aiProcess_ValidateDataStructure;
CheckMenuItem(hMenu,ID_VIEWER_PP_VDS,ppsteps & aiProcess_ValidateDataStructure ? MF_CHECKED : MF_UNCHECKED);
UpdatePPSettings();
}
else if (ID_VIEWER_RELOAD == LOWORD(wParam))
{
DeleteAsset();
LoadAsset();
}
else if (ID_IMPORTSETTINGS_RESETTODEFAULT == LOWORD(wParam))
{
ppsteps = ppstepsdefault;
UpdatePPSettings();
SetupPPUIState();
}
else if (ID_IMPORTSETTINGS_OPENPOST == LOWORD(wParam))
{
ShellExecute(NULL,"open","http://assimp.sourceforge.net/lib_html/ai_post_process_8h.html","","",SW_SHOW);
}
else if (ID_TOOLS_ORIGINALNORMALS == LOWORD(wParam))
{
if (g_pcAsset && g_pcAsset->pcScene)
{
g_pcAsset->SetNormalSet(AssimpView::AssetHelper::ORIGINAL);
HMENU hMenu = GetMenu(g_hDlg);
ModifyMenu(hMenu,ID_TOOLS_ORIGINALNORMALS,
MF_BYCOMMAND | MF_CHECKED | MF_STRING,ID_TOOLS_ORIGINALNORMALS,"Original normals");
ModifyMenu(hMenu,ID_TOOLS_HARDNORMALS,
MF_BYCOMMAND | MF_UNCHECKED | MF_STRING,ID_TOOLS_HARDNORMALS,"Hard normals");
ModifyMenu(hMenu,ID_TOOLS_SMOOTHNORMALS,
MF_BYCOMMAND | MF_UNCHECKED | MF_STRING,ID_TOOLS_SMOOTHNORMALS,"Smooth normals");
CheckMenuItem(hMenu,ID_TOOLS_ORIGINALNORMALS,MF_BYCOMMAND | MF_CHECKED);
CheckMenuItem(hMenu,ID_TOOLS_HARDNORMALS,MF_BYCOMMAND | MF_UNCHECKED);
CheckMenuItem(hMenu,ID_TOOLS_SMOOTHNORMALS,MF_BYCOMMAND | MF_UNCHECKED);
}
}
else if (ID_TOOLS_SMOOTHNORMALS == LOWORD(wParam))
{
if (g_pcAsset && g_pcAsset->pcScene)
{
g_pcAsset->SetNormalSet(AssimpView::AssetHelper::SMOOTH);
HMENU hMenu = GetMenu(g_hDlg);
ModifyMenu(hMenu,ID_TOOLS_SMOOTHNORMALS,
MF_BYCOMMAND | MF_CHECKED | MF_STRING,ID_TOOLS_SMOOTHNORMALS,"Smooth normals");
ModifyMenu(hMenu,ID_TOOLS_HARDNORMALS,
MF_BYCOMMAND | MF_UNCHECKED | MF_STRING,ID_TOOLS_HARDNORMALS,"Hard normals");
ModifyMenu(hMenu,ID_TOOLS_ORIGINALNORMALS,
MF_BYCOMMAND | MF_UNCHECKED | MF_STRING,ID_TOOLS_ORIGINALNORMALS,"Original normals");
CheckMenuItem(hMenu,ID_TOOLS_ORIGINALNORMALS,MF_BYCOMMAND | MF_UNCHECKED);
CheckMenuItem(hMenu,ID_TOOLS_HARDNORMALS,MF_BYCOMMAND | MF_UNCHECKED);
CheckMenuItem(hMenu,ID_TOOLS_SMOOTHNORMALS,MF_BYCOMMAND | MF_CHECKED);
}
}
else if (ID_TOOLS_HARDNORMALS == LOWORD(wParam))
@ -1762,14 +1899,9 @@ INT_PTR CALLBACK MessageProc(HWND hwndDlg,UINT uMsg,
if (g_pcAsset && g_pcAsset->pcScene)
{
g_pcAsset->SetNormalSet(AssimpView::AssetHelper::HARD);
HMENU hMenu = GetMenu(g_hDlg);
ModifyMenu(hMenu,ID_TOOLS_HARDNORMALS,
MF_BYCOMMAND | MF_CHECKED | MF_STRING,ID_TOOLS_HARDNORMALS,"Hard normals");
ModifyMenu(hMenu,ID_TOOLS_ORIGINALNORMALS,
MF_BYCOMMAND | MF_UNCHECKED | MF_STRING,ID_TOOLS_ORIGINALNORMALS,"Original normals");
ModifyMenu(hMenu,ID_TOOLS_SMOOTHNORMALS,
MF_BYCOMMAND | MF_UNCHECKED | MF_STRING,ID_TOOLS_SMOOTHNORMALS,"Smooth normals");
CheckMenuItem(hMenu,ID_TOOLS_ORIGINALNORMALS,MF_BYCOMMAND | MF_UNCHECKED);
CheckMenuItem(hMenu,ID_TOOLS_HARDNORMALS,MF_BYCOMMAND | MF_CHECKED);
CheckMenuItem(hMenu,ID_TOOLS_SMOOTHNORMALS,MF_BYCOMMAND | MF_UNCHECKED);
}
}
else if (ID_TOOLS_STEREOVIEW == LOWORD(wParam))
@ -2107,7 +2239,7 @@ int APIENTRY _tWinMain(HINSTANCE hInstance,
"ASSIMP ModelViewer",MB_OK);
return -4;
}
CLogDisplay::Instance().AddEntry("[OK] assimp_view has been initialized successfully");
CLogDisplay::Instance().AddEntry("[OK] Here we go!");
// create the log window
CLogWindow::Instance().Init();

Binary file not shown.

View File

@ -76,6 +76,25 @@ IDirect3DTexture9* g_pcTexture = NULL;
bool g_bPlay = false;
double g_dCurrent = 0.;
// default pp steps
unsigned int ppsteps = aiProcess_CalcTangentSpace | // calculate tangents and bitangents if possible
aiProcess_JoinIdenticalVertices | // join identical vertices/ optimize indexing
aiProcess_ValidateDataStructure | // perform a full validation of the loader's output
aiProcess_ImproveCacheLocality | // improve the cache locality of the output vertices
aiProcess_RemoveRedundantMaterials | // remove redundant materials
aiProcess_FindDegenerates | // remove degenerated polygons from the import
aiProcess_FindInvalidData | // detect invalid model data, such as invalid normal vectors
aiProcess_GenUVCoords | // convert spherical, cylindrical, box and planar mapping to proper UVs
aiProcess_TransformUVCoords | // preprocess UV transformations (scaling, translation ...)
aiProcess_FindInstances | // search for instanced meshes and remove them by references to one master
aiProcess_LimitBoneWeights | // limit bone weights to 4 per vertex
aiProcess_OptimizeMeshes | // join small meshes, if possible;
0;
unsigned int ppstepsdefault = ppsteps;
bool nopointslines = false;
extern bool g_bWasFlipped /*= false*/;
aiMatrix4x4 g_mWorld;
@ -129,31 +148,21 @@ DWORD WINAPI LoadThreadProc(LPVOID lpParameter)
double fCur = (double)timeGetTime();
aiSetImportPropertyInteger(AI_CONFIG_IMPORT_TER_MAKE_UVS,1);
aiSetImportPropertyFloat(AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE,80.f);
aiSetImportPropertyFloat(AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE,g_smoothAngle);
aiSetImportPropertyInteger(AI_CONFIG_PP_SBP_REMOVE,nopointslines ? aiPrimitiveType_LINE | aiPrimitiveType_POINT : 0 );
//aiSetImportPropertyInteger(AI_CONFIG_PP_FD_REMOVE,1);
//aiSetImportPropertyInteger(AI_CONFIG_PP_PTV_KEEP_HIERARCHY,1);
// Call ASSIMPs C-API to load the file
g_pcAsset->pcScene = (aiScene*)aiImportFile(g_szFileName,
aiProcess_CalcTangentSpace | // calculate tangents and bitangents if possible
aiProcess_JoinIdenticalVertices | // join identical vertices/ optimize indexing
aiProcess_Triangulate | // triangulate polygons with more than 3 edges
ppsteps | /* configurable pp steps */
aiProcess_GenSmoothNormals | // generate smooth normal vectors if not existing
aiProcess_ConvertToLeftHanded | // convert everything to D3D left handed space
aiProcess_SplitLargeMeshes | // split large, unrenderable meshes into submeshes
aiProcess_ValidateDataStructure | // perform a full validation of the loader's output
aiProcess_ImproveCacheLocality | // improve the cache locality of the output vertices
aiProcess_RemoveRedundantMaterials | // remove redundant materials
aiProcess_Triangulate | // triangulate polygons with more than 3 edges
aiProcess_ConvertToLeftHanded | // convert everything to D3D left handed space
aiProcess_SortByPType | // make 'clean' meshes which consist of a single typ of primitives
aiProcess_FindDegenerates | // remove degenerated polygons from the import
aiProcess_FindInvalidData | // detect invalid model data, such as invalid normal vectors
aiProcess_GenUVCoords | // convert spherical, cylindrical, box and planar mapping to proper UVs
aiProcess_TransformUVCoords | // preprocess UV transformations (scaling, translation ...)
aiProcess_FindInstances | // search for instanced meshes and remove them by references to one master
aiProcess_LimitBoneWeights | // limit bone weights to 4 per vertex
aiProcess_OptimizeMeshes | // join small meshes, if possible
// aiProcess_OptimizeGraph | // optimize unneeded nodes away
// aiProcess_PreTransformVertices |
0);
// get the end time of zje operation, calculate delta t

View File

@ -276,7 +276,10 @@ enum EClickPos
extern bool g_bPlay /*= false*/;
extern double g_dCurrent;
extern float g_smoothAngle /*= 90.f*/;
extern float g_smoothAngle /*= 80.f*/;
extern unsigned int ppsteps,ppstepsdefault;
extern bool nopointslines;
}
#endif // !! AV_MAIN_H_INCLUDED

View File

@ -1,7 +1,6 @@
// Microsoft Visual C++ generated resource script.
//
#include "resource.h"
#include "../../mkutil/revision.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
@ -38,26 +37,24 @@ IDI_ASSIMP_VIEW ICON "../shared/assimp_tools_icon.ico
// Dialog
//
IDD_ABOUTBOX DIALOGEX 22, 17, 283, 169
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_CAPTION | WS_SYSMENU
IDD_ABOUTBOX DIALOGEX 22, 17, 283, 149
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_CAPTION | WS_SYSMENU
CAPTION "About Open Asset Import Library"
FONT 10, "MS Shell Dlg", 400, 0, 0x0
FONT 9, "Courier New", 400, 0, 0x0
BEGIN
LTEXT "Open Asset Import Library (Assimp)",IDC_STATIC,77,13,121,12
LTEXT "A free C/C++ library for game && graphics developers. Developed by members of the german game development community www.zfx.info",IDC_STATIC,47,26,204,24
LTEXT "Thomas Schulze \t\taka <Schrompf> ",IDC_STATIC,55,80,192,8
LTEXT "Kim Kulling \t\t\taka <Kimmi> ",IDC_STATIC,55,92,186,8
LTEXT "Rainer Schmidt \t\t\taka <Guru>",IDC_STATIC,55,104,180,8
LTEXT "Alexander Gessler\t\taka <Aramis>",IDC_STATIC,55,68,186,8
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,60,282,1
LTEXT "assimp.sourceforge.net",IDC_STATIC,7,137,78,8
DEFPUSHBUTTON "Love this library",IDOK,200,128,67,14
LTEXT "Open Asset Import Library (Assimp)",IDC_STATIC,30,14,144,9
LTEXT "A free C/C++ library to read various well-known 3D model formats into a straightforward in-memory format that can be easily read and processed by applications. Licensed under a 3-clause BSD license.",IDC_STATIC,31,34,204,24
LTEXT "(c) 2008-2009. Assimp Development Team. See the CREDITS file for a list of all contributors.",IDC_STATIC,30,65,204,23
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,27,282,1
LTEXT "http://assimp.sourceforge.net http://www.zfx.info",IDC_STATIC,31,101,127,22
DEFPUSHBUTTON "Love this library",IDOK,186,110,84,14
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,148,283,1
CONTROL 130,IDC_STATIC,"Static",SS_BITMAP,0,149,514,20
CONTROL 130,IDC_STATIC,"Static",SS_BITMAP,0,129,514,20
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,10,281,1
END
IDD_DIALOGMAIN DIALOGEX 0, 0, 594, 380
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
IDD_DIALOGMAIN DIALOGEX 0, 0, 594, 381
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_ACCEPTFILES
CAPTION "Open Asset Import Library - ModelViewer "
MENU IDR_MENU1
@ -74,9 +71,9 @@ BEGIN
CONTROL "Display normals",IDC_TOGGLENORMALS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,473,271,65,10
CONTROL "Toggle AutoRotate",IDC_AUTOROTATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,473,348,74,10
EDITTEXT IDC_EVERT,504,11,32,12,ES_AUTOHSCROLL | ES_READONLY
EDITTEXT IDC_EFACE,562,11,29,12,ES_AUTOHSCROLL | ES_READONLY
EDITTEXT IDC_EMAT,562,24,29,12,ES_AUTOHSCROLL | ES_READONLY
EDITTEXT IDC_EFPS,562,50,29,12,ES_AUTOHSCROLL | ES_READONLY
EDITTEXT IDC_EFACE,565,11,29,12,ES_AUTOHSCROLL | ES_READONLY
EDITTEXT IDC_EMAT,565,24,29,12,ES_AUTOHSCROLL | ES_READONLY
EDITTEXT IDC_EFPS,565,50,29,12,ES_AUTOHSCROLL | ES_READONLY
CONTROL "Rotate light sources",IDC_LIGHTROTATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,473,368,74,10
CONTROL "Two lights",IDC_3LIGHTS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,473,281,48,10
LTEXT "Time:",IDC_LOADTIME,475,51,29,8
@ -101,16 +98,16 @@ BEGIN
CONTROL 148,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE,470,229,114,9
CONTROL 147,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE,470,336,114,9
CONTROL 146,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE,470,65,114,9
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDVERT,469,0,1,380
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDVERT,469,0,1,381
CONTROL 149,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE,584,0,10,9
CONTROL 149,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE,584,65,10,9
CONTROL 149,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE,583,229,10,9
CONTROL 149,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE,584,229,10,9
CONTROL 149,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE,584,336,10,9
LTEXT "Nodes:",IDC_NUMNODES,476,26,24,8
EDITTEXT IDC_ENODEWND,504,24,32,12,ES_AUTOHSCROLL | ES_READONLY
CONTROL "",IDC_TREE1,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,470,74,123,155
CONTROL "",IDC_TREE1,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,471,74,123,155
LTEXT "Mesh:",IDC_NUMMESHES,540,39,20,8
EDITTEXT IDC_EMESH,562,37,29,12,ES_AUTOHSCROLL | ES_READONLY
EDITTEXT IDC_EMESH,565,37,29,12,ES_AUTOHSCROLL | ES_READONLY
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDVERT,567,238,1,93
CONTROL "Button1",IDC_LCOLOR1,"Button",BS_OWNERDRAW | WS_TABSTOP,570,242,21,17
CONTROL "Button1",IDC_LCOLOR2,"Button",BS_OWNERDRAW | WS_TABSTOP,570,262,21,17
@ -156,18 +153,20 @@ BEGIN
CONTROL "",IDC_EDIT1,"RichEdit20A",ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | ES_NUMBER | WS_VSCROLL | WS_TABSTOP,3,4,358,174,WS_EX_STATICEDGE
END
IDD_DIALOGSMOOTH DIALOGEX 0, 0, 253, 86
IDD_DIALOGSMOOTH DIALOGEX 0, 0, 278, 141
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Set smooth limit "
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "OK",IDOK,195,53,50,14
PUSHBUTTON "Cancel",IDCANCEL,143,53,50,14
EDITTEXT IDC_EDITSM,107,7,139,14,ES_AUTOHSCROLL | ES_NUMBER
DEFPUSHBUTTON "OK",IDOK,213,94,50,14
PUSHBUTTON "Cancel",IDCANCEL,161,94,50,14
EDITTEXT IDC_EDITSM,99,7,175,14,ES_AUTOHSCROLL | ES_NUMBER
LTEXT "Angle limit (in degrees):",IDC_STATIC,13,10,76,8
LTEXT "The angle limit defines the maximum angle that may be between two adjacent face normals that they're smoothed together.",IDC_STATIC,13,27,231,19
LTEXT "NOTE: use 'Smooth normals' to update the normals to the new settings",IDC_STATIC,12,75,230,8
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,7,73,239,1
LTEXT "The angle limit defines the maximum angle that may be between two adjacent face normals that they're smoothed together.",IDC_STATIC,13,31,253,19
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,113,278,1
LTEXT "This setting is also used during import, but it can be overriden by single model importers to match the original look of a model as closely as possible. Examples include 3DS, ASE and LWO, all of them relying on smoothing groups and their own angle limits. ",IDC_STATIC,13,51,254,33
LTEXT "NOTE: New settings don't take effect immediately, use 'Smooth Normals' or 'Reload' to update the model.",IDC_STATIC,14,118,254,22
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,90,277,1
END
@ -205,8 +204,8 @@ END
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,SVNRevision,0
PRODUCTVERSION 1,0,SVNRevision,1
FILEVERSION 1,0,412,0
PRODUCTVERSION 1,0,412,1
FILEFLAGSMASK 0x17L
#ifdef _DEBUG
FILEFLAGS 0x1L
@ -249,7 +248,7 @@ BEGIN
IDD_ABOUTBOX, DIALOG
BEGIN
TOPMARGIN, 1
BOTTOMMARGIN, 158
BOTTOMMARGIN, 138
END
IDD_LOADDIALOG, DIALOG
@ -277,9 +276,9 @@ BEGIN
IDD_DIALOGSMOOTH, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 246
RIGHTMARGIN, 271
TOPMARGIN, 7
BOTTOMMARGIN, 79
BOTTOMMARGIN, 134
END
END
#endif // APSTUDIO_INVOKED
@ -313,8 +312,36 @@ BEGIN
BEGIN
MENUITEM "Open Asset", ID_VIEWER_OPEN
MENUITEM "Close Asset", ID_VIEWER_CLOSEASSET
MENUITEM "Reload", ID_VIEWER_RELOAD
POPUP "Import settings"
BEGIN
MENUITEM "Calculate Tangent Space", ID_VIEWER_PP_CTS
MENUITEM "Compute Indexed Meshes", ID_VIEWER_PP_JIV
MENUITEM "Optimize Materials", ID_VIEWER_PP_RRM2
MENUITEM "Optimize Meshes", ID_VIEWER_PP_OM
MENUITEM "Optimize Scenegraph", ID_VIEWER_PP_OG
MENUITEM "Find Instanced Meshes", ID_VIEWER_PP_FIM
MENUITEM "Run Full Validation", ID_VIEWER_PP_VDS
MENUITEM "Pretransform Vertices", ID_VIEWER_PP_PTV
MENUITEM "VCache Optimization", ID_VIEWER_PP_ICL
MENUITEM "Fix Infacing Normals", ID_VIEWER_PP_FIN
MENUITEM "Find Degenerates", ID_VIEWER_PP_FD
MENUITEM "Find Invalid Data", ID_VIEWER_PP_FID
MENUITEM "Generate UV Coords", ID_VIEWER_PP_GUV
MENUITEM "Transform UV Coords", ID_VIEWER_PP_TUV
MENUITEM "Remove Lines and Points", ID_VIEWER_PP_RLINE_PNT, GRAYED
MENUITEM SEPARATOR
MENUITEM "(required) Triangulate", ID_VIEWER_PP_JIV, GRAYED
MENUITEM "(required) Limit Bone Weights", ID_VIEWER_PP_JIV, GRAYED
MENUITEM "(required) Split Large Meshes", ID_VIEWER_PP_JIV, GRAYED
MENUITEM "(required) Sort by primitive type", ID_VIEWER_PP_JIV, GRAYED
MENUITEM "(required) Convert to Left-Handed", ID_VIEWER_PP_JIV, GRAYED
MENUITEM SEPARATOR
MENUITEM "Reset to default", ID_IMPORTSETTINGS_RESETTODEFAULT
MENUITEM "Open Post-Process Short Reference", ID_IMPORTSETTINGS_OPENPOST
END
MENUITEM SEPARATOR
MENUITEM "Screenshot", ID_VIEWER_SAVESCREENSHOTTOFILE
MENUITEM "Save Screenshot", ID_VIEWER_SAVESCREENSHOTTOFILE
MENUITEM "Reset view", ID_VIEWER_RESETVIEW
MENUITEM "Memory consumption", ID_VIEWER_MEMORYCONSUMATION
MENUITEM SEPARATOR
@ -352,12 +379,15 @@ BEGIN
BEGIN
POPUP "Feedback"
BEGIN
MENUITEM "Report bug", ID_FEEDBACK_GH
MENUITEM "Feature request", ID_FEEDBACK_FEATUREREQUEST
MENUITEM "Report bug", ID_REPORTBUG
MENUITEM "Feature request/discuss", ID_FR
END
MENUITEM "Help", ID__HELP
MENUITEM SEPARATOR
MENUITEM "About", ID__ABOUT
MENUITEM SEPARATOR
MENUITEM "Website", ID__WEBSITE
MENUITEM "SF.net Project Page", ID__WEBSITESF
END
END

View File

@ -41,6 +41,7 @@
#define IDR_TXPOPUP 156
#define IDR_MATPOPUP 157
#define IDD_DIALOGSMOOTH 159
#define SVNRevision 412
#define IDC_CHECK1 1000
#define IDC_TOGGLEMS 1000
#define IDC_CHECK2 1001
@ -187,6 +188,33 @@
#define ID_SMOOTHANGLE_120 32849
#define ID_SMOOTHANGLE_NONE 32850
#define ID_TOOLS_SETANGLELIMIT 32851
#define ID_VIEWER_PP_JIV 32852
#define ID_VIEWER_PP_RRM 32852
#define ID_VIEWER_PP_OM 32853
#define ID_VIEWER_PP_OG 32854
#define ID_VIEWER_PP_FIM 32855
#define ID_VIEWER_PP_VDS 32856
#define ID_VIEWER_PP_PTV 32857
#define ID_VIEWER_PP_ICL 32858
#define ID_VIEWER_PP_FIN 32859
#define ID_VIEWER_PP_FD 32860
#define ID_VIEWER_PP_FID 32861
#define ID_VIEWER_PP_GUV 32862
#define ID_VIEWER_PP_TUV 32863
#define ID_VIEWER_PP_RLINE_PNT 32864
#define ID_REPORTBUG 32865
#define ID_FR 32866
#define ID__WEBSITE 32867
#define ID__SF 32868
#define ID__ 32869
#define ID__WEBSITESF 32870
#define ID_IMPORTSETTINGS_CALCULATETANGENTSPACE 32871
#define ID_VIEWER_CTS 32872
#define ID_VIEWER_PP_CTS 32873
#define ID_VIEWER_RELOAD 32874
#define ID_VIEWER_PP_RRM2 32875
#define ID_IMPORTSETTINGS_RESETTODEFAULT 32876
#define ID_IMPORTSETTINGS_OPENPOST 32877
#define IDC_STATIC -1
// Next default values for new objects
@ -195,7 +223,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NO_MFC 1
#define _APS_NEXT_RESOURCE_VALUE 160
#define _APS_NEXT_COMMAND_VALUE 32852
#define _APS_NEXT_COMMAND_VALUE 32878
#define _APS_NEXT_CONTROL_VALUE 1057
#define _APS_NEXT_SYMED_VALUE 110
#endif

View File

@ -1613,6 +1613,10 @@
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
<File
RelativePath="..\..\tools\shared\assimp_tools_icon.ico"
>
</File>
<File
RelativePath="..\..\tools\assimp_view\assimp_view.ico"
>