Welcome![Sign In][Sign Up]
Location:
Search - directx load

Search list

[OpenGL programGraphicEx.v9.9

Description: GraphicEx is an addendum to Delphi s Graphics.pas in order to enable your application to load many common image formats. This library is primarily designed to load images as background (buttons, forms, toolbars) and textures (DirectX, OpenGL) or for image browsing and editing purposes as long as you don t need to save images. Currently only TTargaGraphic also supports saving an image-GraphicEx is an addendum to Delphi s Graphi cs.pas in order to enable your application to lo ad many common image formats. This library is pr imarily designed to load images as background ( buttons, forms, toolbars) and textures (DirectX. OpenGL) or for image browsing and editing purpo ses as long as you don t need to save images. Curre ntly only TTargaGraphic also supports saving a n image
Platform: | Size: 412406 | Author: hfb | Hits:

[Video Capturetaksi_src_Menace

Description: 录像软件, 需要安装DirectX SDK 8.0 以上。 录像时,CPU负荷小,画面清晰。 -video software, the need to install DirectX SDK 8.0 and above. Video, CPU load small, clear picture.
Platform: | Size: 227285 | Author: whkim | 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:

[OpenGL programGraphicEx.v9.9

Description: GraphicEx is an addendum to Delphi s Graphics.pas in order to enable your application to load many common image formats. This library is primarily designed to load images as background (buttons, forms, toolbars) and textures (DirectX, OpenGL) or for image browsing and editing purposes as long as you don t need to save images. Currently only TTargaGraphic also supports saving an image-GraphicEx is an addendum to Delphi s Graphi cs.pas in order to enable your application to lo ad many common image formats. This library is pr imarily designed to load images as background ( buttons, forms, toolbars) and textures (DirectX. OpenGL) or for image browsing and editing purpo ses as long as you don t need to save images. Curre ntly only TTargaGraphic also supports saving a n image
Platform: | Size: 411648 | Author: hfb | Hits:

[Video Capturetaksi_src_Menace

Description: 录像软件, 需要安装DirectX SDK 8.0 以上。 录像时,CPU负荷小,画面清晰。 -video software, the need to install DirectX SDK 8.0 and above. Video, CPU load small, clear picture.
Platform: | Size: 227328 | Author: whkim | Hits:

[DirextXdirect3d

Description: 加载一个3d模型,以及材质的载入,灯光渲染,程序框架。-Load a 3d model, as well as material loading, lighting rendering, procedural framework.
Platform: | Size: 4096 | Author: 吕风 | Hits:

[Other GamesDirectX-Quake2-VB

Description: 用VB+DirectX3D建立Quake2模型.-With VB+ DirectX3D establish Quake2 model.
Platform: | Size: 167936 | Author: 王军 | Hits:

[Multimedia DevelopKaraokeIII

Description: 一款界面及其漂亮专业的MID及卡拉OK播放器,主要支持播放MID格式的音频文件,以及播放*.KAR卡拉OK格式的音频和字幕文件。国内好像比较少。该代码没有使用第三方ocx或者DirectX进行解码。 源文件内附带MID解码DLL文件,自己可以重新修改编译,打开源代码时需要加载压缩包中的midi.dll文件。 -A beautiful interface and professional MID and karaoke OK player, the main support for playback of audio files MID format, as well as the broadcast format*. KAR karaoke OK audio and subtitle file. Domestic seems relatively small. The code does not use third parties to decode ocx or DirectX. Source file attached MID decoder DLL files, they can re-compile, open source code needed to load the compressed file midi.dll package.
Platform: | Size: 839680 | Author: 王鸿博 | Hits:

[DirextXMd2

Description: 载入由3ds max生成的md2模型,进行动作控制-3ds max load generated by the MD2 model for motion control
Platform: | Size: 1817600 | Author: 刘阳 | Hits:

[DirextXMeshFromOBJ

Description: 使用DirectX,从.obj格式文件加载网格模型-The use of DirectX, from the. Obj file to load the grid model
Platform: | Size: 483328 | Author: zhu | Hits:

[Windows Developeffect3

Description: VC6 开发的将OpenCV和DirctX结合起来的程序,程序通过控制功能载入图像,然后经过OpenCV的函数处理,然后将纹理贴到旋转立方体表面。-VC6 project combined with OpenCV and DirectX, program load a picture and process this picture using CV and then pasted the processed picture to the cube.
Platform: | Size: 1126400 | Author: ff | Hits:

[3D GraphicXFile

Description: 基于DirectX的加载XFile文件,包括纹理和材质处理-XFile load based on the DirectX files, including texture and material handling
Platform: | Size: 154624 | Author: aben | Hits:

[DirextX3970992Mesh

Description: 一个加载directX mesh 网格模型的例子,非常简单-A load directX mesh mesh example is very simple
Platform: | Size: 347136 | Author: sharewind | Hits:

[OtherPCM_WAVE

Description: Load the .WAV file from the disk into memory (parsing .WAV file s RIFF structure) Save the .WAV file from memory to the disk (creating .WAV file s RIFF structure) Playing the .WAV file using the default WAVE_MAPPER device Offline mixing of the two .WAV files (8-bit and 16-bit mixing not using DirectX)
Platform: | Size: 33792 | Author: zw | Hits:

[Compress-Decompress algrithmsterrain

Description: load a terrain with directx aug 2007
Platform: | Size: 2981888 | Author: ssskk | Hits:

[BooksRealtimeTerrainEngine

Description: 要想从头开始建立一个引擎的话,我们首先得需要有良好的基础。在这一部分,我们将 介绍最新的DirectX 9.0 并且好好看一下其SDK 里提供的DirectX 示例框架。出于简化的考虑, 我们将把引擎建立在微软提供好的一些类上。除此以外,我们还将研究一下DirectX9.0 的一 部分,Direct3D 扩展库(D3DX)。这个工具库将满足我们对3D 数学库的基本需要,同时也 给我们提供了加载,维护我们游戏资源的方法。 在DirectX 9.0 中,我们也将深入地研究HLSL 语言,HLSL 语言是类似与C 语言的开 发语言,它可以使着色器程序员在不借助底层汇编渲染代码的情况下编写顶点和像素着色器。 这是介绍我们今天的图形硬件3D 着色器编程的好方法。鉴于其易用性和可读性,这本书将 集中介绍HLSL 语言的使用而非底层汇编语言。 对于那些想要学习底层汇编语言的读者,HLSL 也可以作为一种辅助的学习手段。DirectX SDK 里的命令行式的HLSL 编译器(fxc.exe)通过使用/Fc 命令选项可以将HLSL 程序转换为汇 编语言文件。通过编写HLSL 代码和查看对应的汇编代码,读者就能够更加了解这两门语言。 将某些特定的代码改由汇编代码编写也可以大大地提高HLSL 代码的效率。-To build an engine from scratch, we must first need to have a good foundation. In this section, we will introduce the latest DirectX 9.0 and take a look at the DirectX SDK provides an example in the framework. For simplification reasons, we will provide a good engine built on Microsoft, a number of class. In addition, we will also look at part of DirectX9.0, Direct3D Extension Library (D3DX). The tool library will meet our basic needs of 3D math library, but also provides us with a load, maintenance of our game resources. In DirectX 9.0, we will study in depth HLSL language, HLSL language is similar to C language development language that allows programmers shader rendering code compiled without the aid of the underlying case of the preparation of vertex and pixel shader. This is to introduce today s graphics hardware 3D shader programming a good way. Given its ease of use and readability, this book will focus on the use of language rather than the underlying HLSL assembly language. Fo
Platform: | Size: 2712576 | Author: Kylin | Hits:

[DirextXMy2DTexture

Description: vc下利用directx写的一个小程序,加载位图,,支持鼠标键盘操作,可以向四个方向的行进,可以缩放-using directx vc written under a small program to load the bitmap, to support the operation of mouse and keyboard, you can travel to the four directions, you can zoom
Platform: | Size: 208896 | Author: gaojian | Hits:

[VC/MFCchengyimingDirectX3D-Load-Terrain

Description: DX骨骼动画,地形简单的演示,DirectX骨骼动画演示,和渐进网格和增进网格的演示,DirectX骨骼动画,地形,级球形天空体的演示-DX skeletal animation demo terrain DirectX skeletal animation, and progressive grid and enhance grid demonstration DirectX skeletal animation, terrain, level spherical sky demo
Platform: | Size: 3512320 | Author: 陈汉平 | Hits:

[Other Gamesdxterrian

Description: directx加载mesh网络文件实现地形,细化操作-directx load meshs files implement terrian,exmple for orperation
Platform: | Size: 1966080 | Author: sunchj | Hits:

[Othercontentexporter-master

Description: fbx --》 sdkmesh , 转化例子(fbx change to fbx example . then you can load sdkmesh)
Platform: | Size: 877568 | Author: yul_123 | Hits:
« 12 »

CodeBus www.codebus.net