admin管理员组

文章数量:1565806

2023年12月21日发(作者:)

void BasicTessellationApp::BuildQuadPatchGeometry(){ std::array vertices = { XMFLOAT3(-10.0f, 0.0f, +10.0f), XMFLOAT3(+10.0f, 0.0f, +10.0f), XMFLOAT3(-10.0f, 0.0f, -10.0f), XMFLOAT3(+10.0f, 0.0f, -10.0f) }; std::array indices = { 0, 1, 2, 3 };

const UINT vbByteSize = (UINT)() * sizeof(Vertex); const UINT ibByteSize = (UINT)() * sizeof(std::uint16_t);

auto geo = std::make_unique(); geo->Name = "quadpatchGeo";

ThrowIfFailed(D3DCreateBlob(vbByteSize, &geo->VertexBufferCPU)); CopyMemory(geo->VertexBufferCPU->GetBufferPointer(), (), vbByteSize);

ThrowIfFailed(D3DCreateBlob(ibByteSize, &geo->IndexBufferCPU)); CopyMemory(geo->IndexBufferCPU->GetBufferPointer(), (), ibByteSize);

geo->VertexBufferGPU = d3dUtil::CreateDefaultBuffer((), (), (), vbByteSize, geo->VertexBufferUploader); geo->IndexBufferGPU = d3dUtil::CreateDefaultBuffer((), (), (), ibByteSize, geo->IndexBufferUploader);

geo->VertexByteStride = sizeof(XMFLOAT3); geo->VertexBufferByteSize = vbByteSize; geo->IndexFormat = DXGI_FORMAT_R16_UINT; geo->IndexBufferByteSize = ibByteSize; SubmeshGeometry quadSubmesh; ount = 4; ndexLocation = 0; rtexLocation = 0; geo->DrawArgs["quadpatch"] = quadSubmesh;

mGeometries[geo->Name] = std::move(geo);}渲染物体创建如下:void BasicTessellationApp::BuildRenderItems(){ auto quadPatchRitem = std::make_unique();

quadPatchRitem->World = MathHelper::Identity4x4(); quadPatchRitem->TexTransform = MathHelper::Identity4x4(); quadPatchRitem->ObjCBIndex = 0; quadPatchRitem->Mat = mMaterials["whiteMat"].get(); quadPatchRitem->Geo = mGeometries["quadpatchGeo"].get(); quadPatchRitem->PrimitiveType = D3D_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST; quadPatchRitem->IndexCount = quadPatchRitem->Geo->DrawArgs["quadpatch"].IndexCount; quadPatchRitem->StartIndexLocation = quadPatchRitem->Geo->DrawArgs["quadpatch"].StartIndexLocation; quadPatchRitem->BaseVertexLocation = quadPatchRitem->Geo->DrawArgs["quadpatch"].BaseVertexLocation;

mRitemLayer[(int)RenderLayer::Opaque].push_back(_back(std::move(quadPatchRitem));}

XMFLOAT3(+5.0f, 0.0f, +15.0f), XMFLOAT3(+10.0f, 0.0f, +15.0f), // Row 1 XMFLOAT3(-15.0f, 0.0f, +5.0f), XMFLOAT3(-5.0f, 0.0f, +5.0f), 748 XMFLOAT3(+5.0f, 20.0f, +5.0f), XMFLOAT3(+15.0f, 0.0f, +5.0f), // Row 2 XMFLOAT3(-15.0f, 0.0f, -5.0f), XMFLOAT3(-5.0f, 0.0f, -5.0f), XMFLOAT3(+5.0f, 0.0f, -5.0f), XMFLOAT3(+15.0f, 0.0f, -5.0f), // Row 3 XMFLOAT3(-10.0f, 10.0f, -15.0f), XMFLOAT3(-5.0f, 0.0f, -15.0f), XMFLOAT3(+5.0f, 0.0f, -15.0f), XMFLOAT3(+25.0f, 10.0f, -15.0f) };

std::array indices = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };

const UINT vbByteSize = (UINT)() * sizeof(Vertex); const UINT ibByteSize = (UINT)() * sizeof(std::uint16_t);

auto geo = std::make_unique(); geo->Name = "quadpatchGeo";

ThrowIfFailed(D3DCreateBlob(vbByteSize, &geo->VertexBufferCPU)); CopyMemory(geo->VertexBufferCPU->GetBufferPointer(), (), vbByteSize);

ThrowIfFailed(D3DCreateBlob(ibByteSize, &geo->IndexBufferCPU)); CopyMemory(geo->IndexBufferCPU->GetBufferPointer(), (), ibByteSize); geo->VertexBufferGPU = d3dUtil::CreateDefaultBuffer((), (), (), vbByteSize, geo->VertexBufferUploader); geo->IndexBufferGPU = d3dUtil::CreateDefaultBuffer((), (), (), ibByteSize, geo->IndexBufferUploader);

geo->VertexByteStride = sizeof(XMFLOAT3); geo->VertexBufferByteSize = vbByteSize; geo->IndexFormat = DXGI_FORMAT_R16_UINT; geo->IndexBufferByteSize = ibByteSize; SubmeshGeometry quadSubmesh; ount = (UINT)(); ndexLocation = 0; rtexLocation = 0;

geo->DrawArgs["quadpatch"] = quadSubmesh; mGeometries[geo->Name] = std::move(geo);}我们的渲染物体创建和定义如下:

本文标签: 物体渲染创建定义