在程序中加载解析3DS文件,显示三维模型(c# MDX),

C#解析DirectX .x文件:从二进制格式到GPU渲染的完整实践 3D模型文件格式是图形应用开发的基础,其本质是存储顶点、索引、材质等数据的结构化容器。以经典的DirectX .x文件为例,它采用基于模板的分块结构,通过解析其二进制格式,开发者可以深入理解顶点缓冲区、索引缓冲区的构建原理。掌握这一流程不仅有助于处理遗留资产,更能提升对现代图形API数据交互机制的认识。在C#生态中,通过SharpDX结合AssimpNet库进行解析,可以绕过Managed DirectX的兼容性限制,实现高效、可控的数据提取与GPU上传。本文聚焦缠绕顺序处理、材质关联等关键细节,为处理工业 阅读详情
在程序中加载解析3DS文件,显示三维模型(c# MDX),

把3ds转化为x文件后有很多问题(试了好多转换工具都不行,如果你有好工具别忘了告诉我),因此决心直接解析3DS文件然后用mesh显示。

解析3DS文件网上有好多代码,但我就只找到一个是C#写的,C#的太多资源仍然稀缺啊
http://www.nabble.com/3DS-File-loader-t1663534.html

它是用OpenGL显示的,我还得把它移植到MDX上来。
(C++写的解析显示3DS的代码,目前我只找到了几个opengl的,没找到directx的,如果你知道不要忘了告诉我啊)
还有许多细节上的问题…………

全部的源代码:http://bbs.gameres.com/showthread.asp?page=end&threadid=83967

代码仅Form1.cs是我写的,其他的是来自(http://www.nabble.com/3DS-File-loader-t1663534.html),仅有少许修改。

 

当前的显示还有一些问题,有一些三角形显示不出来,又有一些三角形是多余的,可是我的顶点和索引解析不会有问题呀,郁闷,期待大家一起帮忙完善。


Form1.cs

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;

namespace ThreeD
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
        private Device device = null;
        private Mesh mesh = null;
        private Material[] meshMaterials;
        private Texture[] meshTextures;

/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
        private float angle = 0.0f;

public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();

            this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true);
}

        /// <summary>
        /// We will initialize our graphics device here
        /// </summary>
        public void InitializeGraphics()
        {
            // Set our presentation parameters
            PresentParameters presentParams = new PresentParameters();

            presentParams.Windowed = true;
            presentParams.SwapEffect = SwapEffect.Discard;
            presentParams.AutoDepthStencilFormat = DepthFormat.D16;
            presentParams.EnableAutoDepthStencil = true;

            // Create our device
            device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);

            // Load our mesh
            //LoadMesh(@"../../tiny.x");
            //LoadD3S(@"E:/myprog/MeshFile/tpot.3ds");
            LoadD3S(@"E:/myprog/box.3ds");
        }

        private void LoadMesh(string file)
        {
            ExtendedMaterial[] mtrl;

            // Load our mesh
            mesh = Mesh.FromFile(file, MeshFlags.Managed, device, out mtrl);

         

使用C/C++加载和显示3DS模型文件的OpenGL实现 请注意,这只是一个简化的示例,并没有包含完整的3DS文件解析和渲染过程。实际上,解析3DS文件并提取顶点数据是一个相当复杂的任务,涉及到解析块的结构、读取顶点坐标、法线和纹理坐标等信息。如果你需要完整的3DS文件加载和渲染功能,建议使用现有的第三方库,如lib3ds或Assimp。然后,我们可以按照3DS文件的格式读取文件内容,并提取顶点数据。在这里,我们将使用自己编写的代码来加载3DS文件。在本文中,我们将探讨如何使用C/C++编写代码,以加载和显示3DS模型文件(3DS格式)。,以及绘制模型的函数。 阅读详情

相关推荐

基于C#实现的三维显示

本程序可以实现三维的显示,放大,缩小,翻转等操作,并且还可自行添加贴图,只需将其中的图片路径修改一下。

3DS文件结构解析及程序

3DS文件结构解析及程序,对3DS文件结构做了详细的描述,并有示例代码(C++)

Exchange 2013/2016/2019修改附件大小限制

Exchange 2013/2016/2019邮件大小限制 可以在三个位置上配置Exchange上的默认邮件大小限制: 组织传输设置 发送/接收连接器设置 用户邮箱设置 1.打开Exchange Management Shell 使用命令查看默认限制 get-transportconfig | ft maxsendsize, maxreceivesize get-receiveconnector | ft name, maxmessagesize get-sendconnector | ft

高级基础架构专家-Hunter 6098

泛微Ecology9接口调用全流程:从配置到实战Java代码解析

本文详细解析了泛微Ecology9系统接口的完整调用流程,涵盖安全架构、服务端配置与客户端Java实战代码。重点阐述了基于RSA加密的认证机制、Token管理策略,并提供了企业级集成的核心代码示例与生产环境调优建议,帮助开发者安全、高效地实现系统对接。

m9n0o的博客 836

中国IP发展之面面观

谢学军/邱善勤2006-1-25 9:29:28电子经理世界       IP远没有我们当初想象的那么简单   当SoC设计方法学刚刚传到国内的时候,学界为之欢呼雀跃,由于IP/SoC设计技术的使用,可以将发达国家用几年甚至十几年积累起来的设计技术直接为我所用,使中国的集成电路跳过漫长的积累阶段,迅速站到较高的起点上。因此在当时看来,IP/SoC设计技术是我国提升设计水平、发展

klxdmm305的专栏 1188

RK3576平台部署NanoTrack:边缘AI视觉跟踪实战指南

边缘AI部署是将深度学习模型在资源受限的嵌入式设备上高效运行的关键技术,其核心在于模型压缩、硬件适配与软件栈优化。通过INT8量化、算子融合与内存优化等原理,能显著降低模型计算量与内存占用,从而在嵌入式NPU上实现实时推理。这项技术的价值在于为安防监控、无人机视觉、工业检测等场景提供低功耗、高响应的智能感知能力。以瑞芯微RK3576平台部署轻量级视觉跟踪模型NanoTrack为例,其过程涉及模型结构分析、RKNN工具链转换、C++推理程序开发及多线程性能优化,完整展现了从算法到产品的工程化路径,为开发者提供

weixin_31887307的博客 426

14、微电网控制方法与建模分析

本文详细探讨了微电网的控制方法与建模分析,包括逆变器的小信号状态空间模型、网络模型、负载模型及其组合形成的完整微电网模型。通过对系统特征值和灵敏度因子的分析,揭示了不同模式与系统参数之间的关系。文章还提出了多个研究问题,如岛式系统控制器设计、风力发电控制、并网变换器控制等,为微电网的稳定性分析和优化控制提供了理论支持和实践方向。

elastic6hunter的博客 123

从 SAP Gateway 旧 add-ons 卸载到 SAP S/4HANA 转换的清理路线

摘要: SAP Gateway系统的维护难点往往源于历史遗留组件的堆积,而非OData服务本身的复杂性。早期系统为支持多种服务类型而安装的各类add-ons(如IW_SCS、IW_CNT、GW_CORE等),随着系统升级和团队更替逐渐成为技术负债。自SAP NetWeaver 7.40起,核心功能已整合至SAP_GWFND组件,使架构显著简化。在向S/4HANA迁移时,需重点清理已废弃的add-ons(如IW_SCS、IW_GIL等),但必须谨慎验证其关联服务是否仍被调用。组件清理需结合系统日志和调用链分析

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 423

使用 WSL 在 Windows 上安装 Linux

开发人员可以在 Windows 计算机上同时访问 Windows 和 Linux 的强大功能。通过适用于 Linux 的 Windows 子系统 (WSL),开发人员可以安装 Linux 发行版(例如 Ubuntu、OpenSUSE、Kali、Debian、Arch Linux 等),并直接在 Windows 上使用 Linux 应用程序、实用程序和 Bash 命令行工具,不用进行任何修改,也无需承担传统虚拟机或双启动设置的费用。

隔壁老瓦的专栏 2872

智能手表PCB布局:PPG与IMU传感器噪声隔离与应力解耦设计

在可穿戴设备硬件开发中,PCB布局已超越传统布线范畴,成为决定信号完整性、电磁兼容性与机械可靠性的核心环节。心率传感器(PPG)依赖微伏级光电容积脉搏波信号,极易受数字开关噪声与电源纹波干扰;姿态传感器(IMU)则对PCB弯曲形变引发的机械应力高度敏感。其布局需融合电磁场建模、热-力-电多物理协同及高密度互连约束。关键技术价值体现在噪声路径切断、地弹抑制、应力方向解耦与电源域隔离等工程实践。典型应用场景涵盖智能手表、医疗级贴片设备及微型运动传感终端。本文聚焦PPG与IMU两大模组在STM32L4平台上的实操

weixin_32869687的博客 173

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

上一篇: 在Emacs下用C/C++编程
下一篇: File Management in Python
skyremember
博客等级 码龄20年 204粉丝 484原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值