admin管理员组文章数量:1565806
2023年12月21日发(作者:)
void BasicTessellationApp::BuildQuadPatchGeometry(){ std::array
const UINT vbByteSize = (UINT)() * sizeof(Vertex); const UINT ibByteSize = (UINT)() * sizeof(std::uint16_t);
auto geo = std::make_unique
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
const UINT vbByteSize = (UINT)() * sizeof(Vertex); const UINT ibByteSize = (UINT)() * sizeof(std::uint16_t);
auto geo = std::make_unique
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);}我们的渲染物体创建和定义如下:
版权声明:本文标题:Introductionto3DGameProgrammingwithDirectX12学。。。 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1703122035a39927.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论