相机无法重新绘制
vtk吧
全部回复
仅看楼主
level 3
彀音 楼主
利用vtktransform对相机进行位移变换或者旋转时,调试是成功的,但无法显示只有黑屏一闪而过,代码如下,想求教一下大家怎么修改。[委屈]
#include <vtkPolyData.h>
#include <vtkSmartPointer.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkProperty.h>
#include <vtkParametricFunctionSource.h>
#include <vtkParametricTorus.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include<vtkTransform.h>
#include<vtkCamera.h>
#include<vtkHomogeneousTransform.h>
#include <vtkMatrix4x4.h>
int main(int, char *argv[])
{
vtkSmartPointer<vtkParametricTorus> parametricObject = vtkSmartPointer<vtkParametricTorus>::New();
vtkSmartPointer<vtkParametricFunctionSource> parametricFunctionSource =vtkSmartPointer<vtkParametricFunctionSource>::New();
parametricFunctionSource->SetParametricFunction(parametricObject);
parametricFunctionSource->Update();
vtkSmartPointer<vtkPolyDataMapper> mapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(parametricFunctionSource->GetOutputPort());
vtkSmartPointer<vtkActor> actor =
vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
//Create a renderer, render window, and interactor
vtkSmartPointer<vtkRenderer> renderer =
vtkSmartPointer<vtkRenderer>::New();
renderer->SetBackground(.1, .3, .2); // Background color dark green
vtkSmartPointer<vtkRenderWindow> renderWindow =
vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
int i;
for (i = 0; i < 360; ++i)
{
renderWindow->Render();
renderer->AddActor(actor);
vtkSmartPointer<vtkCamera> cam = vtkSmartPointer<vtkCamera>::New();
vtkSmartPointer<vtkTransform> transform = vtkSmartPointer<vtkTransform>::New();
transform->PostMultiply();
transform->RotateZ(1);
cam->ApplyTransform(transform);
renderer->SetActiveCamera(cam);
}
return EXIT_SUCCESS;
}
2016年08月28日 18点08分 1
level 12
这代码是官方demo里的吧?
2016年08月29日 00点08分 2
@彀音 代码没错,应该是坐标系跑飞了
2016年08月29日 01点08分
level 12
参考下官方demo中的这个例子:TransformPipeline
2016年08月29日 01点08分 3
好,谢谢吧主我这就去试试
2016年08月29日 01点08分
吧主[泪],我按照你给的demo和我自己在教程找的一些方法试了,可以对actor进行transform平移或者旋转,但是一旦在循环里用camera来ApplyTransform或者SetUserTransform就什么都不会发生,只是运行一会就进入了交互界面。
2016年08月30日 15点08分
吧主,我终于到的一部分想要的结果了[乖],虽然还有一些细节没处理好,我再琢磨琢磨,谢谢你的帮助啦
2016年09月02日 15点09分
level 9
transform->RotateZ(1);
改成
transform->RotateZ(i);
试一下
2016年08月30日 17点08分 4
还是什么都看不到运行了一会就退出了,是不是我相机位置设置的不对导致看不见?
2016年08月31日 02点08分
谢谢小吧主的帮助[开心]
2016年09月02日 15点09分
@彀音 把相机的定义放循环体外,注释掉循环体,能看见actor吗?
2016年09月05日 17点09分
level 9
vtkSmartPointer<vtkTransform> transform = vtkSmartPointer<vtkTransform>::New();
vtkSmartPointer<vtkCamera> cam = vtkSmartPointer<vtkCamera>::New();
renderer->SetActiveCamera(cam);
for (int i = 0; i < 360; ++i){
renderer->ResetCamera();
transform->RotateZ(i);
cam->ApplyTransform(transform);
renderWindow->Render();
Sleep(1);
}
我试过了 看以看见actor旋转
2016年09月05日 17点09分 5
level 9
用renderer->ResetCamera();
以免找不到actor
2016年09月05日 17点09分 6
好的,这两天在弄文献,没来得及上贴吧,谢谢啦,我去再完善完善
2016年09月06日 06点09分
1