VTK 读取模型并显示纹理

#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2); // VTK was built with vtkRenderingOpenGL2
VTK_MODULE_INIT(vtkInteractionStyle);

#include <vtkSmartPointer.h>
#include <vtkOBJReader.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkTexture.h>
#include <vtkActor.h>
#include <vtkPolyDataMapper.h>
#include <vtkLight.h>
#include <vtkJPEGReader.h>
#include <vtkProperty.h>  // 添加这行,确保包含 vtkProperty 的定义


int main(int argc, char* argv[]) {

    // 创建OBJ读取器
    vtkSmartPointer<vtkOBJReader> objReader = vtkSmartPointer<vtkOBJReader>::New();
    objReader->SetFileName("D:\\mesh_2_img\\LowerJaw.obj");
    objReader->Update();

    // 创建纹理读取器(以JPEG为例)
    vtkSmartPointer<vtkJPEGReader> jpegReader = vtkSmartPointer<vtkJPEGReader>::New();
    jpegReader->SetFileName("D:\\mesh_2_img\\LowerJaw.jpg"); // 设置纹理图片的路径
    jpegReader->Update();

    // 创建纹理对象
    vtkSmartPointer<vtkTexture> texture = vtkSmartPointer<vtkTexture>::New();
    texture->SetInputConnection(jpegReader->GetOutputPort());

    // 创建mapper和actor
    vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper->SetInputConnection(objReader->GetOutputPort());

    vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
    actor->SetMapper(mapper);
    actor->SetTexture(texture);  // 设置纹理

    // 设置材质属性,使表面呈现清淡色彩
    actor->GetProperty()->SetAmbient(0.9);   // 环境光成分,值越高则表面颜色越清淡
    actor->GetProperty()->SetDiffuse(0.3);   // 漫反射成分,减少漫反射以降低颜色的鲜艳度
    actor->GetProperty()->SetSpecular(0.1);  // 镜面反射成分,稍微增加光泽
    actor->GetProperty()->SetSpecularPower(5.0); // 镜面反射强度设置为较低的值

    // 创建渲染器、窗口和交互器
    vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
    vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
    renderWindow->SetSize(1920, 1080);
    renderWindow->AddRenderer(renderer);
    vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
    renderWindowInteractor->SetRenderWindow(renderWindow);

    // 添加actor到渲染器
    renderer->AddActor(actor);

    添加光源以实现较柔和的光照效果
    //vtkSmartPointer<vtkLight> light = vtkSmartPointer<vtkLight>::New();
    //light->SetPositional(true);
    //light->SetPosition(10, 10, 10); // 设置光源位置
    //light->SetFocalPoint(actor->GetPosition()); // 光源指向对象中心
    //light->SetColor(1.0, 1.0, 1.0);  // 设置光的颜色为白色
    //light->SetIntensity(0.5);  // 调整光源强度,较低强度使表面颜色更加柔和
    //renderer->AddLight(light);

    // 设置渲染背景颜色
    renderer->SetBackground(0.9, 0.9, 0.9); // 背景色设置为浅色,更加突出清淡效果

    // 开始渲染
    renderWindow->Render();
    renderWindowInteractor->Start();

    return EXIT_SUCCESS;
}
 

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老猿的春天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值