Orthographic matrix won't display textured quad

Started by
1 comment, last by CdrTomalak 11 years, 8 months ago
I'm coding a test program to experiment with different matrices. Scaling and rotation are fine, but Orthogonal is causing me no end of problems. My textured quad just doesn't appear. I've scoured the internet for examples, and can't understand why my quad simply won't appear. Any ideas?

[font=courier new,courier,monospace] float oLeft = 0.0f;
float oRight = 640.0f;
float oBottom = 480.0f;
float oTop = 0.0f;
float oZnear = 0.0f;
float oZfar = 1000.0f;[/font]
[font=courier new,courier,monospace] myOrthoMatrix = SlimDX.Matrix.OrthoOffCenterLH(oLeft,oRight,oBottom,oTop,oZnear,oZfar);[/font]
...
[font=courier new,courier,monospace] float myDepth = 0.5f;
myVectorPositions[0] = new Vector3(-0.1f, 0.1f, myDepth);
myVectorPositions[1] = new Vector3(0.1f, 0.1f, myDepth);
myVectorPositions[2] = new Vector3(-0.1f, -0.1f, myDepth);
myVectorPositions[3] = new Vector3(0.1f, -0.1f, myDepth);[/font]
[font=courier new,courier,monospace] myVectorTexPositions[0] = new Vector2(0.0f,1.0f);
myVectorTexPositions[1] = new Vector2(1.0f,1.0f);
myVectorTexPositions[2] = new Vector2(0.0f,0.0f);
myVectorTexPositions[3] = new Vector2(1.0f,0.0f);[/font]
[font=courier new,courier,monospace] // Attempt to transform the vector positions using the basic scaling matrix we've just created.
for(int a=0;a<noOfVertices;a++)
{
//myVectorPositions[a] = SlimDX.Vector3.TransformCoordinate(myVectorPositions[a],myOrthoMatrix);
//myVectorPositions[a] = SlimDX.Vector3.TransformCoordinate(myVectorPositions[a],myScalingMatrix);
//myVectorPositions[a] = SlimDX.Vector3.TransformCoordinate(myVectorPositions[a],myRotationMatrix);
myVectorPositions[a] = SlimDX.Vector3.TransformCoordinate(myVectorPositions[a],myCombinedMatrix);
}[/font]

As you can see from the last extract from my program, I've got other matrices working just fine. I can't seem to crack this one. (screenwidth = 640, screenheight = 480).
Advertisement
Something that people always seem to forget is that there is a 1:1 relationship between world units and screen units (pixels) when you do an orthographic transform, if the ortho bounds are the same as the screen resolution. What this means is that if you draw an object that is 1x1x1 unit in size, it will appear approximately 1 pixel in size on the screen, regardless of the distance from the camera. In the code you present above, you are drawing an object that is 0.2x0.2x0.2 in size. That means, onscreen it is going to appear to be less than one pixel in size. Make that bad boy bigger.
Cracked it! FLeBlanc - thank you so much!!! I only got two responses to this question - one here and one on stack overflow - and you are the one who nailed it. Amazing.

Firstly I increased the quad edge length to 2 pixels, scratched my head for a while and then reduced the viewing volume to just 100x100... my quad showed up. I then slapped my own face in disbelief that all I'd done is produced a quad 4 pixels in volume, which was pretty much the same mistake again.

So - I now have a 10 x 10 pixel quad appearing in the top corner of my screen via the orthogonal matrix! Not sure what to do next but just glad it's working and I can see something. Nice one. 8D

This topic is closed to new replies.

Advertisement