Welcome![Sign In][Sign Up]
Location:
Search - d3d mesh

Search list

[Other resourced3d_mesh

Description: d3d游戏开发中使用.x的例子,如果您是一位d3d的初学者,则其在您的mesh动画方面一定有所参考价值.-D3D game developers use. X example, if you are a D3D beginners then in your mesh animation must have reference value.
Platform: | Size: 238561 | Author: weiguian2 | Hits:

[Other resourcedirectx93d

Description: D3D学习文档 第一部分 必备的数学知识 第二部分 Direct3D基础 第二章 渲染管线 第三章 在Direct3D中绘制 第四章 色彩 第五章 灯光 第六章 纹理 第七章 混合 第八章 模版 第九章 字体 第十章 网格模型I 第十一章 网格模型II 第十二章 创建灵活的摄像机类 第十三章 地形渲染基础 第十四章 粒子系统 第十五章 选取 第十六章 高级着色器语言入门 第十七章 顶点着色器入门 第十八章 像素着色器入门 第十九章 效果架构-Display study documents the first part of the necessary mathematical knowledge of Direct3D based on the second chapter outlet with the third chapter in the pipeline Direct3D Drawing fourth chapter V color lighting texture Chapter VI Chapter VII of the 8th Mixed Chapter IX font template Chapter 10 Mesh I Chapter XI Mesh II Chapter 12 to create a flexible camera Category Chapter 13 Terrain Rendering based particle system Chapter 14 Chapter 15 Chapter 16 selected senior shader language portal Chapter 17 Vertex shader introductory chapter 18 pixel shader effects portal framework for chapter 19
Platform: | Size: 4288635 | Author: zhouyinye | Hits:

[Other resourcePhysXTriangleMesh

Description: Ageia s PhysX(著名的游戏物理库) D3D 9使用代码演示。由于PhysX物理库使用OpenGL代码实现图形着色,从而使许多用DirectX 3D的程序员不能使用/读懂demo代码,这是使用D3D着色引擎重新写的一些demo代码。-Triangle Mesh(带执行文件)
Platform: | Size: 239194 | Author: GoldenCloud | Hits:

[Other resourceMeshFromOBJ

Description: 使用D3D从OBJ读取模型,代码由VC写成 读取后通过MESH建模
Platform: | Size: 41879 | Author: xiaohan | Hits:

[Internet-Network用D3D模拟地月系

Description:

 

 

 

  一、建立空窗体

  新建一个工程,添加引用,并导入名称空间。

  加入一个设备对象变量:

private Microsoft.DirectX.Direct3D.Device device = null;

  添加初始化图形函数,并在这里面对设备对象进行实例化:

public void InitializeGraphics()
{
 PresentParameters presentParams = new PresentParameters();
 presentParams.Windowed = true;
 presentParams.SwapEffect = SwapEffect.Flip;
 presentParams.AutoDepthStencilFormat = DepthFormat.D16;
 presentParams.EnableAutoDepthStencil = true;
 device = new Microsoft.DirectX.Direct3D.Device(0, Microsoft.DirectX.Direct3D.DeviceType.Hardware, this,  CreateFlags.HardwareVertexProcessing, presentParams);
}

  当程序执行时,需要绘制场景,代码在这个函数里:

public void Render()

{
 // 清空设备,并准备显示下一帧。
 device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black , 1.0f, 0);
 // 设置照相机的位置
 SetupCamera();
 //开始场景
 device.BeginScene();
 if(meshLoaded)
 {
  mesh.Render(meshLoc);
 }
 device.EndScene();
 //显示设备内容。
 device.Present();
}

  设置照相机的位置:

private void SetupCamera()
{
 device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, this.Width / this.Height, 1.0f, 1000.00f);
 device.Transform.View = Matrix.LookAtLH(new Vector3(0.0f ,0.0f, 20.0f), new Vector3(0.0f,0.0f, 0.0f), new Vector3(0,1,0));
}

  现在改变主函数,调用我们写的初始化函数,并显示场景:

[STAThread]

static void Main()
{
 using (Form1 EarthForm = new Form1())
 {
  EarthForm.InitializeGraphics();
  EarthForm.Show();

  while(EarthForm.Created)
  {
   EarthForm.Render();
   Application.DoEvents();
  }
  EarthForm.Dispose();
}

  运行程序,会显示一个空的窗体。

  二、加入地球:

  在这一步里需创建一个3D网格对象,来作为要显示的地球,为此,在工程中新加入一个类Earth,此类可以包含所创建的网格对象的信息。

  加入一些相关变量,含义见注释:

public class Earth : BaseEarth
{
 private Material[] mMaterials; //保存材质
 private Texture[] mTextures; //保存纹理
 private Matrix locationOffset; //用来保存网格对象的相对位置
 private Mesh mMesh = null; //三角形网格对象
 private Device meshDevice; //需要显示在哪个设备上。
}

  在构造函数中,把Device设备拷贝到私有成员变量,这样就可以在这个类的其它方法内使用它,另外就是把位置变量进行赋值:

public Earth(ref Device device, Matrix location): base(ref device)
{
 meshDevice = device;
 locationOffset = location;
}

  下面这个函数是装入.X文件。

public bool LoadMesh(string meshfile)
{
 ExtendedMaterial[] mtrl;
 try
 {
  // 装载文件
  mMesh = Mesh.FromFile(meshfile, MeshFlags.Managed, meshDevice, out mtrl);
  // 如果有材质的话,装入它们
  if ((mtrl != null) && (mtrl.Length > 0))
  {
   mMaterials = new Material[mtrl.Length];
   mTextures = new Texture[mtrl.Length];

   // 得到材质和纹理

   for (int i = 0; i < mtrl.Length; i++)
   {
    mMaterials[i] = mtrl[i].Material3D;
    if ((mtrl[i].TextureFilename != null) && (mtrl[i].TextureFilename != string.Empty))

 

    {
     //前面得到的纹理的路径是相对路径,需要保存的是绝对路径,通过应用程序路径可以获得
     mTextures[i] = TextureLoader.FromFile(meshDevice, @"..\..\" + mtrl[i].TextureFilename);
    }
   }
  }
  return true;
 }
 catch
 {
  return false;
 }
}

  在这个方法内,使用Mesh.FromFile()这个方法,从给定的文件名中找到.X文件,并装入相关数据,一旦数据格式设置完成,可以从此文件中找到材质和贴图信息,并把它存放在数组中,并通过文件路径,得到纹理文件文件的路径,最后返回真值,如果整个过程出现错误,返回假值。

  下面这个Render()方法,是把此对象,即地球显示在设备对象上,此方法较简单,通过变形操作来得到网格对象的X,Y,Z坐标,接着设置网格对象的材质和纹理,最后,将每个材质和纹理应用到每个网格。

public void Render(Matrix worldTransform)
{
 /把位置变为世界坐标
 meshDevice.Transform.World = Matrix.Multiply(locationOffset, worldTransform);
 //绘制网格
 for (int i = 0; i < mMaterials.Length; i++)
 {
  meshDevice.Material = mMaterials[i];
  meshDevice.SetTexture(0, mTextures[i]);
  mMesh.DrawSubset(i);
 }
}

  现在回到窗体代码中,添加引用网格对象的相关变量:

private Earth mesh = null;
private Matrix meshLoc;
private bool meshLoaded = false;

  在图形初始化函数中,需要对网格对象进行初始化。加入下面的代码:

meshLoc = Matrix.Identity;
meshLoc.M41 = 2.0f;
mesh = new Earth(ref device, meshLoc);
if (mesh.LoadMesh(@"..\..\earth.x"))
{
 meshLoaded = true;
}

  代码第一句把网格对象的位置定为原点,接着偏移X轴2个单位,接下来从文件中得到此.X文件。如果成功设置,meshLoaded置为真。注意,这里有一个.X文件,在源代码中有此文件。

 


  在设置相机的函数中,加入一盏灯光:

device.Lights[0].Type = LightType.Directional;
device.Lights[0].Diffuse = Color.White;
device.Lights[0].Direction = new Vector3(0, -1, -1);
device.Lights[0].Update();
device.Lights[0].Enabled = true;


  此灯光较简单,仅为一个直射型白光灯。

最后,在Render()方法中,调用网格对象的Render()方法,以显示地球。

 

  三、使地球旋转

  前面用一个网格对象来建立地球,但此类没有平移,旋转及缩放等方法,下面就加入这些方法,因为这些方法具有通用性,因此可以新建一个类,把这些方法写在这些类中,使地球对象成为它的派生类。

  在工程中新添加一个类:BaseEarth;

  加入进行平移、旋转、缩放的变量:

 

private float xloc = 0.0f;
private float yloc = 0.0f;
private float zloc = 0.0f;
private float xrot = 0.0f;
private float yrot = 0.0f;
private float zrot = 0.0f;
private float xscale = 1.0f;
private float yscale = 1.0f;
private float zscale = 1.0f;


  加入相应的属性代码:

 

public float XLoc
{
 get
 {
  return xloc;
 }
 set
 {
  xloc = value;
 }
}
…………

 

  在Render()虚函数中,应用平移、旋转及缩放。
 

public virtual void Render()
{
 objdevice.MultiplyTransform(TransformType.World,Matrix.Translation(xloc, yloc, zloc));
 objdevice.MultiplyTransform(TransformType.World,Matrix.RotationAxis(new Vector3(1.0f, 0.0f, 0.0f), xrot));
 objdevice.MultiplyTransform(TransformType.World,Matrix.RotationAxis(new Vector3(0.0f, 1.0f, 0.0f), yrot));
 objdevice.MultiplyTransform(TransformType.World,Matrix.RotationAxis(new Vector3(0.0f, 0.0f, 1.0f), zrot));
 objdevice.MultiplyTransform(TransformType.World,Matrix.Scaling(xscale, yscale, zscale));
 return;
}

 

  现在回到地球类,需要将其改为新类的派生类,同时更改构造函数,另外,在Render()方法中,应先调用基类的Render()方法:


public override void Render()
{
 base.Render();
 //把位置变为世界坐标
 // meshDevice.Transform.World = Matrix.Multiply(locationOffset, worldTransform);
 //绘制网格
 。。。。。。
}

 


  现在,由于在基类中可以设置对象位置,因此,可以把与locationOffset相关,即与设置位置的变量及语句注释掉。

  四、加入月球

  在这一步加入月球,实际上是再创建一个网格对象新实例,只是把纹理进行更改即可,为了代码模块性更好,把两个对象放在一个新类CModel中,在工程中新添加一个类CModel,并声明对象实例。


public class cModel
{
 private cMeshObject mesh1 = null;
 private cMeshObject mesh2 = null;
 private bool modelloaded;
}


  把窗口代码中的Load()事件,放在CModel中,这次不仅生成了地球,而且生成了月球。

 


public void Load(ref Device device)
{
 mesh1 = new Earth(ref device);
 mesh2 = new Earth(ref device);
 if (mesh1.LoadMesh(@"..\..\earth2.x"))
 {
  modelloaded = true;
 }
 else
 {
  modelloaded = false;
 }
 if (mesh2.LoadMesh(@"..\..\moon.x"))
 {
  mesh2.XLoc += 20.0f;
  modelloaded = true;
 }
 else
 {
  modelloaded = false;
 }
}

 

  下面的Update()方法中,参数dir 用来判断是顺时针旋转还是逆时针旋转,另外,地球和月球绕Y轴增加的角度大小不同,也就决定了二者旋转的速度不同。


public void Update(int dir)
{
 if(dir > 0)
 {
  mesh1.YRot += 0.02f;
  mesh2.YRot += 0.05f;
 }
 else if(dir < 0)
 {
  mesh1.YRot -= 0.02f;
  mesh2.YRot -= 0.05f;
 }
}


  在下面的render()方法中,生成显示月球和地球:

 


public void Render(ref Device device)
{
 device.Transform.World = Matrix.Identity;
 if(modelloaded)
 {
  mesh1.Render();
  mesh2.Render();
 }
}


  把窗口代码中的加入灯光的方法,也放在此类中:


public void LoadLights(ref Device device)
{
 device.Lights[0].Type = LightType.Directional;
 device.Lights[0].Diffuse = Color.White;
 device.Lights[0].Position = new Vector3(0.0f, 0.0f, 25.0f);
 device.Lights[0].Direction = new Vector3(0, 0, -1);
}
public void Light(ref Device device)
{
 device.Lights[0].Update();
 device.Lights[0].Enabled = true;
}


  五、与鼠标交互操作

  为了实现与键盘、鼠标交互,新添加一个类:CMouse,添加引用Microsoft.DirectX.DirectInput,并添加命名空间。加入相关变量:


private Microsoft.DirectX.DirectInput.Device mouse = null;
public System.Threading.AutoResetEvent MouseUpdated;
private float x, y, z = 0.0f;
private byte[] buttons;

 

  在下面的构造函数代码中,首先创建鼠标设备,并初始化回调事件:


public CMouse(System.Windows.Forms.Control control)
{
 mouse = new Microsoft.DirectX.DirectInput.Device(SystemGuid.Mouse);
 mouse.SetCooperativeLevel(control, CooperativeLevelFlags.Background | CooperativeLevelFlags.NonExclusive);
 mouse.Properties.AxisModeAbsolute = false;
 MouseUpdated = new System.Threading.AutoResetEvent(false);
 mouse.SetEventNotification(MouseUpdated);
 mouse.Acquire();
 Update();

 


  下面的Update()方法中获得鼠标的坐标值,并赋给私有成员变量:

public void Update()
{
 MouseState state = mouse.CurrentMouseState;
 x = state.X;
 y = state.Y;
 z = state.Z;
 buttons = state.GetMouseButtons();
}


  还需要有一个函数来检测鼠标左键是否按下:

 


public bool LeftButtonDown
{
 get
 {
  bool a;
  return a = (buttons[0] != 0);
 }
}


  六、大结局

  现在已经做完了准备工作,返回到窗口代码中,需要对这里的代码重新进行一些调整:

  在图形初始化函数中创建一个CModel类及CMouse类:

 

private CModel model = null;
private CMouse mouse = null;
private bool leftbuttondown = false;
private float mousexloc;

 

  添加对鼠标初始化的方法:

 

网管联盟bitsCN@com


public void InitializeInput()
{
 mouse = new CMouse(this);
}


  添加UpdateInputState()方法,当按下鼠标左键时,将leftbuttondown值设置为真,当鼠标抬起时,将mousexloc置0:


private void UpdateInputState()
{
 mouse.Update();
 if (mouse.LeftButtonDown)
 {
  if(leftbuttondown == false)
  {
   mousexloc = 0.0f;
   leftbuttondown = true;
  }
  else
  {
   mousexloc = -mouse.X;
  }
 }
 else
 {
  leftbuttondown = false;
  mousexloc = 0.0f;
 }
}


  在此程序中,只对X值进行了操作,即只能左右转。

  Render()方法更新如下:

public void Render()
{
 UpdateInputState();
 device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.DarkGray, 1.0f, 0);
 SetupCamera();
 device.BeginScene();
 model.Update((int)mousexloc);
 model.Light(ref device);
 model.Render(ref device);
 device.EndScene();
 device.Present();
}

 

  最后更改Main()主函数:


static void Main()
{
 using (Form1 EarthForm = new Form1())
 {
  EarthForm.InitializeGraphics();
  EarthForm.InitializeInput();
  EarthForm.Show();
  while(EarthForm.Created)
  {
   EarthForm.Render();
   Application.DoEvents();
  }
  EarthForm.Dispose();
 }
 


Platform: | Size: 11817 | Author: mantoutou | Hits:

[Windows Developd3dwave

Description: 动态的3d网格画图-dynamic mesh drawing
Platform: | Size: 5120 | Author: 冯吉 | Hits:

[DirextX四叉树剖分LOD Terrain

Description: 四叉树剖分地归算法Terrain示例(仅仅算法实现)-quadtree mesh algorithm Terrain classified examples (only Algorithm)
Platform: | Size: 740352 | Author: 王云 | Hits:

[Other Gamesd3d_mesh

Description: d3d游戏开发中使用.x的例子,如果您是一位d3d的初学者,则其在您的mesh动画方面一定有所参考价值.-D3D game developers use. X example, if you are a D3D beginners then in your mesh animation must have reference value.
Platform: | Size: 238592 | Author: | Hits:

[VC/MFCdirectx93d

Description: D3D学习文档 第一部分 必备的数学知识 第二部分 Direct3D基础 第二章 渲染管线 第三章 在Direct3D中绘制 第四章 色彩 第五章 灯光 第六章 纹理 第七章 混合 第八章 模版 第九章 字体 第十章 网格模型I 第十一章 网格模型II 第十二章 创建灵活的摄像机类 第十三章 地形渲染基础 第十四章 粒子系统 第十五章 选取 第十六章 高级着色器语言入门 第十七章 顶点着色器入门 第十八章 像素着色器入门 第十九章 效果架构-Display study documents the first part of the necessary mathematical knowledge of Direct3D based on the second chapter outlet with the third chapter in the pipeline Direct3D Drawing fourth chapter V color lighting texture Chapter VI Chapter VII of the 8th Mixed Chapter IX font template Chapter 10 Mesh I Chapter XI Mesh II Chapter 12 to create a flexible camera Category Chapter 13 Terrain Rendering based particle system Chapter 14 Chapter 15 Chapter 16 selected senior shader language portal Chapter 17 Vertex shader introductory chapter 18 pixel shader effects portal framework for chapter 19
Platform: | Size: 4288512 | Author: zhouyinye | Hits:

[DirextXD3Dmesh

Description: 关于介绍directx中网络模型的例子.可以读取.x文件,适合初学者学习-for the presentation of directx network model example. Can read. X documents for beginners learning
Platform: | Size: 2628608 | Author: 曹钰 | Hits:

[DirextXMesh

Description: 我自己改写的代码,mfc,最新版d3dsdk,在.net以上版本编译.vs6已经不能成功-I have rewritten the code, mfc, the latest version of d3dsdk, in the. Net compiler above. Vs6 should not have been successful
Platform: | Size: 347136 | Author: 陈伟锋 | Hits:

[DirextXMultiAnimation

Description: MultiAnimation  Sample这个例子展示了使用高级shader语言、蒙皮技术和D3DX动画控制器的多动画集的Mesh动画。动画控制器用来混合动画集,以确保从一个动画到另一个动画的平滑转换。<IMG onmouseover="if(this.title) {this.style.cursor=hand }" onclick="if(this.title) {window.open(http://msdn.microsoft.com/library/en-us/directx9_c/Sample_MultiAnimation_small.jpg) }" src="http://msdn.microsoft.com/library/en-us/directx9_c/Sample_MultiAnimation_small.jpg" onload="if(this.width>screen.width-333) {this.width=screen.width-333 this.title=open new window }" border=0 >Path源代码:  (SDK  root)\Samples\C++\Direct3D\MultiAnimation  可执行文件:  (SDK  root)\Samples\C++\Direct3D\Bin\x86  or  x64\MultiAnimation.exe  Overview这个例子展示如何利用D3DX动画支持,在应用程序中渲染3D动画。D3DX的API函数处理动画Mesh的装载,混合多个动画。动画控制器的功能是支持动画轨,允许从一个动画到另一个动画的平滑转换。这个例子分为2部分:动画类库和应用程序。动画类库是一个多用途库,逻辑上它在应用程序与D3DX之间。为后面的
Platform: | Size: 688128 | Author: 林庆富 | Hits:

[3D GraphicDirect3D

Description: www.gametutorials.com上所有Direct3D例子程序,共有19个。以前www.gametutorials.com的教程 现在它收费了,都是好东西啊,绝对能用-www.gametutorials.com all Direct3D examples of procedures, a total of 19. Tutorials www.gametutorials.com ago and now it charges, and all good things, ah, never use
Platform: | Size: 2908160 | Author: 张敏 | Hits:

[3D GraphicPhysXTriangleMesh

Description: Ageia s PhysX(著名的游戏物理库) D3D 9使用代码演示。由于PhysX物理库使用OpenGL代码实现图形着色,从而使许多用DirectX 3D的程序员不能使用/读懂demo代码,这是使用D3D着色引擎重新写的一些demo代码。-Triangle Mesh(带执行文件)-Ageia s PhysX (well-known game physics library) D3D 9 demo using the code. PhysX physics library as a result of the use of OpenGL graphics rendering code so that many use the DirectX 3D programmer can not use/read demo code, which is the use of D3D shaders to re-write some demo code.-Triangle Mesh (with the implementation of document)
Platform: | Size: 238592 | Author: GoldenCloud | Hits:

[3D GraphicMeshFromOBJ

Description: 使用D3D从OBJ读取模型,代码由VC写成 读取后通过MESH建模-Use D3D read from the OBJ model, code written by the VC after reading through the MESH Modeling
Platform: | Size: 41984 | Author: xiaohan | Hits:

[DirextXD3DMesh_rar

Description: d3d的mesh使用,可以进详细的说明了mesh的一般操作,可以借鉴,初学者必备。-d3d use of the mesh, you can enter a detailed description of the mesh of the normal operation, you can learn essential for beginners.
Platform: | Size: 6901760 | Author: 杜歌 | Hits:

[DirextXENG3D

Description: 基于D3D9.0 SDK 尝试制作的3D demo ./DXD3D 简易的D3D 引擎,封装了部分常用工具类,比如蒙皮动画和静态骨骼等等 ./res 资源 ./Textures 资源 ./bin 编译后的程序,以及必须的dll和资源,资源同上级目录,可直接运行(可能需DX9.0 runtime)-D3D9.0 SDK-based production of 3D demo ./DXD3D Simple D3D engine, include some of the common util classes, such as skinned mesh and static mesh, etc. ./res Resources. . ./Textures Resources. ./Bin compiled program, and necessary dll and resources, the resources are the same as what exists in the parent directory. It can be run directly. (DX9.0 runtime maybe necessary)
Platform: | Size: 7578624 | Author: zihao | Hits:

[3D GraphicMESH

Description: 里面包括D3D导入模型.贴图,简单的D3D入门程序.希望对想学D3D的人有帮助-GAME,D3D,MESH
Platform: | Size: 15563776 | Author: dfadsf | Hits:

[DirextXphong--Mesh

Description: D3D模型光照的信息 想学习HLSL的同学 可以下载-HDR lighting information there are some basic code for beginners with
Platform: | Size: 1479680 | Author: 郎咸华 | Hits:

[Otherabout-d3d-mesh-Technology

Description: 关于网格模型的资料,包括实现顶点混合索引混合等高级技术!-this is a pdf about D3D mesh technology.
Platform: | Size: 1839104 | Author: chenghuisun | Hits:
« 12 »

CodeBus www.codebus.net