Как применить цвет к сетке, импортированной из Blender 2.69 в VTK 6.2 + Qt 5.3

Я новичок в vtk и Qt. Я создал куб в Blender с 3 гранями красного и 1 гранью зеленого цвета и экспортирован как cube.ply для сохранения информации о цвете:

ply
format ascii 1.0
comment Created by Blender 2.69 (sub 0) - www.blender.org, source file: ''
element vertex 24
property float x
property float y
property float z
property float nx
property float ny
property float nz
element face 6
property list uchar uint vertex_indices
end_header
1.000000 1.000000 -1.000000 0.000000 0.000000 -1.000000
1.000000 -1.000000 -1.000000 0.000000 0.000000 -1.000000
-1.000000 -1.000000 -1.000000 0.000000 0.000000 -1.000000
-1.000000 1.000000 -1.000000 0.000000 0.000000 -1.000000
1.000000 0.999999 1.000000 0.000000 -0.000000 1.000000
-1.000000 1.000000 1.000000 0.000000 -0.000000 1.000000
-1.000000 -1.000000 1.000000 0.000000 -0.000000 1.000000
0.999999 -1.000001 1.000000 0.000000 -0.000000 1.000000
1.000000 1.000000 -1.000000 1.000000 -0.000000 0.000000
1.000000 0.999999 1.000000 1.000000 -0.000000 0.000000
0.999999 -1.000001 1.000000 1.000000 -0.000000 0.000000
1.000000 -1.000000 -1.000000 1.000000 -0.000000 0.000000
1.000000 -1.000000 -1.000000 -0.000000 -1.000000 -0.000000
0.999999 -1.000001 1.000000 -0.000000 -1.000000 -0.000000
-1.000000 -1.000000 1.000000 -0.000000 -1.000000 -0.000000
-1.000000 -1.000000 -1.000000 -0.000000 -1.000000 -0.000000
-1.000000 -1.000000 -1.000000 -1.000000 0.000000 -0.000000
-1.000000 -1.000000 1.000000 -1.000000 0.000000 -0.000000
-1.000000 1.000000 1.000000 -1.000000 0.000000 -0.000000
-1.000000 1.000000 -1.000000 -1.000000 0.000000 -0.000000
1.000000 0.999999 1.000000 0.000000 1.000000 0.000000
1.000000 1.000000 -1.000000 0.000000 1.000000 0.000000
-1.000000 1.000000 -1.000000 0.000000 1.000000 0.000000
-1.000000 1.000000 1.000000 0.000000 1.000000 0.000000
4 0 1 2 3
4 4 5 6 7
4 8 9 10 11
4 12 13 14 15
4 16 17 18 19
4 20 21 22 23

Я создал виджет QVTK в Qt Creator, и мой код рисует куб серым цветом. Ниже приведен мой файл mainwindow.cpp (после различных изменений для отображения цветов):

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QVTKInteractor.h"
#include <vtkSTLReader.h>
#include <vtkPLYReader.h>
#include <vtkSmartPointer.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkProperty.h>



MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);



   vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
   vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
   vtkSmartPointer<vtkRenderWindow> renwin = vtkSmartPointer<vtkRenderWindow>::New();
   vtkSmartPointer<QVTKInteractor> interactor= vtkSmartPointer<QVTKInteractor>::New();
   vtkSmartPointer<vtkPLYReader> reader = vtkSmartPointer<vtkPLYReader>::New();
   vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();


    reader->SetFileName("../vtk2/media/cube.ply");
    reader->Update();
    mapper->SetColorModeToMapScalars();
    mapper->SetInputConnection(reader->GetOutputPort());

    mapper->ScalarVisibilityOn();
    actor->SetMapper(mapper);
    renderer->AddActor(actor);

       ui->qvtkWidget->SetRenderWindow(renwin);
       ui->qvtkWidget->GetRenderWindow()->AddRenderer(renderer);
       renderer->SetBackground(.3,.6,.3);
       actor->GetProperty()->SetFrontfaceCulling(true);
       QVTKInteractor* inter=ui->qvtkWidget->GetInteractor();
}

MainWindow::~MainWindow()
{
    delete ui;
}

Это не показывает никаких цветов. Перепробовав различные примеры VTK, я не нашел того, который показывает, как отображать цвета из импортированного 3d-файла. Я уверен, что мне не хватает куска кода.

Побочный вопрос - куб выглядит асимметрично в QVTK Widget. Интересно, это проблема с QVTK? Я прилагаю изображение..

Посетите http://postimg.org/image/r8093cwbt/ для изображения

1 ответ

Вы можете попробовать получить доступ к vtkPolyData, затем pointData (или cellData) и настройке цвета, что-то вроде этого

mapper->GetInput()->GetPointData()->SetScalars(colors);

В этом случае color - это vtkUnsignedCharArray с цветами в r,g,b (подробнее здесь).

Или также вы можете попробовать изменить свойства актеров следующим образом:

actor->GetProperty()SetColor(double r, double g, double b);

В этом случае не забудьте добавить строку #include <vtkProperty.h> чтобы иметь доступ к свойствам актера

Другие вопросы по тегам