Jump to content

  • Log In with Google      Sign In   
  • Create Account

Interested in a FREE copy of HTML5 game maker Construct 2?

We'll be giving away three Personal Edition licences in next Tuesday's GDNet Direct email newsletter!

Sign up from the right-hand sidebar on our homepage and read Tuesday's newsletter for details!


We're also offering banner ads on our site from just $5! 1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


Fixed function and shader not doing same thing?


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
3 replies to this topic

#1 Warwick   Members   -  Reputation: 120

Like
0Likes
Like

Posted 21 June 2012 - 03:50 PM

Hi, first time I have posted here. I am more-or-less a novice with DirectX. I am working on a graphical output for my scientific simulation. The reason I chose DX over ray-tracing is partly that I already started learning DX, and partly just that I am not actually looking for realistic graphics - e.g. I want to light things arbitrarily with silly ambient lighting inside a deep dark well, but enough about that.

The problem I am having is the following.

I make my surface graph using a shader which is pretty simple and based on the book by Frank Luna.
I am feeding a vertex buffer which (I have checked with watches) has x,z coordinates that populate a square (-3,3)x(-3,3).
That appeared to work.

Then I am also trying to draw axes, in the fixed function pipeline, by using DrawPrimitiveUP. At the moment I am trying to draw one line with D3DPT_LINESTRIP and passing data (-3.02,0,3.02),(-3.02,0,-3.02).
The line appears, but well away from the edge of the graph! If I instead set (-2.4,0,2.4),(-2.4,0,-2.4) then it appears still a bit outside the graph square.
(Meanwhile, if I draw line (3,0,3),(3,10,3) then it looks like it appears in the correct place, though I'm still checking that further.)

I have checked, checked, checked that the view*projection matrix being used in SetTransform is the same as is passed to the shader, and the shader does not do anything funny.

Any ideas what could be going on I would welcome. Quite happy to provide more information if there's anything you'd like to ask.

Sponsor:

#2 mhagain   Crossbones+   -  Reputation: 8135

Like
1Likes
Like

Posted 21 June 2012 - 04:55 PM

There are different rasterization rules for lines as there are for triangles which can cause this. See: http://msdn.microsof...4(v=vs.85).aspx

It was also once the case that shaders may not give the same result as the fixed pipeline; OpenGL specifies that this is allowed (or at least doesn't specify that it's not) (and it was known to happen in the old days - hence the existence of ftransform and option ARB_position_invariant) but I haven't found anything specific to D3D, and I doubt if it's relevant anymore as all modern gfx hardware emulates the fixed pipeline using shaders anyway.

Edited by mhagain, 21 June 2012 - 04:55 PM.

It appears that the gentleman thought C++ was extremely difficult and he was overjoyed that the machine was absorbing it; he understood that good C++ is difficult but the best C++ is well-nigh unintelligible.


#3 Tom KQT   Members   -  Reputation: 1610

Like
1Likes
Like

Posted 22 June 2012 - 01:23 AM

I remember a long time ago I also encountered a problem when I was rendering some objects using the FFP and other objects using shaders - there were visual glitches when the objects were touching each other. It looked quite like a z buffer precision problem, I think it may be caused by a slightly different way how the FFP handles W / V / P matrices and how I handled them in the vertex shader - of course the basic math was the same, but probably rounding errors related to floating point precision or something like that...
(It certainly wasn't z-fighting, it all got fixed just by rendering everything using shaders.)

Edited by Tom KQT, 22 June 2012 - 01:25 AM.


#4 Warwick   Members   -  Reputation: 120

Like
0Likes
Like

Posted 22 June 2012 - 05:42 AM

Thank you v much for responses.

I now established that the error was in the eye of the beholder - the two things aren't meant to touch, they are at different y-coordinates. The axes are in the right place.

My first query and it was unintentionally a windup.

Now I just have to work out how to make text appear at device coordinates instead of screen coordinates.




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS