Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 如何在vtk中绘制基本体(点、线等)?_Opengl_Visualization_Vtk - Fatal编程技术网

Opengl 如何在vtk中绘制基本体(点、线等)?

Opengl 如何在vtk中绘制基本体(点、线等)?,opengl,visualization,vtk,Opengl,Visualization,Vtk,我需要在vtkActor上绘制基本体,但我不知道如何绘制。也许我可以用opengl函数来做这个?在这个例子中,它是有效的,但我需要以交互方式绘制它。 谢谢你的回答。你说的绘制原语是什么意思 您可以看到,VTK更适合于呈现(而不是绘制)各种类型的数据集。例如,可以使用vtkPolyDataMapper和vtkActor绘制三维网格,使用vtkImageActor和类似类绘制图像 通常,您有一个或多个数据集,可以为其创建演员并在屏幕上显示 你不会像GDI或HTML5画布那样在屏幕上绘制原语。根据需要

我需要在vtkActor上绘制基本体,但我不知道如何绘制。也许我可以用opengl函数来做这个?在这个例子中,它是有效的,但我需要以交互方式绘制它。
谢谢你的回答。

你说的绘制原语是什么意思

您可以看到,VTK更适合于呈现(而不是绘制)各种类型的数据集。例如,可以使用vtkPolyDataMapper和vtkActor绘制三维网格,使用vtkImageActor和类似类绘制图像

通常,您有一个或多个数据集,可以为其创建演员并在屏幕上显示

你不会像GDI或HTML5画布那样在屏幕上绘制原语。根据需要,您可以添加另一个具有适当数据集的角色、小部件(具有交互性的角色),或者添加2D角色,该角色被绘制为整个场景顶部的覆盖,并以屏幕坐标进行描述


如果你能描述一下你想要实现的目标,我可以为你指出一些更具体的事情。

免责声明:未经测试的代码!我是凭记忆写的。因此,根据需要测试并阅读手册。请注意,下面的代码只绘制了一行。出于表演方面的原因,我建议,不要在每一行中创建一个演员。在一个演员中创建多个台词(如果不是所有台词的话)。只需添加点并设置正确的索引

vtkPoints* points = vtkPoints::New();
vtkCellArray* lineIndices = vtkCellArray::New();

points->InsertNextPoint( 0, 0, 0);
points->InsertNextPoint(10, 0, 0);

lineIndices->InsertNextCell(2);
lineIndices->InsertNextCellPoint(0); // indices to points array.
lineIndices->InsertNextCellPoint(1);

vtkPolyData* polyData = vtkPolyData::New();
polyData->SetPoints(points);
polyData->SetLines(lines);

// continue with standard mapper, actor setup...

我正在寻找一种使用VTK在屏幕上绘制网格的方法,我想出了以下代码:

vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
vtkSmartPointer<vtkCellArray> lineIndices = vtkSmartPointer<vtkCellArray>::New();

for(int iIndex = 0, connectivityIndex = 0; iIndex <= m_resolution; ++iIndex, connectivityIndex += 4)
{
    double pointCoordinate = m_range[0] + (m_range[1] - m_range[0]) * (iIndex / static_cast<double>(m_resolution));
    points->InsertNextPoint(pointCoordinate, -m_range[1], 0.0);
    points->InsertNextPoint(pointCoordinate,  m_range[1], 0.0);

    points->InsertNextPoint(-m_range[1], pointCoordinate, 0.0);
    points->InsertNextPoint( m_range[1], pointCoordinate, 0.0);

    lineIndices->InsertNextCell(2);
    lineIndices->InsertCellPoint(connectivityIndex + 0);
    lineIndices->InsertCellPoint(connectivityIndex + 1);

    lineIndices->InsertNextCell(2);
    lineIndices->InsertCellPoint(connectivityIndex + 2);
    lineIndices->InsertCellPoint(connectivityIndex + 3);
}

vtkSmartPointer<vtkPolyData> data = vtkSmartPointer<vtkPolyData>::New();
data->SetPoints(points);
data->SetLines(lineIndices);

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

vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);

vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(actor);
vtkSmartPointer points=vtkSmartPointer::New();
vtkSmartPointer lineindex=vtkSmartPointer::New();
对于(int-iIndex=0,connectivityIndex=0;iIndex-InsertNextPoint(点坐标,-m_范围[1],0.0));
点->插入下一个点(点坐标,m_范围[1],0.0);
点->插入下一个点(-m_范围[1],点坐标,0.0);
点->插入下一个点(m_范围[1],点坐标,0.0);
lineindex->InsertNextCell(2);
lineindex->InsertCellPoint(connectivityIndex+0);
LineIndex->InsertCellPoint(连接索引+1);
lineindex->InsertNextCell(2);
LineIndex->InsertCellPoint(连接索引+2);
LineIndex->InsertCellPoint(连接索引+3);
}
vtkSmartPointer data=vtkSmartPointer::New();
数据->设定点(点);
数据->设置行(行索引);
vtkSmartPointer映射器=vtkSmartPointer::New();
映射器->设置输入数据(数据);
vtkSmartPointer=vtkSmartPointer::New();
actor->SetMapper(映射器);
vtkSmartPointer=vtkSmartPointer::New();
渲染器->AddActor(actor);

它基于@shash代码,正在运行。

谢谢,我已经尝试过了。但在这个例子中,将创建很多行。这些行的参数,如在actor中设置的宽度,我需要另一个。现在,我使用System.Drawing from.net进行绘图,并使用vtkImageImport将位图加载到actor;谢谢,我可以像您一样解决问题我创建了一个特殊的2d演员来绘制和使用系统。一个接一个地绘制。