• FEATURED

View more

View more

View more

### Image of the Day Submit

IOTD | Top Screenshots

### The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.

# float2 dx = ddx(uv.xy * size.x); // does this make sense?

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.

3 replies to this topic

### #1skytiger  Members

Posted 06 December 2012 - 08:22 AM

(given that uv is float2)

shouldn't it be:

[source lang="cpp"]float dx = ddx(uv.x * size.x);float dy = ddy(uv.y * size.y);[/source]

and why is there an ddx() and a ddy() ? why not just a dd() ?

### #2MJP  Moderators

Posted 06 December 2012 - 03:59 PM

ddx is the partial derivative of the value with respect to screen-space X, ddy is the partial derivative of the value with respect to screen-space Y. In other words ddx tells you how much the value changes if you were to move to right a pixel, while ddy tells you how much the value changes if you were to move down a pixel. That is why there are two different functions.

I can't tell you whether your code makes sense without knowing what you're actually trying to accomplish, and also knowing what "size" is.

### #3Matias Goldberg  Members

Posted 06 December 2012 - 04:43 PM

Yeah, what mjp said.

If you intend to use the derivatives for manual tex2d lookup because you're having issues with branch code, you'll probably want to do:
float2 dx = ddx(uv.xy * size.xy);
float2 dy = ddy(uv.xy * size.xy);

### #4skytiger  Members

Posted 06 December 2012 - 04:55 PM

I see now!

float2 dx = ddx(uv.xy);

ddx() is returning a vector in texture space

The original code was calculating a lod level manually to allow for sampling neighbouring pixels (in DX9)
[source lang="cpp"]float MipMapLevel(in float2 uv, in float2 textureSize) { float2 dx = ddx(uv * textureSize.x); float2 dy = ddy(uv * textureSize.y); float d = max(dot(dx, dx), dot(dy, dy)); return log2(sqrt(d)); }//function// then I can use tex2Dlod() with correct pixel offsets for manual interpolation[/source]
also, from my testing on an ATI3870, fractional LOD levels seem to cause blending between mip levels
so I need to round or truncate my lod level before calculating the pixel offsets

thanks MJP (edit: and Matias, good point)

Edited by skytiger, 06 December 2012 - 04:57 PM.

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.