What steps will reproduce the problem?
1. Create a "large" plane surface.
var verts = o3djs.primitives.createPlaneVertices(100000, 100000, 10, 10);
2. Apply a texture to it with a large multiple.
var texCoordStream = verts.findStream(that.m_o3d.Stream.TEXCOORD, 0);
for(var v = 0; v < texCoordStream.elements.length; ++v)
{
texCoordStream.elements[v] *= 5000;
}
3. Enable mipmapping (I believe it's enabled by default) and position
camera to look toward horizon.
What is the expected output? What do you see instead?
I expect to see the texture applying fading off in the distance. Instead,
I see the texture fading to black in the distance.
What version of the product are you using? On what operating system?
Latest released version (0.1.42.3 - I believe) on Windows (XP/7)
What hardware are you using: graphics card type? motherboard type?
Multiple graphics cards (NVidia, ATI).
Please provide any additional information below.
The problem is that Bitmap::GenerateMipmaps in o3d/core/cross/bitmap.cc
does not generate the 1x1 mipmap. There's an off-by-one error that causes
it to stop at 2x2. So, at the horizon when the 1x1 texture would be used,
it uses uninitialized memory instead (or more correctly, memory
initialized to 0).
Original code:
for (unsigned int level = 1; level < num_mipmaps; ++level) {
Corrected code:
for (unsigned int level = 1; level <= num_mipmaps; ++level) {
I've attached a patch for this file.
This issue was also posted on the O3D blog:
http://groups.google.com/group/o3d-
discuss/browse_thread/thread/79ced45b1d78f26e#
A sample that demonstrates the issue is at:
http://www.eoir.com/samples/texture_demo/
Original issue reported on code.google.com by chris.bu...@gmail.com on 8 Mar 2010 at 7:39
Original issue reported on code.google.com by
chris.bu...@gmail.com
on 8 Mar 2010 at 7:39Attachments: