C#创建obj三维模型文件

2024-04-30 18:04

本文主要是介绍C#创建obj三维模型文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

介绍

使用开源库创建obj三维模型文件。
开源库地址:https://github.com/JeremyAnsel/JeremyAnsel.Media.WavefrontObj

相关API地址:https://jeremyansel.github.io/JeremyAnsel.Media.WavefrontObj/api/JeremyAnsel.Media.WavefrontObj.ObjFile.html

obj格式解读:https://blog.csdn.net/shebao3333/article/details/132094257

示例

效果图(灰色为外,红色为内):
在这里插入图片描述

测试代码:

            //面片1var face1Pts = new float[][]{new float[]{0,0,0},new float[]{0,1,0},new float[]{1,1,0},new float[]{1,0,0},};//面片2var face2Pts = new float[][]{new float[]{0,0,0},new float[]{1,0,0},new float[]{1,0,0.5f},new float[]{0,0,0.5f},};//面片3var face3Pts = new float[][]{new float[]{0,1,0},new float[]{0,1,0.5f},new float[]{1,1,0.5f},new float[]{1,1,0},};var obj = new ObjFile();//用组表示对象//第一个组有两个面var group1 = new ObjGroup("group1");obj.Groups.Add(group1);//添加点foreach (var pt in face1Pts){obj.Vertices.Add(new ObjVertex(pt[0], pt[1], pt[2]));}//添加面var face = new ObjFace();//根据右手定则确定面片的正面(外面)face.Vertices.Add(new ObjTriplet(1, 0, 0));face.Vertices.Add(new ObjTriplet(2, 0, 0));face.Vertices.Add(new ObjTriplet(3, 0, 0));face.Vertices.Add(new ObjTriplet(4, 0, 0));face.ObjectName = "group1-face1";face.MapName = "group1-face1";face.MaterialName = "Wall";//面片添加到组里,也需要添加到obj的Faces集合中group1.Faces.Add(face);obj.Faces.Add(face);//第一个组的第二个面foreach (var pt in face2Pts){obj.Vertices.Add(new ObjVertex(pt[0], pt[1], pt[2]));}var face2 = new ObjFace();face2.Vertices.Add(new ObjTriplet(5, 0, 0));face2.Vertices.Add(new ObjTriplet(6, 0, 0));face2.Vertices.Add(new ObjTriplet(7, 0, 0));face2.Vertices.Add(new ObjTriplet(8, 0, 0));face2.ObjectName = "group1-face2";face2.MapName = "group1-face2";face2.MaterialName = "Column";group1.Faces.Add(face2);obj.Faces.Add(face2);//创建第二个对象,第二个对象有一个面var group2 = new ObjGroup("group2");obj.Groups.Add(group2);foreach (var pt in face3Pts){obj.Vertices.Add(new ObjVertex(pt[0], pt[1], pt[2]));}var face3 = new ObjFace();face3.Vertices.Add(new ObjTriplet(9, 0, 0));face3.Vertices.Add(new ObjTriplet(10, 0, 0));face3.Vertices.Add(new ObjTriplet(11, 0, 0));face3.Vertices.Add(new ObjTriplet(12, 0, 0));face3.ObjectName = "group2-face1";face3.MapName = "group2-face1";face3.MaterialName = "Window";group2.Faces.Add(face3);obj.Faces.Add(face3);//其他参数//face.LevelOfDetail = 2;//face.MapName = "c";//face.MaterialName = "d";//face.SmoothingGroupNumber = 10;//face.IsBevelInterpolationEnabled = true;//face.IsColorInterpolationEnabled = true;//face.IsDissolveInterpolationEnabled = true;obj.WriteTo("./Tmp.obj");

生成的obj文件内容:

v 0.000000 0.000000 0.000000
v 0.000000 1.000000 0.000000
v 1.000000 1.000000 0.000000
v 1.000000 0.000000 0.000000
v 0.000000 0.000000 0.000000
v 1.000000 0.000000 0.000000
v 1.000000 0.000000 0.500000
v 0.000000 0.000000 0.500000
v 0.000000 1.000000 0.000000
v 0.000000 1.000000 0.500000
v 1.000000 1.000000 0.500000
v 1.000000 1.000000 0.000000
g group1
o group1-face1
usemap group1-face1
usemtl Wall
f 1 2 3 4
o group1-face2
usemap group1-face2
usemtl Column
f 5 6 7 8
g group2
o group2-face1
usemap group2-face1
usemtl Window
f 9 10 11 12

补充:

  • 根据右手定则确定面片的正面(外面)
  • ObjectName、MapName、MaterialName的赋值可以注释跳过。

这篇关于C#创建obj三维模型文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/949543

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

hdu1240、hdu1253(三维搜索题)

1、从后往前输入,(x,y,z); 2、从下往上输入,(y , z, x); 3、从左往右输入,(z,x,y); hdu1240代码如下: #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#inc

hdu4826(三维DP)

这是一个百度之星的资格赛第四题 题目链接:http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1004&cid=500 题意:从左上角的点到右上角的点,每个点只能走一遍,走的方向有三个:向上,向下,向右,求最大值。 咋一看像搜索题,先暴搜,TLE,然后剪枝,还是TLE.然后我就改方法,用DP来做,这题和普通dp相比,多个个向上

2. c#从不同cs的文件调用函数

1.文件目录如下: 2. Program.cs文件的主函数如下 using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using System.Windows.Forms;namespace datasAnalysis{internal static

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验