diff --git a/code/BlenderLoader.cpp b/code/BlenderLoader.cpp
index 621c6455d..f0097ef73 100644
--- a/code/BlenderLoader.cpp
+++ b/code/BlenderLoader.cpp
@@ -554,7 +554,12 @@ void BlenderImporter::BuildMaterials(ConversionData& conv_data)
// basic material colors
aiColor3D col(mat->r,mat->g,mat->b);
- mout->AddProperty(&col,1,AI_MATKEY_COLOR_DIFFUSE);
+ if (mat->r || mat->g || mat->b ) {
+
+ // Usually, zero diffuse color means no diffuse color at all in the equation - seemingly.
+ // So we ommit this member to express this intent.
+ mout->AddProperty(&col,1,AI_MATKEY_COLOR_DIFFUSE);
+ }
col = aiColor3D(mat->specr,mat->specg,mat->specb);
mout->AddProperty(&col,1,AI_MATKEY_COLOR_SPECULAR);
@@ -681,7 +686,10 @@ void BlenderImporter::ConvertMesh(const Scene& in, const Object* obj, const Mesh
aiVector3D* vn = out->mNormals + out->mNumVertices;
// XXX we can't fold this easily, because we are restricted
- // to the member names from the BLEND file (v1,v2,v3,v4) ..
+ // to the member names from the BLEND file (v1,v2,v3,v4)
+ // which are assigned by the genblenddna.py script and
+ // cannot be changed without breaking the entire
+ // import process.
if (mf.v1 >= mesh->totvert) {
ThrowException("Vertex index v1 out of range");
diff --git a/tools/assimp_view/Display.cpp b/tools/assimp_view/Display.cpp
index 098870e68..57993c28e 100644
--- a/tools/assimp_view/Display.cpp
+++ b/tools/assimp_view/Display.cpp
@@ -1778,9 +1778,14 @@ int CDisplay::RenderFullScene()
if (NULL != g_pcAsset && NULL != g_pcAsset->pcScene->mRootNode)
{
// disable the z-buffer
- g_piDevice->SetRenderState(D3DRS_ZWRITEENABLE,FALSE);
+ if (!g_sOptions.bNoAlphaBlending) {
+ g_piDevice->SetRenderState(D3DRS_ZWRITEENABLE,FALSE);
+ }
RenderNode(g_pcAsset->pcScene->mRootNode,m,true);
- g_piDevice->SetRenderState(D3DRS_ZWRITEENABLE,TRUE);
+
+ if (!g_sOptions.bNoAlphaBlending) {
+ g_piDevice->SetRenderState(D3DRS_ZWRITEENABLE,TRUE);
+ }
}
// setup the stereo view if necessary
@@ -2042,6 +2047,11 @@ int CDisplay::RenderNode (aiNode* piNode,const aiMatrix4x4& piMatrix,
}
g_piDevice->SetVertexDeclaration( gDefaultVertexDecl);
+ if (g_sOptions.bNoAlphaBlending) {
+ // manually disable alphablending
+ g_piDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,FALSE);
+ }
+
if (bAlpha)CMeshRenderer::Instance().DrawSorted(piNode->mMeshes[i],aiMe);
else CMeshRenderer::Instance().DrawUnsorted(piNode->mMeshes[i]);
@@ -2235,7 +2245,7 @@ int CDisplay::RenderTextureView()
g_piPassThroughEffect->BeginPass(0);
if (aiTextureType_HEIGHT == m_pcCurrentTexture->iType ||
- aiTextureType_NORMALS == m_pcCurrentTexture->iType)
+ aiTextureType_NORMALS == m_pcCurrentTexture->iType || g_sOptions.bNoAlphaBlending)
{
// manually disable alpha blending
g_piDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,FALSE);
diff --git a/tools/assimp_view/Material.cpp b/tools/assimp_view/Material.cpp
index da90466af..f8299ea15 100644
--- a/tools/assimp_view/Material.cpp
+++ b/tools/assimp_view/Material.cpp
@@ -333,19 +333,20 @@ int CMaterialManager::LoadTexture(IDirect3DTexture9** p_ppiOut,aiString* szPath)
{
// it is an embedded file ... don't need the file format hint,
// simply let D3DX load the file
+ D3DXIMAGE_INFO info;
if (FAILED(D3DXCreateTextureFromFileInMemoryEx(g_piDevice,
g_pcAsset->pcScene->mTextures[iIndex]->pcData,
g_pcAsset->pcScene->mTextures[iIndex]->mWidth,
D3DX_DEFAULT,
D3DX_DEFAULT,
- 0,
+ 1,
D3DUSAGE_AUTOGENMIPMAP,
D3DFMT_UNKNOWN,
D3DPOOL_MANAGED,
D3DX_DEFAULT,
D3DX_DEFAULT,
0,
- NULL,
+ &info,
NULL,
p_ppiOut)))
{
diff --git a/tools/assimp_view/MeshRenderer.cpp b/tools/assimp_view/MeshRenderer.cpp
index c71274db8..864122709 100644
--- a/tools/assimp_view/MeshRenderer.cpp
+++ b/tools/assimp_view/MeshRenderer.cpp
@@ -88,11 +88,10 @@ int CMeshRenderer::DrawSorted(unsigned int iIndex,const aiMatrix4x4& mWorld)
if (!pcHelper || !pcMesh || !pcHelper->piIB)
return -5;
- if (pcMesh->mPrimitiveTypes != aiPrimitiveType_TRIANGLE)
- return DrawUnsorted(iIndex);
- if (pcMesh->HasBones())
+ if (pcMesh->mPrimitiveTypes != aiPrimitiveType_TRIANGLE || pcMesh->HasBones() || g_sOptions.bNoAlphaBlending)
return DrawUnsorted(iIndex);
+
// compute the position of the camera in worldspace
aiMatrix4x4 mWorldInverse = mWorld;
mWorldInverse.Inverse();
diff --git a/tools/assimp_view/MessageProc.cpp b/tools/assimp_view/MessageProc.cpp
index 5bd541c91..766dfbb4b 100644
--- a/tools/assimp_view/MessageProc.cpp
+++ b/tools/assimp_view/MessageProc.cpp
@@ -272,6 +272,19 @@ void ToggleLightRotate()
RegSetValueExA(g_hRegistry,"LightRotate",0,REG_DWORD,(const BYTE*)&dwValue,4);
}
+//-------------------------------------------------------------------------------
+// Toggle the "NoTransparency" state
+//-------------------------------------------------------------------------------
+void ToggleTransparency()
+{
+ g_sOptions.bNoAlphaBlending = !g_sOptions.bNoAlphaBlending;
+
+ // store this in the registry, too
+ DWORD dwValue = 0;
+ if (g_sOptions.bNoAlphaBlending)dwValue = 1;
+ RegSetValueExA(g_hRegistry,"NoTransparency",0,REG_DWORD,(const BYTE*)&dwValue,4);
+}
+
//-------------------------------------------------------------------------------
// Toggle the "LowQuality" state
//-------------------------------------------------------------------------------
@@ -777,13 +790,13 @@ void DisplayMemoryConsumption()
char szOut[2048];
sprintf(szOut,
- "(1 KB = 1024 Byte)\n\n"
- "ASSIMP Import Data: \t%i KB\n"
- "Texture data:\t\t%i KB\n"
- "Vertex buffers:\t\t%i KB\n"
- "Index buffers:\t\t%i KB\n"
- "Video Memory:\t\t%i KB\n\n"
- "Total: \t\t\t%i KB",
+ "(1 KiB = 1024 bytes)\n\n"
+ "ASSIMP Import Data: \t%i KiB\n"
+ "Texture data:\t\t%i KiB\n"
+ "Vertex buffers:\t\t%i KiB\n"
+ "Index buffers:\t\t%i KiB\n"
+ "Video Memory:\t\t%i KiB\n\n"
+ "Total: \t\t\t%i KiB",
iScene / 1024,iTexture / 1024,iVB / 1024,iIB / 1024,iVRAM / 1024,
(iScene + iTexture + iVB + iIB + iVRAM) / 1024);
MessageBox(g_hDlg,szOut,"Memory consumption",MB_OK);
@@ -1106,6 +1119,20 @@ void InitUI()
CheckDlgButton(g_hDlg,IDC_LOWQUALITY,BST_CHECKED);
}
+ // LowQuality
+ if(ERROR_SUCCESS != RegQueryValueEx(g_hRegistry,"NoTransparency",NULL,NULL,
+ (BYTE*)&dwValue,&dwTemp))dwValue = 0;
+ if (0 == dwValue)
+ {
+ g_sOptions.bNoAlphaBlending = false;
+ CheckDlgButton(g_hDlg,IDC_NOAB,BST_UNCHECKED);
+ }
+ else
+ {
+ g_sOptions.bNoAlphaBlending = true;
+ CheckDlgButton(g_hDlg,IDC_NOAB,BST_CHECKED);
+ }
+
// DisplayNormals
if(ERROR_SUCCESS != RegQueryValueEx(g_hRegistry,"RenderNormals",NULL,NULL,
(BYTE*)&dwValue,&dwTemp))dwValue = 0;
@@ -2020,6 +2047,10 @@ INT_PTR CALLBACK MessageProc(HWND hwndDlg,UINT uMsg,
{
ToggleSpecular();
}
+ else if (IDC_NOAB == LOWORD(wParam))
+ {
+ ToggleTransparency();
+ }
else if (IDC_ZOOM == LOWORD(wParam))
{
ToggleFPSView();
diff --git a/tools/assimp_view/RenderOptions.h b/tools/assimp_view/RenderOptions.h
index fea743d75..9e0223186 100644
--- a/tools/assimp_view/RenderOptions.h
+++ b/tools/assimp_view/RenderOptions.h
@@ -37,7 +37,10 @@ class RenderOptions
bNoSpecular (false),
bStereoView (false),
bCulling (false),
- bSkeleton (false) {}
+ bSkeleton (false),
+ bNoAlphaBlending(false)
+
+ {}
bool bMultiSample;
@@ -68,6 +71,8 @@ class RenderOptions
// enable stereo view
bool bStereoView;
+ bool bNoAlphaBlending;
+
// wireframe or solid rendering?
DrawMode eDrawMode;
diff --git a/tools/assimp_view/assimp_view.rc b/tools/assimp_view/assimp_view.rc
index 4dc453889..8d4b51658 100644
--- a/tools/assimp_view/assimp_view.rc
+++ b/tools/assimp_view/assimp_view.rc
@@ -15,7 +15,7 @@
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
-// Deutsch (Deutschland) resources
+// German (Germany) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
#ifdef _WIN32
@@ -95,7 +95,7 @@ BEGIN
COMBOBOX IDC_COMBO1,317,373,112,30,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
LTEXT "Nodes:",IDC_NUMNODES,221,413,28,9
EDITTEXT IDC_ENODEWND,253,411,37,14,ES_AUTOHSCROLL | ES_READONLY
- CONTROL "",IDC_TREE1,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,474,0,141,484
+ CONTROL "",IDC_TREE1,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_SHOWSELALWAYS | WS_BORDER | WS_HSCROLL | WS_TABSTOP,474,0,141,484
LTEXT "Mesh:",IDC_NUMMESHES,295,428,23,9
EDITTEXT IDC_EMESH,322,426,34,14,ES_AUTOHSCROLL | ES_READONLY
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDVERT,100,392,1,87
@@ -117,6 +117,7 @@ BEGIN
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDVERT,472,0,1,484
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDVERT,365,392,1,70
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,1,367,471,1
+ CONTROL "No transparency",IDC_NOAB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,109,439,68,12
END
IDD_LOADDIALOG DIALOGEX 0, 0, 143, 60
@@ -442,7 +443,7 @@ IDR_TEXT1 TEXT "text1.bin"
IDR_HUD RCDATA "HUD.png"
IDR_HUDMASK RCDATA "HUDMask.png"
-#endif // Deutsch (Deutschland) resources
+#endif // German (Germany) resources
/////////////////////////////////////////////////////////////////////////////
diff --git a/tools/assimp_view/resource.h b/tools/assimp_view/resource.h
index b229d0860..0c3c0aa96 100644
--- a/tools/assimp_view/resource.h
+++ b/tools/assimp_view/resource.h
@@ -79,6 +79,8 @@
#define IDC_CHECK9 1024
#define IDC_NOSPECULAR 1024
#define IDC_PLAYANIM 1025
+#define IDC_3LIGHTS2 1025
+#define IDC_NOAB 1025
#define IDC_SPEED 1026
#define IDC_COMBO1 1027
#define IDC_PINORDER 1028
diff --git a/workspaces/vc9/assimp_view.vcproj b/workspaces/vc9/assimp_view.vcproj
index b759f2dcb..78a07c9b2 100644
--- a/workspaces/vc9/assimp_view.vcproj
+++ b/workspaces/vc9/assimp_view.vcproj
@@ -1563,6 +1563,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}"
>
+
+