cna در حال رشد
تاريخ عضويت: 1 شنبه 9 مرداد 1384 تعداد ارسالها: 28 محل سكونت: تهران
شنبه 13 تير 1388 - 02:16 |
|
|
دوستان من می خوام یک تصویر رو روی یک سطحی که مستطیلی است و از دو مثلث تشکیل شده بصورت texture قرار بدم. زباني كه استفاده مي كنم #C است.
این کار رو انجام دادم ولی هیچ تصویری غیر از پس زمینه در اجرا نمی بینم. در زیر source برنامه من هست اگر ایرادش
رو رفع کنید ممنون می شم!
كد: |
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 DirectX_Tutorial
{
public class WinForm : System.Windows.Forms.Form
{
private Device device;
private System.ComponentModel.Container components = null;
VertexBuffer vb;
Texture tex;
public WinForm()
{
InitializeComponent();
this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true);
}
public void InitializeDevice()
{
PresentParameters presentParams = new PresentParameters();
presentParams.Windowed = true;
presentParams.SwapEffect = SwapEffect.Discard;
presentParams.EnableAutoDepthStencil = true;
presentParams.AutoDepthStencilFormat = DepthFormat.D16;
device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);
device.RenderState.ZBufferEnable = true;
device.RenderState.Lighting = false;
tex = TextureLoader.FromFile(device, "winter.jpg");
}
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
CustomVertex.TransformedTextured[] vertices = new CustomVertex.TransformedTextured[6];
vertices[0].Position = new Vector4(10, 10, 0f, 0f);
vertices[1].Position = new Vector4(330f, 10f, 0f, 0f);
vertices[2].Position = new Vector4(10, 250, 0f, 0f);
vertices[3].Position = new Vector4(10f, 250f, 0f, 0f);
vertices[4].Position = new Vector4(330, 10f, 0f, 0f);
vertices[5].Position = new Vector4(330, 250f, 0f, 0f);
vb = new VertexBuffer(typeof(CustomVertex.TransformedTextured),6, device, Usage.Dynamic | Usage.WriteOnly, CustomVertex.TransformedTextured.Format, Pool.Default);
vb.SetData(vertices, 0, 0);
device.Clear(ClearFlags.Target, Color.DarkSlateBlue, 1.0f, 0);
device.BeginScene();
device.SetTexture(0, tex);
device.SetStreamSource(0, vb, 0);
device.RenderState.AlphaBlendEnable = true;
device.RenderState.ZBufferEnable = true;
device.VertexFormat = CustomVertex.TransformedTextured.Format;
device.DrawUserPrimitives(PrimitiveType.TriangleList, 2, vertices);
device.EndScene();
device.Present();
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.Size = new System.Drawing.Size(500, 500);
this.Text = "DirectX Tutorial";
}
static void Main()
{
using (WinForm our_directx_form = new WinForm())
{
our_directx_form.InitializeDevice();
Application.Run(our_directx_form);
}
}
}
}
|
|
|
|