MCPcopy Create free account
hub / github.com/TheRealMJP/DeferredTexturing / MakeConeGeometry

Function MakeConeGeometry

SampleFramework12/v1.00/Graphics/Model.cpp:913–972  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

911}
912
913void MakeConeGeometry(uint64 divisions, StructuredBuffer& vtxBuffer, FormattedBuffer& idxBuffer, Array<Float3>& positions)
914{
915 Assert_(divisions >= 3);
916
917 const uint64 numVertices = 2 + divisions;
918 const uint64 numIndices = 3 * divisions * 2;
919 Assert_(numVertices <= UINT16_MAX);
920
921 positions.Init(numVertices);
922 Array<uint16> indices(numIndices, 0);
923
924 // The tip
925 uint16 tipIdx = 0;
926 positions[0] = Float3(0.0f, 0.0f, 0.0f);
927
928 // The center of the base
929 uint16 centerIdx = 1;
930 positions[1] = Float3(0.0f, 0.0f, 1.0f);
931
932 // The ring at the base
933 uint16 ringStartIdx = 2;
934 for(uint64 i = 0; i < divisions; ++i)
935 {
936 const float theta = (float(i) / divisions) * Pi2;
937 positions[i + ringStartIdx] = Float3(std::cos(theta), std::sin(theta), 1.0f);
938 }
939
940 // Tip->ring triangles
941 uint64 currIdx = 0;
942 for(uint64 i = 0; i < divisions; ++i)
943 {
944 indices[currIdx++] = tipIdx;
945 indices[currIdx++] = uint16(ringStartIdx + i);
946
947 uint64 prevRingIdx = i == 0 ? divisions - 1 : i - 1;
948 indices[currIdx++] = uint16(ringStartIdx + prevRingIdx);
949 }
950
951 // Ring->center triangles
952 for(uint64 i = 0; i < divisions; ++i)
953 {
954 indices[currIdx++] = uint16(ringStartIdx + i);
955 indices[currIdx++] = centerIdx;
956
957 uint64 prevRingIdx = i == 0 ? divisions - 1 : i - 1;
958 indices[currIdx++] = uint16(ringStartIdx + prevRingIdx);
959 }
960
961 StructuredBufferInit vbInit;
962 vbInit.Stride = sizeof(Float3);
963 vbInit.NumElements = numVertices;
964 vbInit.InitData = positions.Data();
965 vtxBuffer.Initialize(vbInit);
966
967 FormattedBufferInit ibInit;
968 ibInit.Format = DXGI_FORMAT_R16_UINT;
969 ibInit.NumElements = numIndices;
970 ibInit.InitData = indices.Data();

Callers 1

InitializeMethod · 0.85

Calls 4

Float3Class · 0.85
InitMethod · 0.45
DataMethod · 0.45
InitializeMethod · 0.45

Tested by

no test coverage detected