精华内容
下载资源
问答
  • Altium designer 快速建立3D模型的方法与技巧
  • 提问:3D模型展示商品不香吗? 香!当然香。 当3D建模成为电商网购应用的左膀右臂,大同小异的产品首图就有了焕然一新的呈现面貌!商品3D模型360°全方位展示,细节更丰富,辅以线上虚拟“看、试、穿、戴”,提供...

    提问:3D模型展示商品不香吗?
    香!当然香。

    当3D建模成为电商网购应用的左膀右臂,大同小异的产品首图就有了焕然一新的呈现面貌!商品3D模型360°全方位展示,细节更丰富,辅以线上虚拟“看、试、穿、戴”,提供接近实物的差异化网购体验,助力高效提升用户转化。

    3D模型虽美丽,然而,时下效果佳的3D建模技术因其较高的成本而使得让广大需求者望而却步。

    • 技术门槛高:专业人员手工制作,师带徒传承,学习成本高;
    • 时间成本高:完成一个简单物体的低模模型,工作量以小时起步,高模模型耗时更长。
    • 耗费高:单个商品的专业建模成本高,平均价格达到上千元,复杂模型更贵;

    华为移动服务最新开放的3D建模服务,助力轻松建模。用户只需使用普通的RGB相机,通过拍摄物体的不同角度图像,便可实现物体的3D几何模型和纹理的自动化生成,为应用提供3D模型构建、预览等能力。如在电商鞋子展示的场景,您可以通过此能力自动生成鞋子3D模型,用于3D展示,用户可360°随心放大或缩小商品,为用户提供差异化的购买体验。  

    效果示例

     技术方案

    3D物体建模能力由端云协同完成,端侧负责采集RGB图像,通过环绕物体一周拍摄多张图像,从而获取物体的不同角度图像,拍摄完毕后上传至云端实现3D物体建模。云端建模的流程及关键技术包括目标检测分割、特征检测与匹配、稀疏点云计算、稠密点云计算以及纹理重建等模块。最终输出业界通用的3D模型格式(.obj文件),面片数约40K~200K。

    开发准备

    1.配置集成的SDK包

    在应用的build.gradle文件中,dependencies内添加3D建模服务的SDK依赖

    // 3D Modeling Kit SDK
    implementation 'com.huawei.hms:modeling3d-object-reconstruct:1.0.0.300'
    

    2.配置AndroidManifest.xml

    打开main文件夹中的AndroidManifest.xml文件,可以根据场景和使用需要,配置读取和写入手机存储以及相机权限,在<application>前添加

    <!-- 往sdcard中写入数据的权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <!-- 使用相机的权限 -->
    <uses-permission android:name="android.permission.CAMERA" />
    

    开发步骤

    1、配置存储权限申请

    在MainActivity的onCreate()方法中,首先对手机存储的读取权限进行判断,如果未获取权限,则通过requestPermissions进行申请。

    if (EasyPermissions.hasPermissions(MainActivity.this, PERMISSIONS)) {
        Log.i(TAG, "Permissions OK");
    } else {
        EasyPermissions.requestPermissions(MainActivity.this, "To use this app, you need to enable the permission.",
                RC_CAMERA_AND_EXTERNAL_STORAGE, PERMISSIONS);
    }
    

    检查权限申请的结果,如果有权限初始化界面,没有权限提示用户开启。

    @Override
    public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) {
        Log.i(TAG, "permissions = " + perms);
        if (requestCode == RC_CAMERA_AND_EXTERNAL_STORAGE &&              PERMISSIONS.length == perms.size()) {
            initView();
            initListener();
        }
    }
    
    @Override
    public void onPermissionsDenied(int requestCode, @NonNull List<String> perms) {
        if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
            new AppSettingsDialog.Builder(this)
                    .setRequestCode(RC_CAMERA_AND_EXTERNAL_STORAGE)
                    .setRationale("To use this app, you need to enable the permission.")
                    .setTitle("Insufficient permissions")
                    .build()
                    .show();
        }
    }
    

    2.新建3D物体建模配置器

    // Initializing the RGB Mode
    Modeling3dReconstructSetting setting = new Modeling3dReconstructSetting.Factory()
            .setReconstructMode(Modeling3dReconstructConstants.ReconstructMode.PICTURE)
            .create();
    

    3.新建3D物体建模引擎并初始化任务

    调用Modeling3dReconstructEngine的getInstance()接口,传入当前应用的上下文创建3D建模引擎实例

    // Initializing the Rebuild Engine
    modeling3dReconstructEngine = Modeling3dReconstructEngine.getInstance(mContext);
    

    使用3D物体建模引擎初始化任务

    // Creating a Rebuilding Task
    modeling3dReconstructInitResult = modeling3dReconstructEngine.initTask(setting);
    // Getting a Rebuilding Task
    String taskId = modeling3dReconstructInitResult.getTaskId();
    

    4.新建上传监听器回调,处理拍摄的物体上传结果

    新建上传回调接口,您可以在该回调接口中编写上传成功或失败后需要执行的操作。

    // Re-establishing the upload callback listener
    private final Modeling3dReconstructUploadListener uploadListener = new Modeling3dReconstructUploadListener() {
        @Override
        public void onUploadProgress(String taskId, double progress, Object ext) {
            // Upload progress
        }
    
        @Override
        public void onResult(String taskId, Modeling3dReconstructUploadResult result, Object ext) {
            if (result.isComplete()) {
                isUpload = true;
                ScanActivity.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        progressCustomDialog.dismiss();
                        Toast.makeText(ScanActivity.this, getString(R.string.upload_text_success), Toast.LENGTH_SHORT).show();
                    }
                });
                TaskInfoAppDbUtils.updateTaskIdAndStatusByPath(new Constants(ScanActivity.this).getCaptureImageFile() + manager.getSurfaceViewCallback().getCreateTime(), taskId, 1);
            }
        }
    
        @Override
        public void onError(String taskId, int errorCode, String message) {
            isUpload = false;
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    progressCustomDialog.dismiss();
                    Toast.makeText(ScanActivity.this, "Upload failed." + message, Toast.LENGTH_SHORT).show();
                    LogUtil.e("taskid" + taskId + "errorCode: " + errorCode + " errorMessage: " + message);
                }
            });
    
        }
    };
    

    5.3D物体建模引擎设置上传监听器,上传采集的图片数据

    上传回调接口传入3D建模引擎并调用uploadFile()接口,

    传入第三步获取到的任务ID以及需要上传的图片路径,将数据上传到云端服务器。

    // Set the callBack to engine.
    modeling3dReconstructEngine.setReconstructUploadListener(uploadListener);
    // Executing a Rebuild Upload Task
    modeling3dReconstructEngine.uploadFile(taskId, filePath);
    

    6.查询3D物体建模任务状态。

    调用Modeling3dReconstructTaskUtils的getInstance接口创建3D建模任务处理实例,同样是传入当前应用的上下文作为入参。

    // Initialize the reconstruction task tool class.
    modeling3dReconstructTaskUtils = Modeling3dReconstructTaskUtils.getInstance(Modeling3dDemo.getApp());
    

    调用任务处理实例的queryTask接口查询当前建模任务的进度。

    // Query the reconstruction task execution result. The options are as follows: 0: To be uploaded; 1: Generating; 3: Completed; 4: Failed.
    Modeling3dReconstructQueryResult queryResult = modeling3dReconstructTaskUtils.queryTask(task.getTaskId());
    

    7.新建下载监听器回调,用于处理3D物体建模模型文件的下载结果。

    新建下载回调接口,您可以在该回调接口中编写下载成功或失败后需要执行的操作

    // Re-establishing the download callback listener
    private Modeling3dReconstructDownloadListener modeling3dReconstructDownloadListener = new Modeling3dReconstructDownloadListener() {
        @Override
        public void onDownloadProgress(String taskId, double progress, Object ext) {
            ((Activity) mContext).runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    dialog.show();
                }
            });
        }
    
        @Override
        public void onResult(String taskId, Modeling3dReconstructDownloadResult result, Object ext) {
            ((Activity) mContext).runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(getContext(), "Download complete", Toast.LENGTH_SHORT).show();
                    TaskInfoAppDbUtils.updateDownloadByTaskId(taskId, 1);
                    dialog.dismiss();
                }
            });
        }
    
        @Override
        public void onError(String taskId, int errorCode, String message) {
            LogUtil.e(taskId + " <---> " + errorCode + message);
            ((Activity) mContext).runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(getContext(), "Download failed." + message, Toast.LENGTH_SHORT).show();
                    dialog.dismiss();
                }
            });
        }
    };
    

    8.3D物体建模引擎加入下载监听,下载重建成功的模型文件。

    将下载回调接口传入3D建模引擎并调用downloadModel接口,传入第三步中获取的任务id和保存路径进行模型文件的下载。

    // Setting Rebuild Download Listening
    modeling3dReconstructEngine.setReconstructDownloadListener(modeling3dReconstructDownloadListener);
    // Executing a Rebuild Download Task
    modeling3dReconstructEngine.downloadModel(appDb.getTaskId(), appDb.getFileSavePath());
    

    注意事项

    1. 支持的物体纹理需丰富(纹理特征明显)、不反光、不透明/不半透明、尺寸中等、刚体,典型物体包括:商品类(毛绒玩具、包、鞋子)、 家具类(沙发)、文物类(青铜器、石器、木器)等。
    2. 支持物体尺寸15cm*15cm*15cm < 物体尺寸 < 1.5m*1.5m*1.5m(尺寸越大建模时间越长)。
    3. 不支持人脸、人体建模。
    4. 图像拍摄时需将单一的采集物体静置于纯色平面上,光照要柔和、避免灯光过暗,拍摄时要对焦,覆盖均匀而足够的多视角,含仰视、平视、俯视(50张以上),相机移动尽可能缓慢,所有角度照片尽可能一致,同时全过程采集中物体屏占比尽量大且完整,要求尽量保证拍摄无虚焦、运动模糊、抖动模糊。

    超详细代码教程奉上,诚邀亲爱的开发者小伙伴们亲自实践一把,再为你身边的物品建个模~

    >>访问华为3D建模服务官网,了解更多相关内容
    >>获取华为3D建模开发指导文档
    >>华为HMS Core官方论坛
    >>华为3D建模开源仓库地址:GitHubGitee
    >>解决集成问题请到Stack Overflow

    点击右上角头像右方的关注,第一时间了解HMS Core最新技术~

    展开全文
  • 使用JS创建3D模型。 gltf-builder提供了一种以以编程方式构造3D资源的。 它旨在通过让您逐个构建模型而不必担心glTF文件格式本身的结构,从而使过程生成更容易。 安装 npm install gltf-builder 入门 gltf-builder...
  • 计算机图形学的实验,这里提供模型代码,若有修改可以在代码中截取。
  • 一款把2维图片们转为3D模型的软件,开源,十分好用。
  • soildworks2014画3d模型,导出.xml文件,运行matlab2016执行指令(smimport(xx.xml)),打开后点击simulation下的updata diagram即可看到3D模型
  • 如何将3D模型导入VS

    2012-03-08 11:18:03
    介绍了将3d模型转换为xaml文件的方法!
  • 个人整理的一些关于接插件PCB封装对应的3D模型,全部都是STEP格式的,可以直接加载到allegro PCB中使用,
  • 主要用MATLAB直接建立了一个三维的圆柱体模型结构,用于图像处理的仿真
  • 用Solidworks建立元件的3D模型

    千次阅读 2020-08-24 00:04:12
    模型建立对象:立创EDA元件3D模型建立 二、绘制步骤 2.1、Solidworks绘制3D模型 根据实际的尺寸(datasheet有描述),绘制相应的模型,此处演示如下: 模型文件需要另存为*.wrl格式,在另存为中选择 2.2...

    一、环境准备:

    OS:Windows-10

    Software:Solidworks-2016(版本不限制)、Google Chrome浏览器

    模型建立对象:立创EDA元件3D模型建立

    二、绘制步骤

    2.1、Solidworks绘制3D模型

    根据实际的尺寸(datasheet有描述),绘制相应的模型,此处演示如下:

    模型文件需要另存为*.wrl格式,在另存为中选择

    2.2、在立创EDA中新建模型

    2.3、引用元件,并导出3D模型

    注意:保存为*.wrl文件后,Solidworks打开wrl文件将不会用3D形式显示模型。

    展开全文
  • 使用Altium Designer软件如何导入3D模型 方法三 —— 自己用Altium Designer软件建立简单的模型 使用Altium Designer软件导入3D模型已经进入最后一种方法了,这个方法是可以使用Altium Designer软件建设简单的模型。...

    使用Altium Designer软件如何导入3D模型 方法三 —— 自己用Altium Designer软件建立简单的模型

    使用Altium Designer软件导入3D模型已经进入最后一种方法了,这个方法是可以使用Altium Designer软件建设简单的模型。

    一、用Altium Designer软件建立简单的模型

    如图所示,我们需要建立以下LED规格书中的3D封装,开始建立我们自己的3D封装。在这里插入图片描述
    1.1、 常规操作,打开Altium Designer软件中的封装库文件,选中需要添加3D封装的元器件,点击Place 》3D Body ( 快捷键 P-B ),进入3D Body [mm] 对话框在这里插入图片描述
    1.2、 按如图先选择 圆柱体Cylinder ,然后根据规格书中半径Radius改为0.8mm高度Height改为1.1mm,点击Load from file ,进入Choose Model对话框在这里插入图片描述
    1.3、 放入合适位置后,按如图所示选择调整栅格,或者快捷键Ctrl+Shift+G在这里插入图片描述
    1.4、 点击Place 》3D Body ( 快捷键 P-B ),进入3D Body [mm] 对话框,进行正方体的设计,按如图选择挤压Extruded全部高度Overall Height改为0.3mm大小Size改为1.6mm和3.2mm,点击OK在这里插入图片描述
    1.5、 放入合适的位置后,看一下3D效果,这只是大概的3D模型,不可能像专业软件一样这么接近实物,对于结构干涉确认确实绰绰有余;在这里插入图片描述
    1.6、 常规操作又来了,选中已更新好的封装,右击选中Update PCB With LED_S_1206,进入Component(s)Update Options对话框在这里插入图片描述
    1.7、 点击OK在这里插入图片描述
    1.8、 PCB文件中的3D封装已经更新完成,如图所示。在这里插入图片描述
    总结:
    至此使用Altium Designer软件导入3D模型的三种方法已经讲述完毕,感谢各位的阅读。

    展开全文
  • 用SolidWorks绘制电子元件的3D模型,适用于Altium Designer 及PADS等。 用SolidWorks绘制电子元件的3D模型,适用于Altium Designer 及PADS等。
  • 初学3d编程,窗口中旋转3d模型,模型转的时候会留下贴图痕迹,感觉画面似乎没有及时更新,请高手指教,我用的是C++2010
  • Flutter的3D模型查看器 这是一个小部件,用于以和格式渲染交互式3D模型。 该小部件将Google的网络组件嵌入到。 屏幕截图 先决条件 2.8+和 1.17+ 兼容性 Android和iOS,以及。 安装 pubspec.yaml dependencies : ...
  • 最近遇到一个难题,老板让我做一个3D模型地球仪,并且要有点击事件, 现在地球仪可以旋转,可以缩放,可以获取旋转的角度,就是不知道怎么获取不同区域的 点击事件,求各路大神指点,已经一个星期没有进展了.
  • OpenGL学习之第一个3D模型demo

    千次阅读 2018-03-14 17:16:06
    //创建模型矩阵 GLuint gl_model = glGetUniformLocation(shader.m_program, "model" ); for (GLuint i = 0 ; i 10 ; i++) { glm::mat4 model; model = glm::translate(model, cubePositions[ 0 ]); ...

    直接上代码

    1.main.cpp

    //
    //  main.cpp
    //  GL_First3Ddemo
    //
    //
    
    #include <iostream>
    
    #include <GL/glew.h>
    #include <GLFW/glfw3.h>
    
    #include <glm/glm.hpp>
    #include <glm/gtc/type_ptr.hpp>
    #include <glm/gtc/matrix_transform.hpp>
    
    #include "ShaderAdmin.hpp"
    #include "TextureAdmin.hpp"
    
    #define WIDTH 800
    #define HEIGHT 600
    #define TITLE "OpenGL"
    
    using namespace std;
    
    GLuint VAO,VBO,EBO;
    void initGLForOSX();
    void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode);
    void renderRectangle();
    
    int main(int argc, const char * argv[])
    {
    
        initGLForOSX();
        GLFWwindow *window = glfwCreateWindow(WIDTH,HEIGHT,TITLE, nullptr, nullptr);
        if (!window)
        {
            cout << "创建视窗失败" << endl;
            glfwTerminate();
            return -1;
        }
        glfwMakeContextCurrent(window);
        glfwSetKeyCallback(window, key_callback);
    
        glewExperimental = GL_TRUE;
        if (glewInit() != GLEW_OK)
        {
            printf("Failed to initialize GLEW!\n");
            return -1;
        }
    
        int width , height;
        glfwGetFramebufferSize(window, &width, &height);
        glViewport(0, 0, width, height);
        //开启深度测试
        glEnable(GL_DEPTH_TEST);
    
    
        //创建shader
        ShaderAdmin shader("Shaders/vShader.vsh","Shaders/fShader.fsh");
    
        renderRectangle();
    
        TextureAdmin texture("Image/container.jpg");
        TextureAdmin texture2("Image/awesomeface.png");
    
        glm::vec3 cubePositions[] = {
            glm::vec3( 0.0f,  0.0f,  0.0f),
            glm::vec3( 2.0f,  5.0f, -15.0f),
            glm::vec3(-1.5f, -2.2f, -2.5f),
            glm::vec3(-3.8f, -2.0f, -12.3f),
            glm::vec3( 2.4f, -0.4f, -3.5f),
            glm::vec3(-1.7f,  3.0f, -7.5f),
            glm::vec3( 1.3f, -2.0f, -2.5f),
            glm::vec3( 1.5f,  2.0f, -2.5f),
            glm::vec3( 1.5f,  0.2f, -1.5f),
            glm::vec3(-1.3f,  1.0f, -1.5f)
        };
    
        while (!glfwWindowShouldClose(window))
        {
            glfwPollEvents();
            glClearColor(0.2, 0.3, 0.3, 1.0);
            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
            //激活纹理单元
            glActiveTexture(GL_TEXTURE0);
            texture.BindTexture();
            glUniform1i(glGetUniformLocation(shader.m_program,"ourTexture"),0);
    
            glActiveTexture(GL_TEXTURE1);
            texture2.BindTexture();
            glUniform1i(glGetUniformLocation(shader.m_program,"ourTexture2"),1);
            //使用用着色器渲染
            shader.Use();
    
            //创建观察矩阵
            glm::mat4 view;
            view = glm::translate(view, glm::vec3(0.0f,0.0f,-3.0f));
            GLuint gl_view = glGetUniformLocation(shader.m_program,"view");
            glUniformMatrix4fv(gl_view,1,GL_FALSE,glm::value_ptr(view));
            //定义投影矩阵
            glm::mat4 projection;
            projection = glm::perspective(45.0f, (GLfloat)WIDTH/(GLfloat)HEIGHT, 0.1f, 100.0f);
            GLuint gl_projection = glGetUniformLocation(shader.m_program,"projection");
            glUniformMatrix4fv(gl_projection,1,GL_FALSE,glm::value_ptr(projection));
    
            glBindVertexArray(VAO);
            //创建模型矩阵
            GLuint gl_model = glGetUniformLocation(shader.m_program,"model");
            for(GLuint i = 0; i < 10; i++)
            {
                glm::mat4 model;
                model = glm::translate(model, cubePositions[0]);
                GLfloat angle = 20.0f * i;
    //        GLfloat angle = (GLfloat)glfwGetTime();
                model = glm::rotate(model, glm::radians(angle), glm::vec3(1.0f, 0.3f, 0.5f));
                glUniformMatrix4fv(gl_model, 1, GL_FALSE, glm::value_ptr(model));
    
                glDrawArrays(GL_TRIANGLES, 0, 36);
            }
            glBindVertexArray(0);
            glfwSwapBuffers(window);
        }
    
        return 0;
    }
    void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode)
    {
        if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
        {
            glfwSetWindowShouldClose(window, GL_TRUE);
        }
    }
    
    void initGLForOSX()
    {
        glfwInit();
        glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
        glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
        glfwWindowHint(GLFW_OPENGL_PROFILE,GLFW_OPENGL_CORE_PROFILE);
        glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
        glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT,GL_TRUE);
    }
    void renderRectangle()
    {
        GLfloat vertices[] = {
            -0.5f, -0.5f, -0.5f,  0.0f, 0.0f,
            0.5f, -0.5f, -0.5f,  1.0f, 0.0f,
            0.5f,  0.5f, -0.5f,  1.0f, 1.0f,
            0.5f,  0.5f, -0.5f,  1.0f, 1.0f,
            -0.5f,  0.5f, -0.5f,  0.0f, 1.0f,
            -0.5f, -0.5f, -0.5f,  0.0f, 0.0f,
    
            -0.5f, -0.5f,  0.5f,  0.0f, 0.0f,
            0.5f, -0.5f,  0.5f,  1.0f, 0.0f,
            0.5f,  0.5f,  0.5f,  1.0f, 1.0f,
            0.5f,  0.5f,  0.5f,  1.0f, 1.0f,
            -0.5f,  0.5f,  0.5f,  0.0f, 1.0f,
            -0.5f, -0.5f,  0.5f,  0.0f, 0.0f,
    
            -0.5f,  0.5f,  0.5f,  1.0f, 0.0f,
            -0.5f,  0.5f, -0.5f,  1.0f, 1.0f,
            -0.5f, -0.5f, -0.5f,  0.0f, 1.0f,
            -0.5f, -0.5f, -0.5f,  0.0f, 1.0f,
            -0.5f, -0.5f,  0.5f,  0.0f, 0.0f,
            -0.5f,  0.5f,  0.5f,  1.0f, 0.0f,
    
            0.5f,  0.5f,  0.5f,  1.0f, 0.0f,
            0.5f,  0.5f, -0.5f,  1.0f, 1.0f,
            0.5f, -0.5f, -0.5f,  0.0f, 1.0f,
            0.5f, -0.5f, -0.5f,  0.0f, 1.0f,
            0.5f, -0.5f,  0.5f,  0.0f, 0.0f,
            0.5f,  0.5f,  0.5f,  1.0f, 0.0f,
    
            -0.5f, -0.5f, -0.5f,  0.0f, 1.0f,
            0.5f, -0.5f, -0.5f,  1.0f, 1.0f,
            0.5f, -0.5f,  0.5f,  1.0f, 0.0f,
            0.5f, -0.5f,  0.5f,  1.0f, 0.0f,
            -0.5f, -0.5f,  0.5f,  0.0f, 0.0f,
            -0.5f, -0.5f, -0.5f,  0.0f, 1.0f,
    
            -0.5f,  0.5f, -0.5f,  0.0f, 1.0f,
            0.5f,  0.5f, -0.5f,  1.0f, 1.0f,
            0.5f,  0.5f,  0.5f,  1.0f, 0.0f,
            0.5f,  0.5f,  0.5f,  1.0f, 0.0f,
            -0.5f,  0.5f,  0.5f,  0.0f, 0.0f,
            -0.5f,  0.5f, -0.5f,  0.0f, 1.0f
        };
    
        glGenVertexArrays(1,&VAO);
        glGenBuffers(1,&VBO);
    
        glBindVertexArray(VAO);
    
        glBindBuffer(GL_ARRAY_BUFFER,VBO);
        glBufferData(GL_ARRAY_BUFFER,sizeof(vertices),vertices,GL_STATIC_DRAW);
        //位置属性
        glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,5 * sizeof(GLfloat),(GLvoid *)0);
        glEnableVertexAttribArray(0);
    
        //纹理坐标
        glVertexAttribPointer(2,2,GL_FLOAT,GL_FALSE,5 * sizeof(GLfloat),(GLvoid *)(3*sizeof(GLfloat)));
        glEnableVertexAttribArray(2);
    
        glBindBuffer(GL_ARRAY_BUFFER,0);
        glBindVertexArray(0);
    
    }

    这里写图片描述
    工程文件

    展开全文
  • 为了弥补FLAC3D针对复杂工况及在特殊结构有限元模型建立过程中存在的不足,探究前处理功能强大的MIDAS GTS NX软件与FLAC3D软件耦合建模新方法。采用Visual Basic语言编写了MIDAS GTS NX到FLAC3D模型转换接口程序,对...
  • 比较有名的国外的商业软件的如smart3D,photoscan,街景工厂等都能根据有一定重叠度的图像重建出三维模型。 发布于 2016-10-31   0​添加评论 ​分享 ​收藏​感谢 ​ ...
  • 使用Altium Designer软件如何导入3D模型方法一 —— 结构工程师建模,我们导入封装库中 我们设计电路图除了布线和功能的实现外,还需要让结构工程师确认元器件是否干涉,特别是接口部分,所以我们的元器件封装需要有...
  • 普通相机环绕带有BCH码标识的目标物体拍摄大量图片也是可以构建3D模型的 本文探讨基于深度相机拍摄的图片 准备工作 1.深度相机,并标定其内参和畸变 2.BCH码图片(我的博客里面有图片可以下载) 3.你的目标物体(注意...
  • 正方体室内展厅3D模型适用于展位模型设计
  • 从多张图片重建3D模型(瞎七瞎八写了好多)

    万次阅读 多人点赞 2017-10-23 14:28:15
    1.2 SFM:对多张图片像素做匹配对应,通过上步得到的特征,从而估计相机参数,得到稀疏的3D信息 1.3 CMVS/PMVS:根据上步得到的相机参数,做稠密重建,得到点云 1.4 对上步的点云做后处理,得到网格,去除噪声点等。...
  • FC插座、电解电容、电感、电位器、蜂鸣器等电子元件的3D模型,我使用的是sw2011,可用于电路板3D效果仿真,也可用于solidworks2011的入门学习
  • // 将经纬度坐标转换为三维空间坐标 var position = Cesium.Cartesian3.fromDegrees(109.740, 19.997, 0.0);... //模型所在位置 position: position, //加载铯平面模型以表示实体 model: { ...
  • 初始Unity 3D——基本模型的创建

    千次阅读 2016-11-18 00:30:52
    如何在场景创建简单的模型: 常用快捷键: Q:抓手工具 W:位移工具 E:旋转工具 R:缩放工具(改变模型长宽高) T:不知道叫啥,应该是综合性工具Ctrl+N:新建场景 Ctrl+S:保存场景 F:聚焦模型,前提是...
  • 建立黑白蔚图的3D模型,请在chrome浏览器中打开
  • 3D模型建模标准

    千次阅读 2019-08-07 09:32:00
    3D模型建模规范 本文提到的所有数字模型制作,全部是用3D MAX建立的模型,即使是不同的驱动引擎,对模型的要求基本是相同的。当一个VR模型制作完成时,它所包含的基本内容包括:场景尺寸、单位,模型归类塌 陷、命名...
  • 应用MATLAB接口程序建立复杂地质体FLAC3D模型
  • 最近研究魔方的玩法,就突然想用HMTL5写一个魔方的模型,由于魔方是一个3D的立方体,这次就试着用HTML5写了一个简单的3D模型。下面是测试链接和预览画面。首先你需要下载html5开源库件lufylegend-1.4.0魔方分为6个面...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 49,768
精华内容 19,907
关键字:

怎么建立3d模型