BlenderLoader: don't output diffuse color if it is all black. Seems to be Blenders way of telling us there is no diffuse color.
AssimpView: add 'no transparency' option in UI and implement underlying logic. git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@811 67173fc5-114c-0410-ac8e-9d2fd5bffc1fpull/1/head
parent
400086e19f
commit
693a3a039d
|
@ -554,7 +554,12 @@ void BlenderImporter::BuildMaterials(ConversionData& conv_data)
|
||||||
|
|
||||||
// basic material colors
|
// basic material colors
|
||||||
aiColor3D col(mat->r,mat->g,mat->b);
|
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);
|
col = aiColor3D(mat->specr,mat->specg,mat->specb);
|
||||||
mout->AddProperty(&col,1,AI_MATKEY_COLOR_SPECULAR);
|
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;
|
aiVector3D* vn = out->mNormals + out->mNumVertices;
|
||||||
|
|
||||||
// XXX we can't fold this easily, because we are restricted
|
// 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) {
|
if (mf.v1 >= mesh->totvert) {
|
||||||
ThrowException("Vertex index v1 out of range");
|
ThrowException("Vertex index v1 out of range");
|
||||||
|
|
|
@ -1778,9 +1778,14 @@ int CDisplay::RenderFullScene()
|
||||||
if (NULL != g_pcAsset && NULL != g_pcAsset->pcScene->mRootNode)
|
if (NULL != g_pcAsset && NULL != g_pcAsset->pcScene->mRootNode)
|
||||||
{
|
{
|
||||||
// disable the z-buffer
|
// 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);
|
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
|
// setup the stereo view if necessary
|
||||||
|
@ -2042,6 +2047,11 @@ int CDisplay::RenderNode (aiNode* piNode,const aiMatrix4x4& piMatrix,
|
||||||
}
|
}
|
||||||
g_piDevice->SetVertexDeclaration( gDefaultVertexDecl);
|
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);
|
if (bAlpha)CMeshRenderer::Instance().DrawSorted(piNode->mMeshes[i],aiMe);
|
||||||
else CMeshRenderer::Instance().DrawUnsorted(piNode->mMeshes[i]);
|
else CMeshRenderer::Instance().DrawUnsorted(piNode->mMeshes[i]);
|
||||||
|
|
||||||
|
@ -2235,7 +2245,7 @@ int CDisplay::RenderTextureView()
|
||||||
g_piPassThroughEffect->BeginPass(0);
|
g_piPassThroughEffect->BeginPass(0);
|
||||||
|
|
||||||
if (aiTextureType_HEIGHT == m_pcCurrentTexture->iType ||
|
if (aiTextureType_HEIGHT == m_pcCurrentTexture->iType ||
|
||||||
aiTextureType_NORMALS == m_pcCurrentTexture->iType)
|
aiTextureType_NORMALS == m_pcCurrentTexture->iType || g_sOptions.bNoAlphaBlending)
|
||||||
{
|
{
|
||||||
// manually disable alpha blending
|
// manually disable alpha blending
|
||||||
g_piDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,FALSE);
|
g_piDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,FALSE);
|
||||||
|
|
|
@ -333,19 +333,20 @@ int CMaterialManager::LoadTexture(IDirect3DTexture9** p_ppiOut,aiString* szPath)
|
||||||
{
|
{
|
||||||
// it is an embedded file ... don't need the file format hint,
|
// it is an embedded file ... don't need the file format hint,
|
||||||
// simply let D3DX load the file
|
// simply let D3DX load the file
|
||||||
|
D3DXIMAGE_INFO info;
|
||||||
if (FAILED(D3DXCreateTextureFromFileInMemoryEx(g_piDevice,
|
if (FAILED(D3DXCreateTextureFromFileInMemoryEx(g_piDevice,
|
||||||
g_pcAsset->pcScene->mTextures[iIndex]->pcData,
|
g_pcAsset->pcScene->mTextures[iIndex]->pcData,
|
||||||
g_pcAsset->pcScene->mTextures[iIndex]->mWidth,
|
g_pcAsset->pcScene->mTextures[iIndex]->mWidth,
|
||||||
D3DX_DEFAULT,
|
D3DX_DEFAULT,
|
||||||
D3DX_DEFAULT,
|
D3DX_DEFAULT,
|
||||||
0,
|
1,
|
||||||
D3DUSAGE_AUTOGENMIPMAP,
|
D3DUSAGE_AUTOGENMIPMAP,
|
||||||
D3DFMT_UNKNOWN,
|
D3DFMT_UNKNOWN,
|
||||||
D3DPOOL_MANAGED,
|
D3DPOOL_MANAGED,
|
||||||
D3DX_DEFAULT,
|
D3DX_DEFAULT,
|
||||||
D3DX_DEFAULT,
|
D3DX_DEFAULT,
|
||||||
0,
|
0,
|
||||||
NULL,
|
&info,
|
||||||
NULL,
|
NULL,
|
||||||
p_ppiOut)))
|
p_ppiOut)))
|
||||||
{
|
{
|
||||||
|
|
|
@ -88,11 +88,10 @@ int CMeshRenderer::DrawSorted(unsigned int iIndex,const aiMatrix4x4& mWorld)
|
||||||
if (!pcHelper || !pcMesh || !pcHelper->piIB)
|
if (!pcHelper || !pcMesh || !pcHelper->piIB)
|
||||||
return -5;
|
return -5;
|
||||||
|
|
||||||
if (pcMesh->mPrimitiveTypes != aiPrimitiveType_TRIANGLE)
|
if (pcMesh->mPrimitiveTypes != aiPrimitiveType_TRIANGLE || pcMesh->HasBones() || g_sOptions.bNoAlphaBlending)
|
||||||
return DrawUnsorted(iIndex);
|
|
||||||
if (pcMesh->HasBones())
|
|
||||||
return DrawUnsorted(iIndex);
|
return DrawUnsorted(iIndex);
|
||||||
|
|
||||||
|
|
||||||
// compute the position of the camera in worldspace
|
// compute the position of the camera in worldspace
|
||||||
aiMatrix4x4 mWorldInverse = mWorld;
|
aiMatrix4x4 mWorldInverse = mWorld;
|
||||||
mWorldInverse.Inverse();
|
mWorldInverse.Inverse();
|
||||||
|
|
|
@ -272,6 +272,19 @@ void ToggleLightRotate()
|
||||||
RegSetValueExA(g_hRegistry,"LightRotate",0,REG_DWORD,(const BYTE*)&dwValue,4);
|
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
|
// Toggle the "LowQuality" state
|
||||||
//-------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------
|
||||||
|
@ -777,13 +790,13 @@ void DisplayMemoryConsumption()
|
||||||
|
|
||||||
char szOut[2048];
|
char szOut[2048];
|
||||||
sprintf(szOut,
|
sprintf(szOut,
|
||||||
"(1 KB = 1024 Byte)\n\n"
|
"(1 KiB = 1024 bytes)\n\n"
|
||||||
"ASSIMP Import Data: \t%i KB\n"
|
"ASSIMP Import Data: \t%i KiB\n"
|
||||||
"Texture data:\t\t%i KB\n"
|
"Texture data:\t\t%i KiB\n"
|
||||||
"Vertex buffers:\t\t%i KB\n"
|
"Vertex buffers:\t\t%i KiB\n"
|
||||||
"Index buffers:\t\t%i KB\n"
|
"Index buffers:\t\t%i KiB\n"
|
||||||
"Video Memory:\t\t%i KB\n\n"
|
"Video Memory:\t\t%i KiB\n\n"
|
||||||
"Total: \t\t\t%i KB",
|
"Total: \t\t\t%i KiB",
|
||||||
iScene / 1024,iTexture / 1024,iVB / 1024,iIB / 1024,iVRAM / 1024,
|
iScene / 1024,iTexture / 1024,iVB / 1024,iIB / 1024,iVRAM / 1024,
|
||||||
(iScene + iTexture + iVB + iIB + iVRAM) / 1024);
|
(iScene + iTexture + iVB + iIB + iVRAM) / 1024);
|
||||||
MessageBox(g_hDlg,szOut,"Memory consumption",MB_OK);
|
MessageBox(g_hDlg,szOut,"Memory consumption",MB_OK);
|
||||||
|
@ -1106,6 +1119,20 @@ void InitUI()
|
||||||
CheckDlgButton(g_hDlg,IDC_LOWQUALITY,BST_CHECKED);
|
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
|
// DisplayNormals
|
||||||
if(ERROR_SUCCESS != RegQueryValueEx(g_hRegistry,"RenderNormals",NULL,NULL,
|
if(ERROR_SUCCESS != RegQueryValueEx(g_hRegistry,"RenderNormals",NULL,NULL,
|
||||||
(BYTE*)&dwValue,&dwTemp))dwValue = 0;
|
(BYTE*)&dwValue,&dwTemp))dwValue = 0;
|
||||||
|
@ -2020,6 +2047,10 @@ INT_PTR CALLBACK MessageProc(HWND hwndDlg,UINT uMsg,
|
||||||
{
|
{
|
||||||
ToggleSpecular();
|
ToggleSpecular();
|
||||||
}
|
}
|
||||||
|
else if (IDC_NOAB == LOWORD(wParam))
|
||||||
|
{
|
||||||
|
ToggleTransparency();
|
||||||
|
}
|
||||||
else if (IDC_ZOOM == LOWORD(wParam))
|
else if (IDC_ZOOM == LOWORD(wParam))
|
||||||
{
|
{
|
||||||
ToggleFPSView();
|
ToggleFPSView();
|
||||||
|
|
|
@ -37,7 +37,10 @@ class RenderOptions
|
||||||
bNoSpecular (false),
|
bNoSpecular (false),
|
||||||
bStereoView (false),
|
bStereoView (false),
|
||||||
bCulling (false),
|
bCulling (false),
|
||||||
bSkeleton (false) {}
|
bSkeleton (false),
|
||||||
|
bNoAlphaBlending(false)
|
||||||
|
|
||||||
|
{}
|
||||||
|
|
||||||
bool bMultiSample;
|
bool bMultiSample;
|
||||||
|
|
||||||
|
@ -68,6 +71,8 @@ class RenderOptions
|
||||||
// enable stereo view
|
// enable stereo view
|
||||||
bool bStereoView;
|
bool bStereoView;
|
||||||
|
|
||||||
|
bool bNoAlphaBlending;
|
||||||
|
|
||||||
// wireframe or solid rendering?
|
// wireframe or solid rendering?
|
||||||
DrawMode eDrawMode;
|
DrawMode eDrawMode;
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
#undef APSTUDIO_READONLY_SYMBOLS
|
#undef APSTUDIO_READONLY_SYMBOLS
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
// Deutsch (Deutschland) resources
|
// German (Germany) resources
|
||||||
|
|
||||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
|
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
@ -95,7 +95,7 @@ BEGIN
|
||||||
COMBOBOX IDC_COMBO1,317,373,112,30,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
|
COMBOBOX IDC_COMBO1,317,373,112,30,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
|
||||||
LTEXT "Nodes:",IDC_NUMNODES,221,413,28,9
|
LTEXT "Nodes:",IDC_NUMNODES,221,413,28,9
|
||||||
EDITTEXT IDC_ENODEWND,253,411,37,14,ES_AUTOHSCROLL | ES_READONLY
|
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
|
LTEXT "Mesh:",IDC_NUMMESHES,295,428,23,9
|
||||||
EDITTEXT IDC_EMESH,322,426,34,14,ES_AUTOHSCROLL | ES_READONLY
|
EDITTEXT IDC_EMESH,322,426,34,14,ES_AUTOHSCROLL | ES_READONLY
|
||||||
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDVERT,100,392,1,87
|
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,472,0,1,484
|
||||||
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDVERT,365,392,1,70
|
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDVERT,365,392,1,70
|
||||||
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,1,367,471,1
|
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
|
END
|
||||||
|
|
||||||
IDD_LOADDIALOG DIALOGEX 0, 0, 143, 60
|
IDD_LOADDIALOG DIALOGEX 0, 0, 143, 60
|
||||||
|
@ -442,7 +443,7 @@ IDR_TEXT1 TEXT "text1.bin"
|
||||||
|
|
||||||
IDR_HUD RCDATA "HUD.png"
|
IDR_HUD RCDATA "HUD.png"
|
||||||
IDR_HUDMASK RCDATA "HUDMask.png"
|
IDR_HUDMASK RCDATA "HUDMask.png"
|
||||||
#endif // Deutsch (Deutschland) resources
|
#endif // German (Germany) resources
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -79,6 +79,8 @@
|
||||||
#define IDC_CHECK9 1024
|
#define IDC_CHECK9 1024
|
||||||
#define IDC_NOSPECULAR 1024
|
#define IDC_NOSPECULAR 1024
|
||||||
#define IDC_PLAYANIM 1025
|
#define IDC_PLAYANIM 1025
|
||||||
|
#define IDC_3LIGHTS2 1025
|
||||||
|
#define IDC_NOAB 1025
|
||||||
#define IDC_SPEED 1026
|
#define IDC_SPEED 1026
|
||||||
#define IDC_COMBO1 1027
|
#define IDC_COMBO1 1027
|
||||||
#define IDC_PINORDER 1028
|
#define IDC_PINORDER 1028
|
||||||
|
|
|
@ -1563,6 +1563,10 @@
|
||||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
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}"
|
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||||
>
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\tools\shared\assimp_tools_icon.ico"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\tools\assimp_view\assimp_view.ico"
|
RelativePath="..\..\tools\assimp_view\assimp_view.ico"
|
||||||
>
|
>
|
||||||
|
|
Loading…
Reference in New Issue