当前位置: 首页>>代码示例>>C++>>正文


C++ Model::AddMesh方法代码示例

本文整理汇总了C++中Model::AddMesh方法的典型用法代码示例。如果您正苦于以下问题:C++ Model::AddMesh方法的具体用法?C++ Model::AddMesh怎么用?C++ Model::AddMesh使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Model的用法示例。


在下文中一共展示了Model::AddMesh方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: LoadAnimatedModel

ModelPtr AssetLoader::LoadAnimatedModel(std::string fileName)
{
    FILE * f = nullptr;
    fopen_s(&f,fileName.c_str(),"rb");
    if(f != nullptr)
    {
        unsigned int number;
        fread_s(&number,4,4,1,f);
        if(number != 50)
        {
            fclose(f);
            return ModelPtr(true);
        }

        unsigned int meshesCount;
        fread_s(&meshesCount,4,4,1,f);

        ModelPtr ptr(Heap::GetPtr()->Models.New());
        Model * model = ptr.Get();

        for(unsigned int iMesh = 0; iMesh < meshesCount; iMesh++)
        {
            fread_s(&animatedMeshData.numOfVerts,4,4,1,f);

            fread_s(animatedMeshData.verts,sizeof(AnimatedVert) * animatedMeshData.numOfVerts,sizeof(AnimatedVert),animatedMeshData.numOfVerts,f);
            fread_s(&animatedMeshData.numOfIndecies,4,4,1,f);

            fread_s(animatedMeshData.indecies,sizeof(unsigned int) * animatedMeshData.numOfIndecies, 4 ,animatedMeshData.numOfIndecies,f);

            MeshPtr meshPtr = factory->CreateMesh();
            Mesh * mesh = meshPtr.Get();
            mesh->Init();
            mesh->SetDrawMethod(DM_DRAW_INDEXED);

            mesh->InitVertexBuffer(animatedMeshData.numOfVerts * sizeof(AnimatedVert),sizeof(AnimatedVert),animatedMeshData.verts);
            mesh->InitIndexBuffer(animatedMeshData.numOfIndecies,animatedMeshData.indecies);

            model->AddMesh(meshPtr);

        }


        fclose(f);

        return ptr;
    }
    else return nullptr;
}
开发者ID:dgi09,项目名称:D3D,代码行数:48,代码来源:AssetLoader.cpp

示例2: LoadStaticModel

ModelPtr AssetLoader::LoadStaticModel(std::string fileName)
{
    std::ifstream file(fileName.c_str(),std::ios::binary);

    if(file.is_open())
    {
        unsigned int number;
        file.read((char*)&number,sizeof(unsigned int));
        if(number != 0)
            return ModelPtr(true);

        unsigned int numberOfMeshes;
        file.read((char*)&numberOfMeshes,4);

        ModelPtr ptr(Heap::GetPtr()->Models.New());
        Model * model = ptr.Get();

        for(unsigned int iMesh = 0; iMesh < numberOfMeshes; iMesh++)
        {
            file.read((char*)&staticMeshData.numberOfVerts,sizeof(unsigned int));

            file.read((char*)staticMeshData.vertecies,sizeof(StaticVert) * staticMeshData.numberOfVerts);
            file.read((char*)&staticMeshData.numberOfIndecies,sizeof(unsigned int));

            file.read((char*)staticMeshData.indecies,sizeof(unsigned int) * staticMeshData.numberOfIndecies);

            MeshPtr meshPtr = factory->CreateMesh();
            Mesh * mesh = meshPtr.Get();
            mesh->Init();
            mesh->SetDrawMethod(DM_DRAW_INDEXED);

            mesh->InitVertexBuffer(staticMeshData.numberOfVerts * sizeof(StaticVert),sizeof(StaticVert),staticMeshData.vertecies);
            mesh->InitIndexBuffer(staticMeshData.numberOfIndecies,staticMeshData.indecies);

            model->AddMesh(meshPtr);

        }

        file.close();

        return ptr;
    }
    else return ModelPtr(true);

}
开发者ID:dgi09,项目名称:D3D,代码行数:45,代码来源:AssetLoader.cpp

示例3: State

//////////////////////////////////////////////////////////////////
/// methods for DebugState:
///
//////////////////////////////////////////////////////////////////
DebugState::DebugState(Engine* engine)
    : State(engine)
{
    mEngine->SetUpdateFrequency(30.0f);
    count = 0;
    if(mPhysics.Initialize())
    {
        std::cout << "physics initialized\n";
    }


    std::cout << sizeof(physx::PxVec3) << std::endl;

    mRootNode = new SceneObjectNode();
    Engine3d::Light* light = new Light(mEngine->GetShader()->GetProgramID());
    light->SetPosition(2.1f,5.0f,-18.0f);
    light->SetDiffuse(10,10,10);
    light->SetSpecular(10,10,10);
    light->SetConstAttenuation(.01);
    light->SetAmbient(0.2f,0.2f,0.2f);
    mGimble = new SceneObjectNode();
    mRootNode->AddChild(mGimble);

    mGimble->AddAsset(light);

    CameraLocationUpdater* cam = new CameraLocationUpdater(mEngine->GetShader()->GetProgramID());
    mGimble->AddDrawInterface(cam);


    SceneObjectNode* node = new SceneObjectNode();
    ModelMesh<SimpleVertex>* mesh = Primitives::MakeBox(40,1,40);
    mesh->SetShader(mEngine->GetShader());
    Material* mat = new Material(mEngine->GetShader()->GetProgramID());
    mesh->AddAsset(mat);
    Model* model = new Model("plane");
    model->AddMesh(mesh);
    DrawModel* drawmodel = new DrawModel(model);
    node->AddDrawInterface(drawmodel);
    mGimble->AddChild(node);
    node->SetLocalPosition(glm::vec3(2.1f,0,-18));

    PhysicsCallback* physicscbplane = new PhysicsCallback("plane", node, mesh);
    physicscbplane->SetIsStatic(true);
    physicscbplane->Initialize(&mPhysics);




//    Model* ship = new Model("models/Armadillo/armadillo.3DS");
//    ModelLoader::Load(ship, mEngine->GetShader(), &mPhysics);
//    Texture* texture = new Texture("models/Armadillo/armadillotex.bmp");
//    texture->SetProgramID(mEngine->GetShader()->GetProgramID());
//    texture->Load();
//    ship->GetMesh(2)->AddAsset(mat);
//    ship->GetMesh(2)->AddAsset(texture);
//    SceneObjectNode* shipnode = new SceneObjectNode();
//    DrawModel* drawship = new DrawModel(ship);
//    shipnode->AddDrawInterface(drawship);

//    mGimble->AddChild(shipnode);
//    shipnode->Translate(glm::vec3(5,5,-20));
//    PhysicsCallback* physicscbship1 = new PhysicsCallback("ship1", shipnode, ship->GetMesh(2));
//    physicscbship1->Initialize(&mPhysics);


//    Model* ship2 = new Model("models/Armadillo/armadillo.3DS");
//    ModelLoader::Load(ship2, mEngine->GetShader(), &mPhysics);
//    Texture* texture2 = new Texture("models/Armadillo/armadillotex.bmp");
//    texture2->SetProgramID(mEngine->GetShader()->GetProgramID());
//    texture2->Load();
//    ship2->GetMesh(2)->AddAsset(mat);
//    ship2->GetMesh(2)->AddAsset(texture2);
//    SceneObjectNode* shipnode2 = new SceneObjectNode();
//    DrawModel* drawship2 = new DrawModel(ship2);
//    shipnode2->AddDrawInterface(drawship2);
//    mGimble->AddChild(shipnode2);
//    shipnode2->Translate(glm::vec3(3,5,-20));
//    PhysicsCallback* physicscbship = new PhysicsCallback("ship2", shipnode2, ship2->GetMesh(2));
//    physicscbship->Initialize(&mPhysics);


//    CreateRandomObject();



    SceneObjectNode* node1 = new SceneObjectNode();

    ModelMesh<SimpleVertex>* box = Primitives::MakeBox(1,1,1);
    Material* mat1 = new Engine3d::Material(mEngine->GetShader()->GetProgramID());
    mat1->SetDiffuse(1.0f,0.0f,0.0f);
    mat1->SetShininess(200);
    box->AddAsset(mat1);
    box->SetShader(mEngine->GetShader());
    DrawMesh* drawmesh = new DrawMesh(box);
    node1->AddDrawInterface(drawmesh);
    node1->SetLocalPosition(glm::vec3(3.0f,20.0f,-20.0f));
//.........这里部分代码省略.........
开发者ID:Robotnik00,项目名称:Engine3d,代码行数:101,代码来源:DebugState.cpp

示例4: max

Model<VertexPosNormTanTex>* TerrainLoader::Load(ID3D10Device* pDXDevice, const tstring& key)
{
    Model<VertexPosNormTanTex>* ret = 0;
	if ( m_pAssets->IsAssetPresent(key))
	{
        ret = m_pAssets->GetAsset(key);
	}
	else
	{
        vector<VertexPosNormTanTex> vertices;
        vector<DWORD> indices;

        Texture2D* heightMap = Content->LoadTexture2D(key, true);
        ID3D10Texture2D* pTex2D = heightMap->GetTextureResource();
        
        vertices.reserve(heightMap->GetWidth() * heightMap->GetHeight());
        indices.reserve((heightMap->GetWidth()-1) * (heightMap->GetHeight()-1) * 6);

        D3D10_MAPPED_TEXTURE2D pMappedTex2D;
        pTex2D->Map(0, D3D10_MAP_READ, 0, &pMappedTex2D);

        float heightMult = 1.0f;
        float planarMult = 1.0f / max(heightMap->GetWidth(), heightMap->GetHeight());
        BYTE* pData = static_cast<BYTE*>(pMappedTex2D.pData);
        for (UINT x = 0; x < heightMap->GetHeight(); ++x)
        {
            for (UINT z = 0; z < heightMap->GetWidth(); ++z)
            {
                float height = pData[z * 4 + x * pMappedTex2D.RowPitch + 0] / 255.0f; //get red

                vertices.push_back(VertexPosNormTanTex(
                    static_cast<float>(x) * planarMult, height * heightMult, static_cast<float>(z) * planarMult,
                    0, 0, 0, 
                    0, 0, 0, 
                    static_cast<float>(z) / heightMap->GetWidth(), static_cast<float>(x) / heightMap->GetHeight()));

                if (z != heightMap->GetWidth() - 1 && x != heightMap->GetHeight() - 1)
                {
                    indices.push_back(z + x * heightMap->GetWidth());
                    indices.push_back(z + x * heightMap->GetWidth() + 1);
                    indices.push_back(z + (x + 1) * heightMap->GetWidth());

                    indices.push_back(z + x * heightMap->GetWidth() + 1);
                    indices.push_back(z + (x + 1) * heightMap->GetWidth() + 1);
                    indices.push_back(z + (x + 1) * heightMap->GetWidth());
                }
            }
        }

        pTex2D->Unmap(0);

        CalculateNormals(vertices, indices);
        CalculateTangents(vertices, indices);

        Model<VertexPosNormTanTex>* pModel = new Model<VertexPosNormTanTex>(pDXDevice);
        ModelMesh<VertexPosNormTanTex>* pMesh = pModel->AddMesh(_T(""));

        pMesh->SetVertices(vertices);
        pMesh->SetIndices(indices);

        m_pAssets->AddAsset(key, pModel);
        ret = pModel;
    }

    return ret;
}
开发者ID:BillyKim,项目名称:jello-man,代码行数:66,代码来源:TerrainLoader.cpp

示例5: Register

	// public, static
	Model::Handle Model::Register( const char *path ) {
		//HACK: assume null path means raw model data
		if ( !path ) {
			Model *model = new Model();
			model->handle = numRegistered++;
			return model->handle;
		}

		//TODO: check for duplicates? or only for mesh info etc?
		// for now, just add a new entry
		Model *model = models[path];

		if ( model ) {
			console.Print( PrintLevel::Debug, "Loading model \"%s\" using existing model (loaded %i times)\n",
				XS_FUNCTION,
				path,
				model->refCount
			);
			model->refCount++;
			return model->handle;
		}

		model = models[path] = new Model();

		console.Print( PrintLevel::Debug, "%s loaded \"%s\" for the first time\n",
			XS_FUNCTION,
			path
		);
		model->modelPath = path;
		model->handle = numRegistered++;

		const File f( path, FileMode::ReadBinary );
		if ( !f.isOpen ) {
			console.Print( PrintLevel::Normal, "Failed to load model \"%s\", returning invalid handle\n",
				model->modelPath.c_str()
			);
			return invalidHandle;
		}

		char *buffer = new char[f.length + 1];
		{
			f.Read( reinterpret_cast<uint8_t *>( buffer ) );
			//FIXME: dispatch to correct file reader based on extension
			Common::FileXMF xmf( buffer, f.length );
			size_t numMeshes = xmf.GetMeshCount();
			SDL_assert( numMeshes > 0u );
			for ( size_t i = 0u; i < numMeshes; i++ ) {
				Common::XMFMesh *xmfMesh = xmf.GetMeshFromIndex( i );
				if ( !xmfMesh ) {
					break;
				}
				/*bool computedNormals = */xmfMesh->ValidateNormals();
				Mesh *rdMesh = new Mesh();

				//TODO: profile copying, optimise
				rdMesh->vertices = xmfMesh->vertices;
				rdMesh->normals = xmfMesh->normals;
				rdMesh->UVs = xmfMesh->UVs;
				rdMesh->indices = xmfMesh->indices;

				rdMesh->CreateMaterial();

				model->AddMesh( rdMesh );
			}
		}
		delete[] buffer;

		//model->LoadMeshes();

		return model->handle;
	}
开发者ID:Razish,项目名称:xsngine,代码行数:72,代码来源:Model.cpp


注:本文中的Model::AddMesh方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。