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


C++ Waves::GetVertexCount方法代码示例

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


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

示例1: BuildWavesGeometryBuffers

void WavesApp::BuildWavesGeometryBuffers()
{
	// Create the vertex buffer.  Note that we allocate space only, as
	// we will be updating the data every time step of the simulation.

	D3D11_BUFFER_DESC vbd;
	vbd.Usage = D3D11_USAGE_DYNAMIC;
	vbd.ByteWidth = sizeof(Vertex) * m_waves.GetVertexCount();
	vbd.BindFlags = D3D11_BIND_VERTEX_BUFFER;
	vbd.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
	vbd.MiscFlags = 0;
	HR(m_pD3dDevice->CreateBuffer(&vbd,0,&m_pWavesVB));

	// Create the index buffer.  The index buffer is fixed, so we only 
	// need to create and set once.
	std::vector<UINT> indices(3 * m_waves.GetTriangleCount()); // 3 indices per face

	// Iterate over each quad.
	UINT m = m_waves.GetRowCount();
	UINT n = m_waves.GetColumnCount();
	int k = 0;
	for (UINT i = 0; i < m - 1; ++i)
	{
		for (DWORD j = 0; j < n - 1; ++j)
		{
			indices[k] = i*n + j;
			indices[k + 1] = i*n + j + 1;
			indices[k + 2] = (i + 1)*n + j;

			indices[k + 3] = (i + 1)*n + j;
			indices[k + 4] = i*n + j + 1;
			indices[k + 5] = (i + 1)*n + j + 1;

			k += 6; // next quad
		}
	}

	{
		D3D11_BUFFER_DESC ibd;
		ibd.Usage = D3D11_USAGE_IMMUTABLE;
		ibd.ByteWidth = sizeof(UINT) * indices.size();
		ibd.BindFlags = D3D11_BIND_INDEX_BUFFER;
		ibd.CPUAccessFlags = 0;
		ibd.MiscFlags = 0;
		D3D11_SUBRESOURCE_DATA iinitData;
		iinitData.pSysMem = &indices[0];
		HR(m_pD3dDevice->CreateBuffer(&ibd, &iinitData, &m_pWavesIB));
	}
}
开发者ID:wjingzhe,项目名称:DX11,代码行数:49,代码来源:WavesDemo.cpp

示例2: UpdateScene

void WavesApp::UpdateScene(float dt)
{
	// Convert Spherical to Cartesian coordinates.
	float x = m_fRadius * sinf(m_fPhi) * cosf(m_fTheta);
	float z = m_fRadius * sinf(m_fPhi) * sinf(m_fTheta);
	float y = m_fRadius*cosf(m_fPhi);

	XMVECTOR pos = XMVectorSet(x, y, z, 1.0f);
	XMVECTOR target = XMVectorZero();
	XMVECTOR up = XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f);

	XMMATRIX V = XMMatrixLookAtLH(pos, target, up);
	XMStoreFloat4x4(&m_viewMatrix, V);


	//
	// Every quarter second, generate a random wave.
	//
	static float s_baseT = 0.0f;
	if ((mTimer.GetTotalTime() - s_baseT)>=0.25f)
	{
		s_baseT += 0.25f;
		UINT i = 5 + rand() % 190;
		UINT j = 5 + rand() % 190;

		float r = MathHelper::RandF(1.0f, 2.0f);

		m_waves.Disturb(i, j, r);//jingz 假设这个是生成浪花,数据变化时更新了什么内容呢?
	}

	m_waves.Update(dt);

	//
	// Update the wave vertex buffer with the new solution.
	//
	D3D11_MAPPED_SUBRESOURCE mappedData;
	HR(m_pD3dImmediateContext->Map(m_pWavesVB, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedData));

	Vertex * vertices = reinterpret_cast<Vertex *>(mappedData.pData);

	for (UINT i = 0; i < m_waves.GetVertexCount();++i)
	{
		vertices[i].Pos = m_waves[i];
		vertices[i].Color = XMFLOAT4(0.0f, 0.0f, 0.0f, 1.0f);
	}

	m_pD3dImmediateContext->Unmap(m_pWavesVB,0);
}
开发者ID:wjingzhe,项目名称:DX11,代码行数:48,代码来源:WavesDemo.cpp


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