You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VTK 9.2渲染立方体时部分面始终显示反向的问题

VTK 9.2立方体面渲染方向异常问题

我正在使用VTK 9.2渲染立方体的面,立方体顶点顺序如下:

//              7-------6
//             /|      /|
//            4-+-----5 |
//            | |     | |   y
//            | 3-----+-2   | z
//            |/      |/    |/
//            0-------1     +--x

(我知道这是非典型的顶点顺序,但只要使用时保持一致,对VTK渲染面应该没有影响)

其中+Z面渲染完全正常,但-Z面无论定义何种顶点顺序,始终显示反向。我为每个面使用了VTK_PIXEL类型。

以下是渲染代码:

vtkGenericOpenGLRenderWindow* renderWindow = vtkGenericOpenGLRenderWindow::New();
vtkNew<vtkUnstructuredGrid> ugrid;

// 创建并插入顶点
std::vector<std::vector<double>> vertices(8);
double halfWidth = 20.0;
vertices[0] = { - halfWidth, - halfWidth, - halfWidth }; // 0
vertices[1] = { + halfWidth, - halfWidth, - halfWidth }; // 1
vertices[2] = { + halfWidth, - halfWidth, + halfWidth }; // 2
vertices[3] = { - halfWidth, - halfWidth, + halfWidth }; // 3
vertices[4] = { - halfWidth, + halfWidth, - halfWidth }; // 4 
vertices[5] = { + halfWidth, + halfWidth, - halfWidth }; // 5 
vertices[6] = { + halfWidth, + halfWidth, + halfWidth }; // 6 
vertices[7] = { - halfWidth, + halfWidth, + halfWidth }; // 7

vtkNew<vtkPoints> points;
for (auto i = 0; i < 8; ++i)
{
    points->InsertNextPoint(vertices.at(i).at(0), vertices.at(i).at(1), vertices.at(i).at(2));
}

// 创建面
std::vector<std::array<vtkIdType, 4>> faces;
faces.push_back({ 3, 2, 7, 6 }); // +Z面,渲染正常!

// -Z面尝试的各种顶点顺序:
faces.push_back({ 1, 0, 5, 4 }); // 显示反向
//faces.push_back({ 0, 1, 4, 5 }); // 显示反向
//faces.push_back({ 0, 4, 1, 5 }); // 显示反向
//faces.push_back({ 5, 1, 4, 0 }); // 显示反向
//faces.push_back({ 4, 5, 0, 1 }); // 显示反向
//faces.push_back({ 1, 5, 0, 4 }); // 显示反向
//faces.push_back({ 4, 0, 5, 1 }); // 显示反向
//faces.push_back({ 5, 4, 1, 0 }); // 仍显示反向

// 插入面
for(int i = 0; i < faces.size(); i++) 
{
    ugrid->InsertNextCell(VTK_PIXEL, 4, faces.at(i).data());
}

ugrid->SetPoints(points);

// 创建数据集映射器
vtkNew<vtkDataSetMapper> mapper;
mapper->SetInputData(ugrid);

// 创建Actor并添加到场景
vtkNew<vtkActor> actor;
actor->SetMapper(mapper);
addActorToScene(0, 0.0, actor);

renderWindow->Render();

+Z面渲染效果正常,但-Z面无论尝试哪种顶点顺序都显示反向。

渲染效果如下:
立方体面渲染异常

如图所示,+Z面(顶点顺序3, 2, 7, 6)显示正常,外部为白色、内部为黑色;但-Z面显示异常,内部为白色、外部为黑色。


内容的提问来源于stack exchange,提问作者Tyler Shellberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 16:45:43