Jump to content

  • Log In with Google      Sign In   
  • Create Account


OppiXP

Member Since 20 Dec 2009
Offline Last Active Aug 02 2012 01:42 AM

Topics I've Started

[SlimDX] Render solid 2D text

06 May 2010 - 02:51 AM

Hello everybody, I am wondering if it is possible to render solid 2D text using a SlimDX.Direct3D9.Sprite and a SlimDX.Direct3D9.Font. Basically this is what i am doing:
textSprite.Begin(SpriteFlags.ObjectSpace | SpriteFlags.DoNotModifyRenderState | SpriteFlags.DoNotSaveState);
Device.SetRenderState(RenderState.AlphaBlendEnable, false);
text2D.DrawString(textSprite, text, rect, format | DrawTextFormat.NoClip, color);
textSprite.End();

text, rect, format and color are parameters of my method. Unfortunately I only get a solid black rectangle. Is it possible to draw black text with a white background? Any help is appreciated! Best regards

[SlimDX] Picking a point on a plane

08 February 2010 - 10:09 PM

Hello guys, I am stuck on picking a certain point on a plane which is located anywhere on the z axis of my coordinate system. The coordinate system can be zoomed and rotated by using my chase camera. Here is what it looks like: Coordinate system The problem is that my coordinates seem to be messed up and I cannot figure out why. The camera is rotated and zoomed by setting up the projection and view matrices in this way:

projectionMatrix = Matrix.PerspectiveFovLH(
             (float)Math.PI / 4,
             (float)ClientRect.Width / ClientRect.Height,
             0.001f,
             20f);

Matrix trans = Matrix.Translation(0.0f, 0.0f, camDistance);
Matrix rot = Matrix.Multiply(Matrix.RotationY(camAngleHorizontal), Matrix.Identity);
rot = Matrix.Multiply(Matrix.RotationX(camAngleVertical), rot);
viewMatrix = Matrix.Multiply(trans, rot);
viewMatrix = Matrix.Invert(viewMatrix);



Rotating the camera around my coordinate system works fine. I use this code to determine if a ray intersects a certain plane:

protected override void MouseMove(System.Windows.Forms.MouseEventArgs e)
{
  base.MouseMove(e);
  Plane plane = new Plane(new Vector3(1f, 0, 0), 0);
 
  DX.Instance.SetWorldMatrix(Matrix.Identity, Matrix.Identity);

  Vector3 nearPlane = Vector3.Unproject(new Vector3((float)e.X, (float)e.Y, currentCamDistance), DX.Instance.ViewPort, DX.Instance.CurrentProjectionMatrix, DX.Instance.CurrentViewMatrix, DX.Instance.CurrentWorldMatrix);

  Vector3 farPlane = Vector3.Unproject(new Vector3((float)e.X, (float)e.Y,  20f), DX.Instance.ViewPort, DX.Instance.CurrentProjectionMatrix, DX.Instance.CurrentViewMatrix, DX.Instance.CurrentWorldMatrix);

  Vector3 direction = farPlane - nearPlane;
  direction.Normalize();

  Ray ray = new Ray(nearPlane, direction);
  float distance;

  Console.WriteLine(Ray.Intersects(ray, plane, out distance));
}



Sometimes it seems that the plane is located flat in the upper right corner of the screen... Can please anybody have a look at this and tell me what is wrong? I also tried intersection using a BoundingBox: BoundingBox box = new BoundingBox(new Vector3(0), new Vector3(1)); It seems that the coordinates are not translated correctly. Any help is appreciated! Best Regards OppiXP

[SlimDX] Clip planes

20 December 2009 - 08:10 PM

Hello everybody, I am currently working on a 3 dimensional plot of measurement data (waterfall diagram). What I am trying to do is to implement zooming and scrolling by scaling and translating the trianglestrips. But I cannot figure out how to use the clip planes to clip the data at the left and right ends of the x-axis. Imagine a box with an edge length of 1. I only want to draw the data inside this box. I have tried this to clip the data on the left side of the x axis: Plane clipPlane = new Plane(new Vector3(-1f, 0f, 0f), new Vector3(0.0f, 1f, 0.0f)); DX.Instance.Device.SetClipPlane(0, clipPlane); DX.Instance.Device.SetRenderState(RenderState.ClipPlaneEnable, 0); DX.Instance.Device.SetRenderState(RenderState.Clipping, true); and: Plane clipPlane = new Plane(new Vector3(-1f, 0f, 0f), new Vector3(0.0f, 1f, 0.0f)); clipPlane.Normalize(); Matrix view = DX.Instance.Device.GetTransform(TransformState.View); view.Invert(); view = Matrix.Transpose(view); Matrix projection = DX.Instance.Device.GetTransform(TransformState.Projection); projection.Invert(); projection = Matrix.Transpose(projection); view *= projection; clipPlane = Plane.Transform(clipPlane, view); DX.Instance.Device.SetClipPlane(0, clipPlane); DX.Instance.Device.SetRenderState(RenderState.ClipPlaneEnable, 0); DX.Instance.Device.SetRenderState(RenderState.Clipping, true); Maybe I misunderstood clip planes but there is no clipping at all. Any help is appreciated! Best regards OppiXP EDIT: I figured out that SlimDX writes the following lines to the Output window: Direct3D9: (WARN) :Ignoring redundant SetRenderState - 152 Direct3D9: (WARN) :Ignoring redundant SetRenderState - 136 Could it be possible that this is a bug in SlimDX and the user clipping planes are never used? I just switched to the August Release and there the same issue occurs. Best regards OppiXP [Edited by - OppiXP on December 28, 2009 4:07:54 AM]

PARTNERS