
Бывалый

Профиль
Группа: Участник
Сообщений: 158
Регистрация: 9.10.2006
Где: США, Санкт-Петерб ург
Репутация: нет Всего: 2
|
Короче сел сегодня ночью изучать Direct X под C#. XNA как то заинтересовала, сунулся -- куча мусора. Хотя может не там смотрел? Может просто не до понял. Ну и ладно. Короче, стал писать по книжке. В итоге, в рендере выходят странные артефакты. Может кто подскажет в чем косяк?  Код | // загрузка точек Verts.Add(new CustomVertex.PositionColored(-1.0f, 1.0f, 1.0f, Color.Red.ToArgb())); Verts.Add(new CustomVertex.PositionColored(-1.0f, -1.0f, 1.0f, Color.Red.ToArgb())); Verts.Add(new CustomVertex.PositionColored(1.0f, 1.0f, 1.0f, Color.Red.ToArgb())); Verts.Add(new CustomVertex.PositionColored(-1.0f, -1.0f, 1.0f, Color.Red.ToArgb())); Verts.Add(new CustomVertex.PositionColored(1.0f, -1.0f, 1.0f, Color.Red.ToArgb())); Verts.Add(new CustomVertex.PositionColored(1.0f, 1.0f, 1.0f, Color.Red.ToArgb()));
Verts.Add(new CustomVertex.PositionColored(-1.0f, 1.0f, -1.0f, Color.Blue.ToArgb())); Verts.Add(new CustomVertex.PositionColored(1.0f, 1.0f, -1.0f, Color.Blue.ToArgb())); Verts.Add(new CustomVertex.PositionColored(-1.0f, -1.0f, -1.0f, Color.Blue.ToArgb())); Verts.Add(new CustomVertex.PositionColored(-1.0f, -1.0f, -1.0f, Color.Blue.ToArgb())); Verts.Add(new CustomVertex.PositionColored(1.0f, 1.0f, -1.0f, Color.Blue.ToArgb())); Verts.Add(new CustomVertex.PositionColored(1.0f, -1.0f, -1.0f, Color.Blue.ToArgb()));
Verts.Add(new CustomVertex.PositionColored(1.0f, -1.0f, -1.0f, Color.Blue.ToArgb())); Verts.Add(new CustomVertex.PositionColored(-1.0f, 1.0f, 1.0f, Color.Yellow.ToArgb())); Verts.Add(new CustomVertex.PositionColored(1.0f, 1.0f, -1.0f, Color.Yellow.ToArgb())); Verts.Add(new CustomVertex.PositionColored(-1.0f, 1.0f, -1.0f, Color.Yellow.ToArgb())); Verts.Add(new CustomVertex.PositionColored(-1.0f, 1.0f, 1.0f, Color.Yellow.ToArgb())); Verts.Add(new CustomVertex.PositionColored(1.0f, 1.0f, 1.0f, Color.Yellow.ToArgb()));
Verts.Add(new CustomVertex.PositionColored(1.0f, 1.0f, -1.0f, Color.Yellow.ToArgb())); Verts.Add(new CustomVertex.PositionColored(-1.0f, -1.0f, 1.0f, Color.Black.ToArgb())); Verts.Add(new CustomVertex.PositionColored(-1.0f, -1.0f, -1.0f, Color.Black.ToArgb())); Verts.Add(new CustomVertex.PositionColored(1.0f, -1.0f, -1.0f, Color.Black.ToArgb())); Verts.Add(new CustomVertex.PositionColored(-1.0f, -1.0f, 1.0f, Color.Black.ToArgb())); Verts.Add(new CustomVertex.PositionColored(1.0f, -1.0f, -1.0f, Color.Black.ToArgb()));
// и т. д.
void InitializeCamera() { videoCard.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, this.Width / this.Height, 1.0f, 100f); videoCard.Transform.View = Matrix.LookAtLH(new Vector3(0, 0, 10.0f), new Vector3(), new Vector3(0, 5, 0)); videoCard.RenderState.CullMode = Cull.None; } void InitializeBuffers() { if (Verts.Count % 3 != 0) return; vb = new VertexBuffer(typeof(CustomVertex.PositionColored), Verts.Count, videoCard, Usage.Dynamic | Usage.WriteOnly, CustomVertex.PositionColored.Format, Pool.Default); vb.SetData(Verts.ToArray(), 0, LockFlags.None); vb.Created += new EventHandler(vb_Created); }
void vb_Created(object sender, EventArgs e) { if (Verts.Count % 3 != 0) return; vb = new VertexBuffer(typeof(CustomVertex.PositionColored), Verts.Count, videoCard, Usage.Dynamic | Usage.WriteOnly, CustomVertex.PositionColored.Format, Pool.Default); vb.SetData(Verts.ToArray(), 0, LockFlags.None); }
VertexBuffer vb = null; List<CustomVertex.PositionColored> Verts = new List<CustomVertex.PositionColored>();
float angle = 0f; private void RenderForm_Paint(object sender, PaintEventArgs e) { videoCard.Clear(ClearFlags.Target, Color.SkyBlue, 1f, 0); angle += 0.1f; videoCard.RenderState.Lighting = false;
videoCard.Transform.World = Matrix.RotationAxis(new Vector3(angle / ((float)Math.PI * 2.0f), angle / ((float)Math.PI * 4.0f), angle / ((float)Math.PI * 6.0f)), angle / (float)Math.PI);
try { videoCard.BeginScene(); videoCard.VertexFormat = CustomVertex.PositionColored.Format; //videoCard.DrawUserPrimitives(PrimitiveType.TriangleList, 1, verts); videoCard.SetStreamSource(0, vb, 0); videoCard.DrawPrimitives(PrimitiveType.TriangleList, 0, Verts.Count / 3); videoCard.EndScene(); videoCard.Present(); } catch (DirectXException ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(ex.ErrorString); Console.WriteLine(ex.Message); } this.Invalidate(); }
|
--------------------
«Все, что вы знаете — ложь» Теория мироздания
|