读取3D文件mesh格式工具

这篇具有很好参考价值的文章主要介绍了读取3D文件mesh格式工具。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近要做一个3d仪表,所以了解了一下3d相关方面的知识。这里暂时不做一一赘述,只记录下当前的需求。

需求:

        由于****.mesh文件比较多,qt转换后的名字大多都能顾名思义,但是为了更加准确的找到某个部件,于是需要一个工具可以打开并查看****.mesh文件。自己在网上搜了很多工具,但是都打不开,要么是打开出错。

分析:

        既然Qt可以加载,何不自己写一个简单的工具。

开干:

代码如下,很简单:

import QtQuick
import QtQuick.Window
import QtQuick3D
import QtQuick.Controls
import Qt.labs.platform
import QtQuick.Layouts
import QtQml
ApplicationWindow {
    width: 1024
    height: 768
    visible: true
    title: qsTr("读取mesh文件");

    property int currentFileIndex: 0;
    property int filesCount: 0;

    property bool isLoad: false;
    property string current3dFile: ""




    header: ToolBar {
        RowLayout {
            anchors.fill: parent
            ToolButton {
                Layout.preferredWidth: 150;
                Layout.fillHeight: true;
                text: "Open mesh Model"
                onPressed: {
                    isLoad = false;
                    fileDialog.open()
                }
            }

            ToolButton {
                Layout.preferredWidth: 100;
                Layout.fillHeight: true;
                text: "Previous"
                onPressed: {
                    previous();
                }
            }

            ToolButton {
                Layout.preferredWidth: 100;
                Layout.fillHeight: true;
                text: "Next"
                onPressed: {
                    next();
                }
            }
            Item {
                Layout.fillHeight: true;
                Layout.fillWidth: true;
            }
        }
    }

    FileDialog {
        id: fileDialog;
        fileMode: FileDialog.OpenFiles;
        nameFilters: ["3d mesh files (*.mesh)"]
        onAccepted: {
            current3dFile = fileDialog.files[currentFileIndex];
            filesCount = fileDialog.files.length;
            console.log("current file = " , current3dFile , " count = " , filesCount )
            isLoad = true;
        }
    }

    footer: ToolBar  {

        TextEdit {
            id: name
            anchors.centerIn: parent;
            readOnly: true;
            font.pixelSize: 18;
            verticalAlignment: Text.AlignVCenter
            horizontalAlignment: Text.AlignHCenter;

            text:  isLoad ? ( " "+  Number(currentFileIndex+1) + "/" + filesCount + "    name : "+ getFileName(current3dFile) ) : "The 3D file is not loaded" ;
        }
    }


    function getFileName(url) {
        if ( url.length ===0)
            return "is null";

        var pos1 = url.lastIndexOf('/');
        var pos2 = url.lastIndexOf('\\');
        var pos = Math.max(pos1, pos2);
        if (pos < 0) {
            return url;
        }
        else {
            return url.substring(pos + 1);
        }
    }



    function previous() {
        if ( currentFileIndex > 0) {
            currentFileIndex --;
        }

        current3dFile = fileDialog.files[currentFileIndex];
    }

    function next() {
        if ( currentFileIndex < filesCount-1) {
            currentFileIndex ++;
        }
        current3dFile = fileDialog.files[currentFileIndex];
    }


    View3D {
        id: view3D
        anchors.fill: parent
        environment: sceneEnvironment
        SceneEnvironment {
            id: sceneEnvironment
            antialiasingQuality: SceneEnvironment.High
            antialiasingMode: SceneEnvironment.MSAA
        }

        MouseArea{
            id:mouse
            anchors.fill: parent
            property int cx: 0
            property int cy: 0
            onWheel: function(wheel){
                if(wheel.angleDelta.y>0)
                    camera.z = camera.z+5
                else
                    camera.z = camera.z-5
            }
            onPressed:function(mouse) {
                cx = mouse.x
                cy = mouse.y
            }

            onPositionChanged: function(mouse){
                var intervalX = mouse.x-cx
                var intervalY = mouse.y-cy
                cameraNode.eulerRotation.y = intervalX+cameraNode.eulerRotation.y
                cameraNode.eulerRotation.x = cameraNode.eulerRotation.x-intervalY
                cx = mouse.x
                cy = mouse.y

            }
        }
        Node {
            id: node
            DirectionalLight {
                id: directionalLight
            }

            Model {
                id: cubeModel
                source:current3dFile;
                DefaultMaterial {
                    id: cubeMaterial
                    diffuseColor: "#b5bcd7"
                }
                materials: cubeMaterial
            }
        }

        Node{
            id:cameraNode

            PerspectiveCamera {
                id: camera
                z: 15
            }
        }
    }
}

所有代码都在,复制下来新建一个qml的3d工程即可运行。

已经实现功能:

1.鼠标拖动旋转

2.滚轮放大缩小

3.上一个mesh文件

4.下一个mesh文件

5.mesh文件名字支持ctrl+c

如果有时间还可以添加如下功能:

1.多添加几个相机机位。

2.增加材质渲染选项,可以选择其他颜色。

3.其他个性化需求。

 mesh文件,qt3d学习,3d,qt,开发语言

 文章来源地址https://www.toymoban.com/news/detail-522721.html

到了这里,关于读取3D文件mesh格式工具的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Face Mesh,采用机器学习,打造人脸3D表面动态轮廓

    MediaPipe Face Mesh是一种脸部几何解决方案,即使在移动设备上,也可以实时估计468个3D脸部界标。它采用机器学习(ML)来推断3D表面几何形状,只需要单个摄像机输入,而无需专用的深度传感器。该解决方案利用轻量级的模型架构以及整个管线中的GPU加速,可提供对实时体验至

    2024年02月08日
    浏览(35)
  • 基于Open3D和PyTorch3D读取三维数据格式OBJ

    本节将讨论另一种广泛使用的3D数据文件格式,即OBJ文件格式。OBJ文件格式最初由Wavefront Technologies Inc.开发。与PLY文件格式类似,OBJ格式也有ASCII版本和二进制版本。二进制版本是专有的且未记录文档。本章主要讨论ASCII版本。 与之前类似,将通过示例来学习文件格式。第一个

    2024年02月10日
    浏览(41)
  • qt加载obj格式的3D模型

    在 Qt 中加载 obj 格式的 3D 模型可以使用 Qt 3D 模块。 首先,你需要在你的工程文件中包含 Qt 3D 模块,方法是在工程文件的顶部添加以下行: 然后,在你的代码中包含 Qt 3D 的头文件: 接下来,你可以使用 Qt3DRender::QObjLoader 类来加载 obj 格式的 3D 模型。首先,创建一个 Qt3DRen

    2024年02月16日
    浏览(61)
  • 3D模型格式转换工具HOOPS Exchange:如何将3D PDF转换为STEP格式?

    3D CAD数据在制造、工程和设计等各个领域都扮演着重要的角色。为了促进不同软件应用程序之间的协作和互操作性,它通常以不同的格式进行交换。 HOOPS Exchange是一个强大的软件开发工具包,提供了处理和将3D CAD数据从一种格式转换为另一种格式的解决方案。 在本文中,我们

    2024年02月04日
    浏览(47)
  • 使用python-open3d读取pcd,bin格式的点云,并显示

    open3d读取pcd格式点云 效果图    用open3d读取bin文件   效果图     

    2024年02月11日
    浏览(46)
  • 3D格式转换工具HOOPS Exchange助力3D 打印软件实现质的飞跃

    HOOPS SDK是用于3D工业软件开发的工具包,其中包括4款工具,分别是用于读取和写入30多种CAD文件格式的HOOPS Exchange、专注于Web端工程图形渲染的HOOPS Communicator、用于移动端和PC端工程图形渲染的HOOPS Visualize、支持将3D数据以原生3D PDF、HTML和标准CAD格式进行发布的HOOPS Publish。 申

    2024年02月03日
    浏览(54)
  • 【Unity】模型文件格式、常见3D模型格式

    Unity 支持多种标准和专有模型文件格式。Unity 内部使用 .fbx 文件格式作为其导入链。最佳做法尽可能使用 .fbx 文件格式,并且不应在生产中使用专有文件格式。 标准文件格式 Unity 可读取以下标准 3D 文件格式: .fbx .dae (Collada) .dxf .obj 这些文件格式受到广泛支持。这些类型的文

    2024年01月17日
    浏览(45)
  • STL文件格式详解【3D】

    STL(StereoLithography:立体光刻)文件是 3 维表面几何形状的三角形表示。 表面被逻辑地细分或分解为一系列小三角形(面)。 每个面由垂直方向和代表三角形顶点(角)的三个点来描述。 切片算法使用这些数据来确定制造商要构建的 3 维形状的横截面。 本文描述了 STL 文件

    2024年02月13日
    浏览(43)
  • Open3D读取文件

    Open3D可以读取点云文件,三角网格文件,也可以读取图片。具体方法如下: 一、点云文件操作         Open3D支持的文件格式有xyz,xyzn,xyzrgb,pts,ply,pcd等文件。读取的方式也非常简单。data = o3d.io.read_point_cloud(\\\"文件名“) 1、读写文件         函数原型如下:    

    2024年02月08日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包