// constructor..make the quadric used // and the required textures VDSSubSystem::VDSSubSystem() : m_Effect( "supershader.fx" ) { m_PyramidMesh = NULL; m_InvertedPyramidMesh = NULL; m_EyeMesh = NULL; VDSImmediateMode::Init(); TSRModel* pStudModel = ModelManager()->Aquire( "vds/stud.dae.twi" ); m_pStudModelInstance = new TSRModelInstance( pStudModel ); TSRModel* pBrickModel = ModelManager()->Aquire( "vds/brick.dae.twi" ); m_pBrickModelInstance = new TSRModelInstance( pBrickModel ); TSRModel* pWheelModel = ModelManager()->Aquire( "vds/wheel.dae.twi" ); m_pWheelModelInstance = new TSRModelInstance( pWheelModel ); TSRModel* pPyramidModel = ModelManager()->Aquire( "vds/pyramid.dae.twi" ); m_pPyramidModelInstance = new TSRModelInstance( pPyramidModel ); TSRModel* pWheelAxeModel = ModelManager()->Aquire( "vds/wheelaxe.dae.twi" ); m_pWheelAxeModelInstance = new TSRModelInstance( pWheelAxeModel ); TSRModel* pArmKnobModel = ModelManager()->Aquire( "vds/armknob.dae.twi" ); m_pArmKnobModelInstance = new TSRModelInstance( pArmKnobModel ); TSRModel* pArmJointModel = ModelManager()->Aquire( "vds/armjoint.dae.twi" ); m_pArmJointModelInstance = new TSRModelInstance( pArmJointModel ); TSRModel* pArmModel = ModelManager()->Aquire( "vds/arm.dae.twi" ); m_pArmBodyModelInstance = new TSRModelInstance( pArmModel ); TSRModel* pEyeModel = ModelManager()->Aquire( "vds/eye.dae.twi" ); m_pEyeModelInstance = new TSRModelInstance( pEyeModel ); TSRModel* pLeverModel = ModelManager()->Aquire( "vds/lever.dae.twi" ); m_pLeverModelInstance = new TSRModelInstance( pLeverModel ); m_WheelAxeMesh = new VDSMesh(); m_WheelAxeMesh->m_pModelInstance = m_pWheelAxeModelInstance; CreatePyramidBase(); CreateInvertedPyramidBase(); CreateEye(); /// physics settings.. TSRPhysicsWorld* pWorld = TSRPhysicsWorld::GetInstance(); pWorld->SetConnectedBodiesCollisionEnabled( true ); pWorld->SetGlobalFriction( 2500.0f ); pWorld->SetGlobalElasticity( 0.5f ); pWorld->SetGlobalSlipping( 0.01f ); }
void TSRModel::LoadGeometry( TSRModelGeometry* _pGeometry, TSRFileStream* _pFptr ) { // read number of vertex components.. unsigned int uiShaderFlags = 0; fread( &uiShaderFlags, sizeof( unsigned int ), 1, _pFptr ); // compile the vertex declaration _pGeometry->m_uiShaderFlags = uiShaderFlags; TSRVertexDeclaration* pVertexDecl = EffectManager()->GetDeclaration( uiShaderFlags ); // read vertex count unsigned int uiVertexCount = 0; fread( &uiVertexCount, sizeof( unsigned int ), 1, _pFptr ); // the size of the vertex buffer... unsigned int uiVertexBufferSize = 0; fread( &uiVertexBufferSize, sizeof( unsigned int ), 1, _pFptr ); /// index data type.. eTSRDataType indexDataType = TWISTER_DATATYPE_UINT32; /// read index data type.. fread( &indexDataType, sizeof( eTSRDataType ), 1, _pFptr ); unsigned int uiIndexCount = 0; fread( &uiIndexCount, sizeof( unsigned int ), 1, _pFptr ); // now create the mesh... TSRIndexedMesh* pNewMesh = new TSRIndexedMesh( pVertexDecl, indexDataType ); unsigned int uiIndexDataSize = uiIndexCount * g_TwisterDataTypeSize[ indexDataType ]; /// never create buffers larger than the loading buffers if ( uiIndexDataSize > ModelManager()->s_uiLoadingIndexBufferSize ) { assert( "You Cannot Create Index buffers this large!" && 0 ); } /// never create buffers larger than the loading buffers if ( uiVertexBufferSize > ModelManager()->s_uiLoadingVertexBufferSize ) { assert( "You Cannot Create Vertex buffers this large!" && 0 ); } /// read the vertex and index in one go. if ( uiVertexCount ) { fread( ModelManager()->GetVertexLoadingBuffer(), uiVertexBufferSize, 1, _pFptr ); if ( uiIndexCount ) { fread( ModelManager()->GetIndexLoadingBuffer(), g_TwisterDataTypeSize[ indexDataType ], uiIndexCount, _pFptr ); } } if ( uiIndexCount > 0 ) { pNewMesh->FillRaw( ModelManager()->GetVertexLoadingBuffer(), uiVertexBufferSize, ModelManager()->GetIndexLoadingBuffer(), uiIndexDataSize, indexDataType ); } else { pNewMesh->TSRMesh::FillRaw( ModelManager()->GetVertexLoadingBuffer(), uiVertexBufferSize ); } unsigned int uiTriangleSetsCount = 0; fread( &uiTriangleSetsCount, sizeof( int ), 1, _pFptr ); _pGeometry->m_uiTriangleSetsCount = uiTriangleSetsCount; if ( uiTriangleSetsCount ) { _pGeometry->m_pTriangleSets = new TSRModelGeometryTriangleSet[ uiTriangleSetsCount ]; fread( _pGeometry->m_pTriangleSets, sizeof( TSRModelGeometryTriangleSet ), uiTriangleSetsCount, _pFptr ); } pNewMesh->m_RenderMode = TWISTER_RENDERMODE_TRIANGLES; #ifdef D3D11_RENDERER if ( uiShaderFlags & TWISTER_SHADER_FLAG_TESSELATION ) { pNewMesh->m_RenderMode = TWISTER_RENDERMODE_TRIPATCHLIST; for ( unsigned int i = 0; i < uiTriangleSetsCount; i++ ) { _pGeometry->m_pTriangleSets[ i ].m_renderMode = TWISTER_RENDERMODE_TRIPATCHLIST; } } #endif // geometry is ready for rendering ! _pGeometry->m_pMesh = pNewMesh; // read the bounds fread( &_pGeometry->m_Bounds, sizeof( TSRBBox ), 1, _pFptr ); // read the raster state fread( &_pGeometry->m_uiRasterizerStateId, sizeof( unsigned int ), 1, _pFptr ); }
1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); Matrix4 V = Matrix4( 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); Matrix4 P = Matrix4( 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1); ModelManager mm = ModelManager("./ColorModels"); int main(int argc, char **argv) { // glut init glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); // create window glutInitWindowPosition(500, 100); glutInitWindowSize(600, 600); glutCreateWindow("10420 CS550000 CG HW2 Haley"); glewInit(); if(glewIsSupported("GL_VERSION_2_0")){ printf("Ready for OpenGL 2.0\n");