artreut
Messages postés4Date d'inscriptionmardi 27 avril 2004StatutMembreDernière intervention 4 avril 2006
-
3 avril 2006 à 19:51
artreut
Messages postés4Date d'inscriptionmardi 27 avril 2004StatutMembreDernière intervention 4 avril 2006
-
4 avril 2006 à 11:21
Voilà, j'ai un petit problème qui commence a sérieusement m'énerver. Si ça se trouve c tout con mais ça fait des heures que je cherche en vain.
Je doit afficher de simples lignes sur un écran (c vraiment tout con) avec directx. Et j'aimerai en avoir des blanches sur fond noir au lieu d'en avoir des noires sur fond blanc. Changer la couleur du fond, c facile (dans le device.clear) mais je ne parviens pas à définir la couleur de mes vertices (et donc de mes lignes). Ces derniers restent désespérément noirs, (que j'utilise un drawprimitives de points, de lignes ou de triangles).
Biensûr j'ai utilisé le CustomVertex.PositionColored (et non pas PositionOnly, suis pas encore totalement idiot ;-)). Trève de long discours, voici mon code (ki marche pôa).
public partial class Camera : Form
{
private Microsoft.DirectX.Direct3D.Device Dev;
private VertexBuffer VBuf;
private PresentParameters presentParams = new PresentParameters();
private CustomVertex.PositionColored[] points;
public Camera()
{
InitializeComponent();
//est-ce que le device gère les vertices en hardware?
Caps caps = Manager.GetDeviceCaps(Manager.Adapters.Default.Adapter,
DeviceType.Hardware);
CreateFlags flags;
if (caps.DeviceCaps.SupportsHardwareTransformAndLight)
{
flags = CreateFlags.HardwareVertexProcessing;
}
else
{
flags = CreateFlags.SoftwareVertexProcessing;
}
//instanciation de la form dans laquelle est affichée la présentation
Render display=new Render();
display.Show();
presentParams.BackBufferWidth = 320;
presentParams.BackBufferHeight = 240;
presentParams.BackBufferFormat = Format.X8R8G8B8;
presentParams.Windowed = false; // on est en plein écran
presentParams.SwapEffect = SwapEffect.Discard;
// Puis création du device (second écran)
Dev = new Microsoft.DirectX.Direct3D.Device(0, DeviceType.Hardware, display, flags, presentParams);
Dev.DeviceReset += new EventHandler(Dev_DeviceReset);
Dev.RenderState.Lighting = false;
Dev.Reset(presentParams);
While(display.created){
Render();
Application.DoEvents();}
}
void Dev_DeviceReset(object sender, EventArgs e)
{
//instanciation du buffer
VBuf = new VertexBuffer(typeof(CustomVertex.PositionColored), 4, Dev, Usage.Dynamic|Usage.WriteOnly, CustomVertex.PositionColored.Format, Pool.Default);
//Création de 4 vertices et affectation de leur couleurs
points = new CustomVertex.PositionColored[4];
points[0].Position = new Vector3(-0.6f, 0, 0);
points[0].Color = Color.SkyBlue.ToArgb();
points[1].Position=new Vector3(0.1f,0,0);
points[1].Color = Color.Plum.ToArgb();
points[2].Position = new Vector3(-0.7f, -0.2f, 0);
points[2].Color = Color.OliveDrab.ToArgb();
points[3].Position = new Vector3(-0.7f, 0.9f, 0);
points[3].Color = Color.MediumBlue.ToArgb();
VBuf.SetData(points, 0, LockFlags.None);
}
public void Render()
{
//On efface le backbuffer et on remplit tout avec une couleur
Dev.Clear(ClearFlags.Target,
Color.FromArgb(255, 193, 139, 0), 1.0f, 0);
Dev.BeginScene();
Dev.VertexFormat = CustomVertex.PositionColored.Format;
Dev.SetStreamSource(0, VBuf, 0);
Dev.DrawPrimitives(PrimitiveType.LineList, 0, 2);
Dev.EndScene();
Dev.Present();
}
}
Voilà! Je suis ouvert à toutes les suggestions (g un peu simplifié le vrai code pour le topic donc c possible qu'il y aie de ptites erreurs de syntaxe)