Partial model loss in array display when the number of triangles is huge.

I have a STL file which has 983236 triangles. I read it and use vtkAppendPolyData and vtkTransformPolyDataFilter to make a new data for the matrix display. Whe I set nx=ny=nz=7, it was displayed correctly. However when I set nz=8, now it has 385428512 triangles but only part of it was displayed. I try to use a plane to cut it and found the cross-section is correct. It means vtkAppendPolyData has generated all triangles but this model was not displayed correctly.

The computer has enough memory and GPU resource. I got no memory leak and the program exits normally.

The VTK version is 9.5.1 x64. I compiled and used VTK with VS2019. VTK 9.4 also has this problem.

What below is the codes. Thanks for your kindly help. It is a strange problem.

int main(int argc, char* argv)
{
vtkOutputWindow::SetGlobalWarningDisplay(true);

vtkSmartPointer<vtkSTLReader> stlReader = vtkSmartPointer<vtkSTLReader>::New();
stlReader->SetFileName("sim.stl");
stlReader->Update();

if (!stlReader->GetOutput()) {
    std::cerr << "Error: Failed to read STL file!" << std::endl;
    return EXIT_FAILURE;
}

std::cout << stlReader->GetOutput()->GetNumberOfPolys() << std::endl;

vtkSmartPointer<vtkAppendPolyData> appendFilter = vtkSmartPointer<vtkAppendPolyData>::New();

int nx = 7, ny = 7, nz = 8;
double dx = 0.1, dy = 0.1, dz = 0.1;

for (int k = 0; k < nz; k++)
{
    for (int j = 0; j < ny; j++)
    {
        for (int i = 0; i < nx; i++)
        {
            vtkSmartPointer<vtkTransform> transform = vtkSmartPointer<vtkTransform>::New();
            transform->Translate(i * dx, j * dy, k * dz);

            vtkSmartPointer<vtkTransformPolyDataFilter> transformFilter = vtkSmartPointer<vtkTransformPolyDataFilter>::New();
            transformFilter->SetInputData(stlReader->GetOutput());
            transformFilter->SetTransform(transform);
            transformFilter->Update();

            appendFilter->AddInputData(transformFilter->GetOutput());
        }
    }
}

appendFilter->Update();

std::cout << appendFilter->GetOutput()->GetNumberOfPolys() << std::endl;

vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputData(appendFilter->GetOutput());

vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
actor->GetProperty()->EdgeVisibilityOff();
actor->GetProperty()->SetOpacity(0.8);
actor->GetProperty()->BackfaceCullingOn();

vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
renderWindow->SetSize(1920, 1080);

vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);

renderer->AddActor(actor);
renderer->SetBackground(0.1, 0.2, 0.3);
renderer->ResetCamera();

renderWindow->Render();
renderWindowInteractor->Start();

return EXIT_SUCCESS;

}