On 21 November 2014 16:29, Robert Osfield <[email protected]> wrote:

> On 14 November 2014 09:18, Sebastian Messerschmidt <
> [email protected]> wrote:
>
>>  During my in-depth tests I found some general problem with set/getColor
>> functions if negative texture coordinates are passed.
>>
>> Right now I'm fixing this on my end, by wrapping them manually, since I
>> didn't find a clever and nice looking solution other than:
>>
>> float int_part;
>> if (tc[0] < 0) { tc[0] = 1.0 - modf(tc[0], &int_part); }
>> if (tc[1] < 0) { tc[1] = 1.0 - modf(tc[1], &int_part); }
>> if (tc[2] < 0) { tc[2] = 1.0 - modf(tc[2], &int_part); }
>>
>
> This issue affects the getColor() as well so I'll look at both now.
>

I have decided to implement clamp to edge policy for the setColor(color,
texcoord) using the follow modification:

$ svn diff
Index: Image.cpp
===================================================================
--- Image.cpp   (revision 14517)
+++ Image.cpp   (working copy)
@@ -1919,9 +1919,9 @@

 Vec4 Image::getColor(const Vec3& texcoord) const
 {
-    int s = int(texcoord.x()*float(_s-1)) % _s;
-    int t = int(texcoord.y()*float(_t-1)) % _t;
-    int r = int(texcoord.z()*float(_r-1)) % _r;
+    unsigned int s = osg::clampTo(int(texcoord.x()*float(_s-1)), 0, _s-1);
+    unsigned int t = osg::clampTo(int(texcoord.y()*float(_t-1)), 0, _t-1);
+    unsigned int r = osg::clampTo(int(texcoord.z()*float(_r-1)), 0, _r-1);
     //OSG_NOTICE<<"getColor("<<texcoord<<")="<<getColor(s,t,r)<<std::endl;
     return getColor(s,t,r);
 }

This is now checked into svn/trunk.  Could you test it out please?

Thanks,
Robert.
_______________________________________________
osg-submissions mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org

Reply via email to