Po uruchomieniu w ten sam, chciałbym dodać trochę więcej do mpcarlos87/Carlinhos/odpowiedzi NIL za ...
Poniższy kod jest najmniejszym, że mogę dokonać informacyjny próbkę roboczą. Kluczowe punkty to:
- użycie vtkSmartPointer oznacza mniejszą potrzebę oczyszczenia ptrClass-> Usuń() styl
- inteligentne wskaźniki również zrobić automatycznego rzucania: vtkRenderWindow * do vtkOpenGLRenderWindow * dla SetContect(), który jest miły
- inline definicja frag shader jest dobre dla szybkiego testowania, ale złe dla każdej innej przyczyny (używać z rozwagą!)
- inline frag shader jest bardzo wrażliwy na nowych linii (\ n) w przypadku rzeczy jak #version
#include "vtkConeSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkCamera.h"
#include "vtkActor.h"
#include "vtkRenderer.h"
#include "vtkShader2.h"
#include "vtkShaderProgram2.h"
#include "vtkShader2Collection.h"
#include "vtkSmartPointer.h"
#include "vtkOpenGLRenderWindow.h"
#include "vtkOpenGLProperty.h"
int main()
{
vtkSmartPointer<vtkConeSource> cone = vtkConeSource::New();
vtkSmartPointer<vtkPolyDataMapper> coneMapper = vtkPolyDataMapper::New();
coneMapper->SetInputConnection(cone->GetOutputPort());
vtkSmartPointer<vtkActor> coneActor = vtkActor::New();
coneActor->SetMapper(coneMapper);
vtkSmartPointer<vtkRenderer> ren= vtkRenderer::New();
ren->AddActor(coneActor);
vtkSmartPointer<vtkRenderWindow> renWin = vtkRenderWindow::New();
renWin->AddRenderer(ren);
const char* frag = "void propFuncFS(void){ gl_FragColor = vec4(255,0,0,1);}";
vtkSmartPointer<vtkShaderProgram2> pgm = vtkShaderProgram2::New();
pgm->SetContext(renWin);
vtkSmartPointer<vtkShader2> shader=vtkShader2::New();
shader->SetType(VTK_SHADER_TYPE_FRAGMENT);
shader->SetSourceCode(frag);
shader->SetContext(pgm->GetContext());
pgm->GetShaders()->AddItem(shader);
vtkSmartPointer<vtkOpenGLProperty> openGLproperty =
static_cast<vtkOpenGLProperty*>(coneActor->GetProperty());
openGLproperty->SetPropProgram(pgm);
openGLproperty->ShadingOn();
int i;
for (i = 0; i < 360; ++i)
{
renWin->Render();
ren->GetActiveCamera()->Azimuth(1);
}
return 0;
}
Zrobiłem trochę prób i błędów, aby powyższe zadziałało - mam nadzieję, że to pomaga!
Mam ten sam problem. Pytałem na liście mailingowej vtk 2 miesiące temu i wciąż czekam na odpowiedź. Oni przestali używać LoadMaterial w [vtk6.1] (http://vtk.1045678.n5.nabble.com/vtkProperty-LoadMaterial-disappeared-in-VTK-6-1-td5726066.html) bez podawania jakiejkolwiek alternatywy. (No cóż, nie znalazłem żadnych) Jeśli możesz, najprostszym sposobem jest użycie LoadMaterial w vtk <6.1. – Nil