Hi Leute.
Ich hab mal wieder ein kleines Problem. Ich bin habe gerade eine nette schöne Aufgabe bekommen. Ich muss nun Beziehungen zwischen Objekten grafisch als Matrix darstellen.
Das soll ungefähr so aussehene wie die Matrix auf wissen.de oder www.sj.com nur aber halt unter C#.Net. Ich hab mich nun n bischen mit DirectX auseinander gesetzt und mir ein paar Tutorials durchgelesen.
Ich bin mir grad nicht sicher ob ich das unbedingt in DirectX machen muss. Könnt Ihr mir da etwas einfacheres empfehlen? Wenn nicht wäre auch nicht so schlimm, aber dann stehe ich vor dem Problem, dass ich zwar ein schönes Dreieck (wie im Tutorial) zeichnen kann, die Fläche sich allerdings über das gesamte Formular erstreckt.
Mein Problem ist es nun diese Fläche zu begrentzen, damit ich dann noch normale Objekte einbauen kann. Weiß da einer weiter (Hier hab ich die Tutorials her: http://www.miszalok.de/C_00/Index_all_Courses.htm)
Kann man das dann irgendwie auf eine PicturBox oder etwas anderes anwenden und nicht auf das ganze Formular
Das Problem ist glaube dieser Befehl "device = new Device( 0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams );" wenn man sich ein neues Device erstellt. Weiß jemand, wie man das dann nicht auf das Formular sondern auf die PctureBox oder ein anderes Object anwedet, das dafür geeignet ist
Freue mich über jede Hilfe!!
MfG
Xerses
Ich hab mal wieder ein kleines Problem. Ich bin habe gerade eine nette schöne Aufgabe bekommen. Ich muss nun Beziehungen zwischen Objekten grafisch als Matrix darstellen.
Das soll ungefähr so aussehene wie die Matrix auf wissen.de oder www.sj.com nur aber halt unter C#.Net. Ich hab mich nun n bischen mit DirectX auseinander gesetzt und mir ein paar Tutorials durchgelesen.
Ich bin mir grad nicht sicher ob ich das unbedingt in DirectX machen muss. Könnt Ihr mir da etwas einfacheres empfehlen? Wenn nicht wäre auch nicht so schlimm, aber dann stehe ich vor dem Problem, dass ich zwar ein schönes Dreieck (wie im Tutorial) zeichnen kann, die Fläche sich allerdings über das gesamte Formular erstreckt.
Mein Problem ist es nun diese Fläche zu begrentzen, damit ich dann noch normale Objekte einbauen kann. Weiß da einer weiter (Hier hab ich die Tutorials her: http://www.miszalok.de/C_00/Index_all_Courses.htm)
Kann man das dann irgendwie auf eine PicturBox oder etwas anderes anwenden und nicht auf das ganze Formular
Code:
using System;
using System.Drawing;
using System.Windows.Forms;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;
public class Form1 : Form
{ static void Main() { Application.Run( new Form1() ); }
static Device device = null;
static float fAngle;
PresentParameters presentParams;
static CustomVertex.PositionColored[] v = new CustomVertex.PositionColored[3];
Timer myTimer = new Timer();
public Form1()
{ Text = "D3DTriangleAnimation";
//fill coordinates and colors into an array "v"
v[0].X=-1f; v[0].Y=-1f; v[0].Z=0f;
v[1].X= 1f; v[1].Y=-1f; v[1].Z=0f;
v[2].X= 0f; v[2].Y= 1f; v[2].Z=0f;
v[0].Color = System.Drawing.Color.DarkGoldenrod.ToArgb();
v[1].Color = System.Drawing.Color.MediumOrchid.ToArgb();
v[2].Color = System.Drawing.Color.Cornsilk.ToArgb();
myTimer.Tick += new EventHandler( OnTimer );
myTimer.Interval = 1;
ClientSize = new Size( 400, 300 ); //Calls OnResize( ... )
}
protected override void OnResize( System.EventArgs e )
//Whenever the window changes we have to initialize Direct3D from scratch
{ myTimer.Stop();// stop the timer during initialization
try
{ //get information from the operating system about its current graphics properties
presentParams = new PresentParameters();
presentParams.Windowed = true; //no full screen display
presentParams.SwapEffect = SwapEffect.Discard; //no swap buffer
if ( device != null ) device.Dispose(); //free the old canvas if any
device = new Device( 0, DeviceType.Hardware, this,
CreateFlags.SoftwareVertexProcessing, presentParams );
device.Transform.View = Matrix.LookAtLH(
new Vector3( 0f, 0f,-4f ),
new Vector3( 0f, 0f, 0f ),
new Vector3( 0f, 1f, 0f ) );
device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI/4, 1f, 0f, 10f );
device.RenderState.CullMode = Cull.None;
device.RenderState.Lighting = false;
device.VertexFormat = CustomVertex.PositionColored.Format;
myTimer.Start();//start the timer again
}
catch (DirectXException) { MessageBox.Show( "Could not initialize Direct3D." ); return; }
}
protected static void OnTimer( Object myObject, EventArgs myEventArgs )
{ if (device == null) return;
device.Clear( ClearFlags.Target, Color.Blue, 1f, 0 );
fAngle += 0.1f;
device.Transform.World = Matrix.RotationY( fAngle );
device.BeginScene();
device.DrawUserPrimitives( PrimitiveType.TriangleList, 1, v );
device.EndScene();
device.Present(); // show the canvas
}
}
Das Problem ist glaube dieser Befehl "device = new Device( 0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams );" wenn man sich ein neues Device erstellt. Weiß jemand, wie man das dann nicht auf das Formular sondern auf die PctureBox oder ein anderes Object anwedet, das dafür geeignet ist
Freue mich über jede Hilfe!!
MfG
Xerses