如何用C#构建三维空间

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用C#构建三维空间相关的知识,希望对你有一定的参考价值。

想要实现接受来自串口的坐标数据控制小球在三维空间里移动。这个该怎么用C#实现呢?该查阅哪些资料呢?求大神指点。

参考技术A 不知道你想问什么,是怎么显示小球在三维空间里移动还是怎么用c#获取串口数据?这两个问题都很好解决,显示的话可以看图形学的东西,用c#,就看Direct3D编程,至于读数据,可以看c#写非托管代码,或者是用c#调用c的资料追问

小球的实时坐标信息会不断由串口输入,目标是接收这些数据并依此控制三维空间里的小球移动~ 这个该怎么实现呢? 需要用unity3d吗?谢谢咧~

追答

Unity3D是一款不错的游戏引擎,可以用来做3D显示,比较易用,导入小球的模型后就可以通过C#控制小球的运动,那么此时C#就需要不停得从串口读入数据,确实是可以这样做的

本回答被提问者采纳
参考技术B 只是上面简短说明的话
你需要学习串口通信和3D场景绘制

串口通信直接用System.IO.Ports命名空间即可
3D绘制需要掌握一种绘图技术 比如xna(monogame) 或mdx(slimdx sharpdx)
参考技术C 用unity3d引擎做吧,使用C#写控制脚本

如何用C#动态编译

大家都知道,在ASP.NET中利用CodeBehind技术编写好的文件必须先通过编译,然后才能被执行。我们一般是在VS.NET中或者命令行下进行编译,那么现在的问题就是在程序中进行编译,也就是自己通过做好的规则动态生成一些程序源文件、然后对其进行编译。查看.Net Framework中提供的类库,发现了Microsoft.Csharp这个命名空间,其中有一个类Compiler。要调用这个类库必须先在引用中添加D:/WINNT/Microsoft.NET/Framework/v1.0.3705/cscompmgd.dll这个文件,这是我机器上的路径,各位根据自己机器所在路径设置吧。

 

仔细研究Compiler这个类:不需要初始化,直接可使用Compile方法,其中包含了5个参数。

string[] sourceTexts 源代码数组 其中每一个值包含一个文件中的源码

string[] sourceTextNames 源文件名数组 其中每一个值包含了一个文件名和上面的源代码数组中的值一一对应。

string target 输出的文件名

string[] imports 引用类库数组 也就是我们在VS.net中引用的那些类库的文件路径,一般都是dll文件,其中一个值表示一个引用文件。

IDictionary options 参数设置,实际上这也是一个数组,可以包含多个参数,具体的参数我在下面的部分会讲到。

 

实际这个Compile这个方法要求我们输入这些条件:

1、源代码——这个是必须的,没有源代码没法编译,那么源代码要求我们从程序文件中读取出来。

2、源文件的名称,和读取出的源代码一一对应。

3、编译输出的文件名,也可不填

4、引用的类库文件,如System.dll,System.data.dll这些都是经常会用到的。

5、其他参数设置

 

第一步:创建一个类及调用方法

首先我们创建一个Class

using System;

using System.IO;

using System.Text;

using Microsoft.CSharp;

 

namespace MyTest

{
private String[] filelist; //文件列表

private String[] cscode; //源代码

private String[] filename; //文件名

private String[] import; //引用类库

public class MyComplier()

{
 

//这里我做了一个简单的方法,要求用户输入两个参数,一个是文件夹的绝对路径

另外一个是输出的文件路径

public CompilerError[] MyCompile(String realpath,String output)

{
//……………………

}

 

}

}

那么下面我们会一步步来讲解如何实现这个方法。

 

第二步:读取程序文件列表

 

由于使用CodeBehind,那么实际上要编译的也就是扩展名为CS的文件。首先读取文件列表,制作一个方法用来读取目录下的文件路径:通过用户输入的绝对路径对文件进行整理搜索。

 

public String[] GetFileList(String realpath)//输入绝对路径

{
return System.IO.Directory.GetFiles(realpath,”*.cs”);//输入搜索条件

}

 

本方法将要编译的真实目录传递进入,然后返回目录下扩展名为CS的文件路径列表。那么读取文件的列表将会为文件中代码的获取及文件名的获取做准备。

 

第三步:读取程序文件内容

//这里我们调用了第二步建立的方法来获取文件列表

filelist= GetFileList(realpath); //获取文件路径列表

//根据文件的数量创建数组

cscode=new String[filelist.Length]; //建立源代码数组

String[] filename=new String[filelist.Length];//建立源文件名数组

//通过循环获取每个文件的信息每增加到对应的数组中

For (int I=0;I< p>

{
String filepath= filelist. GetValue(i).ToString();//获取单个文件路径

cscode[I]= ReadTxtFile(filepath, Encoding.GetEncoding("GB2312"));//读取源文件中的代码、这里的编码为GB2312,也可设置为其他,这里调用的是我们下面创建的一个方法

filename[I]= System.IO.Path.GetFileName(filepath);//获取文件名

}

 

//读取文本文件内容

public String ReadTxtFile(String path,Encoding encode)

{
String str="";

try

{
if (File.Exists(path))

{
StreamReader sr=new StreamReader(path,encode);

str=sr.ReadToEnd();

sr.Close();

}

}

catch(IOException ex)

{Console.Write(ex.ToString());}

return str;

}

经过第二步之后我们已经满足了Compile方法所需的两个参数了,那么接下来将是对文件的输出及引用的一些配置。

 

第四步:配置输出文件名及路径

此处可根据你的需要,设置文件和路径,例如:E:/test/bin/test.dll String output=” E://test//bin//test.dll”;

以上是关于如何用C#构建三维空间的主要内容,如果未能解决你的问题,请参考以下文章

如何用 QHash 创建三维数组?

请问如何用matlab画三维点,已知x,y,z的坐标,在三维坐标系上显示

如何用matlab绘制三维地形图

教你如何用Three.js创造一个三维太阳系

如何用origin画如图所示的三维曲线?

如何用matlab读取三维点云数据,麻烦大神能写出具体的代码