Texture Mapping extension


Re: Texture Mapping extension
#51
Tim Gould Wrote:Sadly it is not particularly good.

Tim

This might help:
http://en.wikipedia.org/wiki/Comparison_...cs_editors

Also, Philo wasn't kidding. Corel Draw has slipped in the market, and their edu pricing is pretty sweet:
http://www.amazon.com/CorelDRAW-Suite-X5...tudent/dp/

Adobe forces you to buy an entire suite (Illustrator + Photoshop), and (as of this writing) the edu pricing on it is $350.

-- joshua
Reply
Re: Texture Mapping extension
#52
I never looked into this but a while back I read something about generating sprite's with blender and gimp. Such an approach might be useable here as well.
Reply
Re: Texture Mapping extension
#53
Joshua Delahunty Wrote:
Orion Pobursky Wrote:This is in reference to the LSC post

I've added images of the texture-mapped minifigure series 4 lawn gnome (#1) to a google+ album (images for #2 kimono girl -- sans decor on her hair, we'll need CYLINDRICAL support for that -- and #3 Musketeer were already up)

https://plus.google.com/photos/116975088...6826227105

... and here is almost certainly the most complicated design I've seen done yet (the graphics work continues to be done by an artist friend of mine) -- either with design-by-architecture or texture mapping: the viking from Minifigures series 4. I output all the textures as 512x512 this time for better fidelity (we actually had to scan at a higher resolution this time to get all the finer detail in his torso -- 300 dpi wasn't enough for this one). Admittedly, 256x512 is probably overkill for each leg, but outputting new images at half that size would be trivially quick for me to do. It all comes down to a balance of quality versus storage space.

Viking image

-- joshua
Reply
Re: Texture Mapping extension
#54
It looks impressive, although I'd like to see the figure rendered in LDView with lights turned on. Or even better, rendered with POV.
Reply
Re: Texture Mapping extension
#55
Daniel Görner Wrote:It looks impressive, although I'd like to see the figure rendered in LDView with lights turned on. Or even better, rendered with POV.

That was renderered in LDView (if that wasn't clear)

I'll try to get out a shot with lights.

One of our members who has left the fold had written code to convert/port the texmap syntax over so it could be generated in POV nearly effortlessly. I fear that work has walked with him, however.

-- joshua
Reply
Re: Texture Mapping extension
#56
Daniel Görner Wrote:It looks impressive, although I'd like to see the figure rendered in LDView with lights turned on. Or even better, rendered with POV.

There is lighting here with the pig and then some experimental work (so the texture doesn't entirely make sense for real-world use) here with a cow part. Feel free to dig around in that album some more for other examples (note that this is all experimental, research-and-development work that's 2 years old at this point).

this shows TEXMAP parts done in POV. The one on the left has been carefully drawn as an object in Illustrator format, so the texture is scalable. The other two -- the maps -- were scanned and then had their background color removed, and then deposited directly onto the tile surface (presuming I remember the details this much later).
Reply
Re: Texture Mapping extension
#57
I was just asking, because without the lights the minifig heads I did look almost the same as yours done with texture mapping. I wanted to see if there's a difference when the lights are turned on.
Reply
Re: Texture Mapping extension
#58
Here is a shot from LDView with curve quality set to max, and lighting enabled:

[Image: xdzGx.png]

(Make sure to click through to the original image.)

Here's another shot with a different color head and different angle, making the fact that the lighting is OK more obvious:

[Image: KsGmf.png]
Reply
Re: Texture Mapping extension
#59
Daniel Görner Wrote:I was just asking, because without the lights the minifig heads I did look almost the same as yours done with texture mapping. I wanted to see if there's a difference when the lights are turned on.

From what I recall, Travis did a LOT of work on getting lighting and various other issues to work out well.

I had prepared another image of the lawn gnome with lights, but I think his examples are better than mine.

Note that the texture being used for Indy's head has "fringing" on the edges of elements as they feather out to transparent. That's due to my inexperience with exporting bitmaps in Adobe Illustrator (from 2 years ago), and later textures don't have that issue (or it's severely lessened).

-- joshua
Reply
Re: Texture Mapping extension
#60
Does anyone know what the units for the 'a' and 'b' parameters are? Radians? Degrees? Something else entirely?
Reply
Re: Texture Mapping extension
#61
Some more questions...

1. Are there any meta-commands which may not appear in the geometry sections? Is, for example, nesting !TEXMAP blocks in the same file supported?

0 !TEXMAP START PLANAR ...
0 !: 1 16 0 0 0 1 0 0 0 1 0 0 0 1 somepart.dat
0 !TEXMAP START PLANAR ...
0 !: 1 16 0 0 0 1 0 0 0 1 0 0 0 1 someotherpart.dat
0 !TEXMAP END
0 !TEXMAP END

2. Is there any intention that the texture-image paths should support absolute filepaths? We do support these for type-1 lines (although that doesn't necessarily mean we need to for textures).

3. Is it the case that you use either geometry1+geometry3 or geometry2, or can you use geometry2 in combination with either of the others?

4. The description states that "If an END command given in a sub file stops the use of a texture specified in a calling file, then that texture will be restored to use when the sub file is exited." Does this mean that you can use "0 !TEXMAP END" in a file without it being preceded (in the same file) by an "0 !TEXMAP START"?
Reply
Re: Texture Mapping extension
#62
Alex Taylor Wrote:1. Are there any meta-commands which may not appear in the geometry sections? Is, for example, nesting !TEXMAP blocks in the same file supported?

NOFILE aborts the texture. I am proposing that STEP will also implicitly abort it. http://forums.ldraw.org/showthread.php?t...90#pid6390 If there are any other metas which have multiline "scope," they should not overlap a texture. I can't think of any at the moment though.

Nesting is supported according to the spec, but really, why would you want to? (I haven't implemented support for it yet.)

Quote:2. Is there any intention that the texture-image paths should support absolute filepaths? We do support these for type-1 lines (although that doesn't necessarily mean we need to for textures).

In the interest of cross-platform compatibility and relocation on the local filesystem, I would personally discourage the use of absolute paths. I don't actually support them for Type 1 lines myself.

Quote:3. Is it the case that you use either geometry1+geometry3 or geometry2, or can you use geometry2 in combination with either of the others?

geometry1 and geometry3 are mutually exclusive when drawing the file. Geometry2 (geometry not prefixed with !Smile will be displayed unconditionally, so yes, you may use it with either of the others.

Quote:4. The description states that "If an END command given in a sub file stops the use of a texture specified in a calling file, then that texture will be restored to use when the sub file is exited." Does this mean that you can use "0 !TEXMAP END" in a file without it being preceded (in the same file) by an "0 !TEXMAP START"?

Don't do it!

Again, see my proposal at http://forums.ldraw.org/showthread.php?t...90#pid6390

Allen

P.S. I have no idea what the answer to your question about units is. I hope someone steps forward to answer.
Reply
Re: Texture Mapping extension
#63
Allen Smith Wrote:
Alex Taylor Wrote:1. Are there any meta-commands which may not appear in the geometry sections? Is, for example, nesting !TEXMAP blocks in the same file supported?

NOFILE aborts the texture. I am proposing that STEP will also implicitly abort it. http://forums.ldraw.org/showthread.php?t...90#pid6390 If there are any other metas which have multiline "scope," they should not overlap a texture. I can't think of any at the moment though.

That brings up an interesting point: whilst a NOFILE is pretty unambiguous, suppose you encounter the following code:

0 !TEXMAP START PLANAR...
0 !: <geometry>
0 STEP
0 !: <geometry>
0 !TEXMAP END

I agree that the STEP should abort the texture, but what should be done with the second block of <geometry> - and should the parser report an error when it hits what is now effectively an invalid "0 !TEXMAP END" statement?

Might it in fact be simpler to just prohibit the appearance of STEP inside a texmap block?

Quote:Nesting is supported according to the spec, but really, why would you want to? (I haven't implemented support for it yet.)

Yes, that's pretty much my take on it - it's a strange thing to need to do - but from reading the spec, the only indication I can see that nesting is permitted is when one file calls another via a type-1 line. I can't see anything that would permit (or, admittedly, prohibit) the code I gave in my last post.

Quote:
Quote:3. Is it the case that you use either geometry1+geometry3 or geometry2, or can you use geometry2 in combination with either of the others?

geometry1 and geometry3 are mutually exclusive when drawing the file. Geometry2 (geometry not prefixed with !Smile will be displayed unconditionally, so yes, you may use it with either of the others.

I'm struggling to think of a situation where you would need to use geometry2 in conjunction with the others, tbh. I can see why it exists, but to me it only makes sense if used on its own.

Quote:
Quote:4. The description states that "If an END command given in a sub file stops the use of a texture specified in a calling file, then that texture will be restored to use when the sub file is exited." Does this mean that you can use "0 !TEXMAP END" in a file without it being preceded (in the same file) by an "0 !TEXMAP START"?

Don't do it!

Again, see my proposal at http://forums.ldraw.org/showthread.php?t...90#pid6390

Yes, that's what I figured, but of course as an author I can only follow the published spec... :-)
Reply
Re: Texture Mapping extension
#64
And another one...

The spec explicitly permits the quote (") character in texture-image paths. This character is not permitted in filepaths on Windows systems.

I would suggest that since this is now an official spec document, it should probably follow the same rules on filenames as in here: http://www.ldraw.org/article/512.html
Reply
Re: Texture Mapping extension
#65
Alex Taylor Wrote:And another one...

The spec explicitly permits the quote (") character in texture-image paths. This character is not permitted in filepaths on Windows systems.

I would suggest that since this is now an official spec document, it should probably follow the same rules on filenames as in here: http://www.ldraw.org/article/512.html

Not everybody uses Microsoft filesystems.

The rules on filenames from the document you cite are only applicable to files released in the official library. They most absolutely do not apply to user-generated LDraw files. Since they would already cover texture files released in the official library, I don't believe there is any additional specifying is necessary.

Allen
Reply
Re: Texture Mapping extension
#66
Alex Taylor Wrote:That brings up an interesting point: whilst a NOFILE is pretty unambiguous, suppose you encounter the following code:

0 !TEXMAP START PLANAR...
0 !: <geometry>
0 STEP
0 !: <geometry>
0 !TEXMAP END

I agree that the STEP should abort the texture, but what should be done with the second block of <geometry> - and should the parser report an error when it hits what is now effectively an invalid "0 !TEXMAP END" statement?

Might it in fact be simpler to just prohibit the appearance of STEP inside a texmap block?

This is actually a question of precedence: which is the higher-level object in the file: the step, or the texture? I argue that the step has higher precedence than the texture. In other words, when parsing out the logical structure of a file, one looks first for the steps, then for the stuff inside them. When we look at the file you've shown, we see two steps, containing the following:

Step 1:
Code:
0 !TEXMAP START PLANAR...
0 !: <geometry>
Step 2:
Code:
0 !: <geometry>
0 !TEXMAP END

There's no such thing as a step "inside" a texture. There are textures inside steps. This should make sense, as everything in a model must be in a step (even if it's only an implicitly 1-step model).

So now the question is whether either of those steps contain illegal statements. In my opinion, they don't. Step #1 definitely doesn't. We already know that TEXMAP can end when it runs out of scope at the end of a file, so it's perfectly legal (though unsightly) to have a START which isn't balanced by an END.

Step #2 is more debatable. However, in the spirit of how LDraw works, unrecognized type 0 lines devolve into comments. Since neither line in Step #2 has meaning without being prefaced by a TEXMAP START, I consider them stray junk in the file rather than parsing errors.

Allen
Reply
Re: Texture Mapping extension
#67
Allen Smith Wrote:The rules on filenames from the document you cite are only applicable to files released in the official library. They most absolutely do not apply to user-generated LDraw files. Since they would already cover texture files released in the official library, I don't believe there is any additional specifying is necessary.

Allen

D'oh! I really shouldn't post late at night... :-(
Reply
Re: Texture Mapping extension
#68
Allen Smith Wrote:There's no such thing as a step "inside" a texture. There are textures inside steps. This should make sense, as everything in a model must be in a step (even if it's only an implicitly 1-step model).

Interesting. I hadn't considered looking at the file like that (probably because I rarely use the STEP command), but yeah, that makes sense.

Quote:So now the question is whether either of those steps contain illegal statements. In my opinion, they don't. Step #1 definitely doesn't. We already know that TEXMAP can end when it runs out of scope at the end of a file, so it's perfectly legal (though unsightly) to have a START which isn't balanced by an END.

Step #2 is more debatable. However, in the spirit of how LDraw works, unrecognized type 0 lines devolve into comments. Since neither line in Step #2 has meaning without being prefaced by a TEXMAP START, I consider them stray junk in the file rather than parsing errors.

Allen

That seems reasonable. And if you encountered this:

0 !TEXMAP START...
0 !: <geom1>
0 STEP
<geom2>
0 !TEXMAP FALLBACK
<geom3>
0 !TEXMAP END

then all three blocks of geometry will be rendered when textures are turned on, but that's fine since it's user-error.
Reply
Re: Texture Mapping extension
#69
As far as I know, the units should be in degrees. The spec should be updated to reflect this. One of the design goals was to make it easy for part authors to use textures. In my opinion, using radians would go counter to this design goal.
Reply
Re: Texture Mapping extension
#70
Allen Smith Wrote:Step #2 is more debatable. However, in the spirit of how LDraw works, unrecognized type 0 lines devolve into comments. Since neither line in Step #2 has meaning without being prefaced by a TEXMAP START, I consider them stray junk in the file rather than parsing errors.

I agree. Any 0 !: lines that appear when not in the context of an active TEXMAP should be ignored. Assuming we ratify your suggestion of having STEP abort the texture, these would be ignored.
Reply
Re: Texture Mapping extension
#71
Travis Cobbs Wrote:As far as I know, the units should be in degrees. The spec should be updated to reflect this. One of the design goals was to make it easy for part authors to use textures. In my opinion, using radians would go counter to this design goal.

Cool :-) Reading the spec, it appears that only positive values should be used - is that correct? If so, and on the assumption that specifying an angle of zero makes no sense, I'd like to see the spec make explicit the range of allowable values: for example, 0<angle<=360.
Reply
Re: Texture Mapping extension
#72
I think we left that unspecified until first implementation, so it could be experimented with and changed appropriately if any issues popped up in the initial impl.

degrees is the most likely preferred value, and it would have been degrees unless we ran into problems with that.

-- joshua
Reply
Re: Texture Mapping extension
#73
I realized in reading over some of this thread today what some of our misunderstandings have been...

7 and 8, the way we set up the spec (only in part files, TEXMAP is meant to bind decorations to parts instead of "design-by-architecture" means) shouldn't be an issue. The idea was to have a design encapsulated within a part definition, and the texture stack support was only for the very rare case that an s part need to have nested textures upon them, while the part using the s portion also was in the middle of a texture definition. So STEP shouldn't happen in the middle of a TEXMAP definition.

- joshua
Reply
Re: Texture Mapping extension
#74
Dear LSC,

since you're working on this please define also the restrictions for the PT such as resolution (how many pixel per LDU) or naming conventions.

I also think that some extensive examples would suit the specs page.

w.
LEGO ergo sum
Reply
Re: Texture Mapping extension
#75
Presumably the plane in PLANAR mode is supposed to be rectangular? If so, this should be made explicit in the spec.
Reply
Re: Texture Mapping extension
#76
I'm not entirely sure I understand your question.

The currently language formally requires the specified points to be three of the four corners of a rectangle. It doesn't actually state this, and I don't have any real objection to calling that out, if that's what you're asking for. However, since P1 and P2 are are both perpendicular to each other and to the texture plane, the input points must by definition be three out of four corners of a rectangle (unless I'm mis-reading).
Reply
Re: Texture Mapping extension
#77
Yeah, that's all it was - IMO the spec could be slightly clearer than is currently the case.

On a related note, though, since in practice the three points can be literally anything the user cares to type into their text-editor, is there a recommended behaviour for renderers when faced with a set of points which do not conform to the spec?
Reply
Re: Texture Mapping extension
#78
JC Tchang informs me that he created drawings explaining cylindrical and spherical mapping. These drawings can be freely used to illustrate texture mapping standard text.
[Image: cylindrical.png][Image: spherical.png]
Reply
Re: Texture Mapping extension
#79
Very nice pictures,

Just curious but when using these kind of projections do the part author compensate for the deforming in the supplied textures ? If so many of those textures would be part specific (even while being the same pattern). And since there already is some discussion about naming the textures.. Smile
Reply
Re: Texture Mapping extension
#80
Good question!
Reply
Re: Texture Mapping extension
#81
Fro memory it's pretty rare for a part to truly have print on a highly non-Euclidean surface, except minifig heads.

Do you have any examples where the same print is used on a flat and seriously curved surface? If the curve is only slight, then the print will come out pretty fine on either.

Tim
Reply
Re: Texture Mapping extension
#82
Willy Tschager Wrote:Dear LSC,
since you're working on this please define also the restrictions for the PT such as resolution (how many pixel per LDU) or naming conventions.
I also think that some extensive examples would suit the specs page.
w.
I too would like to see practical recommendations, especially about resolution. Joshua's examples provided by Travis here seem to me on the lower end, resolution wise.
I also remember seeing here a request for power of two size of images, but can't find it again???
Reply
Re: Texture Mapping extension
#83
About the power of two thing, I think you mean this comment by travis:

http://forums.ldraw.org/showthread.php?t...73#pid6573

but like I wrote in my reply to it, I don't think it's a good thing to have.
Reply
Re: Texture Mapping extension
#84
Thanks, Roland. As for resolution, I figured that a correct printing resolution is 300dpi (already pretty good for a silkscreen process!), giving a mere 189 pixels image for a 2x2 tile... In this regard, provided example are OK.
Reply
Re: Texture Mapping extension
#85
Or 192px Wink ie. 3x2x2x2x2x2x2 Big Grin
Reply
RE: Texture Mapping extension
#86
I've been talking to Joshua by email but I think it would be better to discuss here so that others may participate.

I've implemented support for cylindrical projection, but I have some questions regarding spherical:

The picture is nice but it's missing the location of point 3, which I think should be defined in the standard. Without it it's unclear if one should do (p3-p1)x(p2-p1) or (p2-p1)x(p3-p1) to calculate the horizontal plane normal. If the plane normal isn't defined then some implementations could "flip" the textures and draw them upside down.

That led me to think, it might be better to define the sphere similar to how the cylinder is defined: p1 = center, p2 = front and p3 = top. This way part authors could have an ellipsoid to define the projection and different scale values for u and v. Even if the different scales are not useful, having the up direction defined would be better IMO.

Also, I think the spec should state that planar projected textures are clamped (it's implied given that it says uvs go from 0 to 1). Maybe adding an extra parameter to allow uvs to wrap would be useful so that we can have tiled textures, but I can't think of any parts right now that could use it besides a few checkerboard patterns.
Reply
RE: Texture Mapping extension
#87
(2018-01-26, 20:23)Leonardo Zide Wrote: The picture is nice but it's missing the location of point 3, which I think should be defined in the standard. Without it it's unclear if one should do (p3-p1)x(p2-p1) or (p2-p1)x(p3-p1) to calculate the horizontal plane normal. If the plane normal isn't defined then some implementations could "flip" the textures and draw them upside down.
fyi: I used (p2-p1)x(p3-p1)  in LDCad, don't remember the reasoning, could be as simple as the default 'find normal of triangle' function I've used does that.

(2018-01-26, 20:23)Leonardo Zide Wrote: That led me to think, it might be better to define the sphere similar to how the cylinder is defined: p1 = center, p2 = front and p3 = top. This way part authors could have an ellipsoid to define the projection and different scale values for u and v. Even if the different scales are not useful, having the up direction defined would be better IMO.
I think using it as a CW or CCW triangle might be clearer we just need to state if it's CW or CCW Smile

(2018-01-26, 20:23)Leonardo Zide Wrote: Also, I think the spec should state that planar projected textures are clamped (it's implied given that it says uvs go from 0 to 1). Maybe adding an extra parameter to allow uvs to wrap would be useful so that we can have tiled textures, but I can't think of any parts right now that could use it besides a few checkerboard patterns.
I would be open to that.
Reply
RE: Texture Mapping extension
#88
(2018-01-26, 20:23)Leonardo Zide Wrote: but I have some questions regarding spherical:

I'm very interested in the way you are planning to implement it, In LDCad I decided to use a slightly different approach then the one described in the spec as  it helps with full spheres and doesn't seem to affect other usage (much) visually wise.

I'm using a "Latitude/Longitude" approach, resulting in this:
   

when rendering the attached mpd.

The strict method won't allow that far I know.


Attached Files
.zip   sphTest.zip (Size: 590.15 KB / Downloads: 6)
Reply
RE: Texture Mapping extension
#89
(2012-11-15, 9:02)Philippe Hurbain Wrote: JC Tchang informs me that he created drawings explaining cylindrical and spherical mapping. These drawings can be freely used to illustrate texture mapping standard text.
[Image: cylindrical.png][Image: spherical.png]

The SPHERICAL image is missing (x3, y3, z3).

Any chance we can get an update?

-- joshua
Reply
RE: Texture Mapping extension
#90
(2018-01-26, 21:39)Roland Melkert Wrote: I'm very interested in the way you are planning to implement it, In LDCad I decided to use a slightly different approach then the one described in the spec as  it helps with full spheres and doesn't seem to affect other usage (much) visually wise.

Thanks for the test mpd and for explaining the conventions you're using. I hope we can convince Joshua to clarify the spec but if we don't, at least our apps will be consistent.

I also tried following what the spec suggests but I don't think the value of v can be calculated that way. This is what I used, it's probably similar to what you mean by longitude and latitude:

Code:
lcVector3 VertexDir = Position - Center;
            
float DotPlane1 = lcDot(lcVector4(Position, 1.0f), Plane1);
lcVector3 PointInPlane1 = Position - lcVector3(Plane1) * DotPlane1;
float DotFrontPlane = lcDot(lcVector4(PointInPlane1, 1.0f), FrontPlane);
float DotPlane2 = lcDot(lcVector4(PointInPlane1, 1.0f), Plane2);

float Angle1 = atan2f(DotPlane2, DotFrontPlane) / LC_PI * TextureMap->Angle1;
TexCoord.x = 0.5f + 0.5f * Angle1;

float Angle2 = asinf(DotPlane1 / lcLength(VertexDir)) / LC_PI * TextureMap->Angle2;
TexCoord.y = 0.5f - Angle2;

Basically I project the vertex into p1 and get the atan of that point for u, and then for v it's the angle of the triangle where the opposite side is the distance to plane 1 and the hypotenuse is the distance to the center. 

This approach works well except at the north/south poles and at the back where the 2 sides of the projection meet (u jumps from 0 to 1). I only have the vertex positions when I calculate the UVs, I need to change how I do things so that I have triangles instead of points and then these problems will be trivial to fix. Did you run into similar problems?
Reply
RE: Texture Mapping extension
#91
(2018-01-28, 0:29)Leonardo Zide Wrote: Basically I project the vertex into p1 and get the atan of that point for u, and then for v it's the angle of the triangle where the opposite side is the distance to plane 1 and the hypotenuse is the distance to the center. 

This approach works well except at the north/south poles and at the back where the 2 sides of the projection meet (u jumps from 0 to 1). I only have the vertex positions when I calculate the UVs, I need to change how I do things so that I have triangles instead of points and then these problems will be trivial to fix. Did you run into similar problems?

I do something similar indeed but when the angle results in 0.0 (uv 0 or 1) i look at the previous and next vertices in the mesh to decide on 0 or 1, this is not fool proof because the positional soup of LDraw doesn't guaranteed them o be close by.

But in case of the sphere it works very well. I think in practice part authors should avoid such situations by splitting the texture into two.

Having triangle info on the mapping level would indeed solve it, but like  you I'm working directly on the OpenGL float vector array. I do have the triangle information in the smoothing stage of preparations, but it's a bit messy to preserve that data into this stage. Something to consider for 2.0 I guess Smile

edit: With "longitude and latitude" I meant rotating one of the reference planes along with the angle found on the other before finding an angle on that one.
Code:
TGLVector3d curDir(false), baseDir(false), curNor(false), altRestDir(false);
  double baseAngle;
  for (int i=0; i<pntCnt; i++)
  {
    TGLVector2f &tc=uv[i];

    if (doStrict)
    {
      //Spec methode, geeft problemen by >180
      tc.u=calcTexCoord(dPnts, pntCnt, i, horAngle, horNor, restDir, curDir, NULL, baseAngle);
      tc.v=calcTexCoord(dPnts, pntCnt, i, verAngle, verNor, restDir, curDir, NULL, baseAngle);
    }
    else
    {
      if (verAngle<=M_PI)
      {
        //horizontaal dominant
        tc.u=calcTexCoord(dPnts, pntCnt, i, horAngle, horNor, restDir, altRestDir, &baseDir, baseAngle);
        curNor.loadFromCross(horNor, altRestDir);
        tc.v=calcTexCoord(dPnts, pntCnt, i, verAngle, curNor, altRestDir, curDir, NULL, baseAngle);
      }
      else
      {
        //verticaal dominant
        tc.v=calcTexCoord(dPnts, pntCnt, i, verAngle, verNor, restDir, altRestDir, &baseDir, baseAngle);
        curNor.loadFromCross(altRestDir, verNor);
        tc.u=calcTexCoord(dPnts, pntCnt, i, horAngle, curNor, altRestDir, curDir, NULL, baseAngle);
      }
    }
  }
Reply
RE: Texture Mapping extension
#92
I found a way to keep the triangles when calculating texcoords and now it all looks correct (or at least matches your screenshots):

[img]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIoAAABuCAIAAAB3MBynAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAElEQVR4nMy9d5hlR3UvuirsePI53adzmunpSQoDyiAkLESySEYiCcsagTEGTLQfNsYYbIyNE1yD8bUf1yDhIAwW+NoYhGyEEMpxZqSJ3dM5npx3qnD/qO49Z04HDfxx31vffPP12bFq/XatXFXojjs+KIQQQhJCstm0aRorK7lm04GtCCFEKYlGIwihWq3BOZdShmdt20okorlciXO+5e0AgDEyDMMw9Gw247oepVTXtVKp4vu+6/qu66nLTNOwbYsQbJqG5/nJZLxSqTUaLd/3Gdv24bqupVIJjPHqar69YYSQVCqRzaZnZxdbLVcdPHz45jvvvOfw4ZsB4M4778EYaxrt6emybWthYbnZdHRdwxgLIffv37W0tFarNXw/CB+IEEgJGCMAEEKGXUYItb+6o+O9vV2O462u5sMrCcH9/T2u6xUK5c03og984OOGoQshbNusVhue5zmOt+ULFBmGnskkAdDqal4IER6nlGazadu2FhZWPM/f8l5CiGHo3d1pzvnqaoExpmkUISyl2LVrqF5vlss1x3E3LsYASHVMShCCCyE3uorbX91Otm12daWFEMvLOQCQUkopDUMfHOytVuuFQjnEJrzlzjvvUW+xbSsejxYKlSAIOtDdtWtoeTnXajk7cEYBrOtaMhn3PD8ej66s5DwvkHIdPISQrmtdXSlCiOt6nuen04lYLDo/v9xqOSH27USr1TpCCGNULFbav3pKqRocGKOQLwAQBEGt1shkUr29XWtrRYRAnY3Ho4lEfGlpdTtsFOm65jhuuVxV7woCpo7PzCz29na3d55zsfHHudvD/qtRZdvW2lohCIIgYOpRrZabyxUTiVhvbxcAeJ7f3Z1hjK2uFnzfRwjdfvubQ0hCqO666zsYE13XpJScs/ZmYIxMU1fvbTZb2/WLUmrb5sjIQL3eXFxcoZQ2Gi0hxIED47lcsVSq+H4gpfQ8f3U1jxBGCADAdT0hVjnn7RxuJ3Trre9t/40xNk3dNI1MJuW6nq7rAFCpVF3XD4IgRNi2zWg0oj5M3w/S6WSlUqvXm57nM8a2x0ZPJmMIoVyu2M4CSkk8Huvt7ZqbW96OBRhjSklXVzqdTiwtrVUqNV3XCMGM8fHxkVKpWqnUQtlICEFIjTwMIIWQjLFQjm2WPwohNbIBYGlpTQ07dTaVSkQi1vJybrshq2R+Op1sNJodegFjvGvXUKPRyuWKHberFoZvIQQrUQ8AlmU2Gk3P88nFF1/e9g4aiVjZbJeUsLy8pkRNrVbnXIyODjDGhZBK9AcB8zzfcbxm0/E8v1yu1utN3/dVC5Q4ClsQkmpKMhnTdd1xHISwOoIxyWSS5XK1Wq1v2X9FhqHrura0tNZsOkpiBAHjXJRK1Z6ejOf54dcjpRQbxDn/lV/5pUOHDtx113dOnJi0LDOTSSk1wxhT+uOZZ44fPnzzU08953k+pbSnpwsA6bqWSMT27dvt+4ESLdtJNoyxYWimaTiO26EaKSWmaWCMd+gaxohSmk4n9+wZZYxXq3WMsWHoAwO96L777gtHOqU0lYoHAWs0mh2vsW0rm80sLq7uMDgAQNOoYejxeIwQLKWklBYKJcVEdSPGyDTNTCYZBEwN9u7uNEJoba2gxPF2T6aUxmIRTaMdQhhjbFnG0FB/Pl8sFivtt4QK5q67voMx1nVteLhfSrm4uCKEpJQAoOHhvkqlVixWPM9XxgIhRCl8hJCm0SBgQogd7JGweel0Ih6Pzswscs7DAYox7u3tqtUajca2ghFjbFlmJGIVCmX1favbEUKEc/vw4ZuPHDmpOhCLRVzXc93z2KTrWiaTsm2jUqltN8AV4NlsJpvNlErVQqEUBNx1PULI2NiQ63pCCM6FlMAYbzYdx3Edx5VSVqv1UqnSark72HsAACARglQqYRh6q+UoqwEApJSWZUopi8VK+HUfPnzzoUMH7rzzniNHTh45chIhhDFOJKKlUmVlJR8EjDHu+4EaFtlsxjD0ZtN59tnjhw/f/OyzxzcGnvT9gHOhFAPGSNM0TdN0XbMsU8lVjNcFgBBCPfCiiyYajRYhGCHU15fdvXu4VmvW682dbQrLMjkXnue3X4YQWtc96sPRdc22ra6u1OpqvtFohZ+Armu9vd3FYnk7gxsACCG2bRqGUa3WQoWvyLLMPXtGJydnQ6tsS1Jfq65rhqEHAbNtq1yuMsYBZGgmKMMMANSHouv60FBftVrP5Qqe53MuQgXT0X8lqarVeqifFGka7e7OAEhl6cHGmOt4gtL8Q0P9vu/Pzy/H41FKiW1bykQMBz3GWAFj2yZCmDHmeT7nPGz/lqT0/f794ydOTHWwCB0+/BsA4PtBG0JmJpOqVGpCSCllT08X5zyfL7VaTgff216AKNUSiWgQBLVa83yDm0Sjkd7e7tnZxQ7WdLBJ1/WBgR4AWFxc1TSqaZoQYni4b3Z2qdVyfd8POUXpuubXNOr7AWO8XfNvfrgCvre3Wz28vXmE4Gw202w6tVqj/RbFjfAayzJjsUiHS4cQGhzsjUSs6emFUO2F6ja0aUMWYUzU504IVteHA4AQrGna6OhgsViuVuucCynlwEAP+sQn/hAhlM8XWy339tvfrIQvIRg27HSlgbcDpp2/lmX29/cony58MUIonU4ghEKfYzMpqyyZjNfrzY7PR9e1AwfGZ2cX6/Vm+A2Golm9IgRGmT0AiBAcBAFjvN1IMww9mYyn08m5ucUgYFJCOp0YGRlYXc2vruYZ69T8IUJf/vIfq5cqIan+eO97fwshZJpGJpPM50s7aE2EkBItw8P9vh9Uq3WlQWzbmp9f9v0g1DeUkkjEVr2wbatWa6DbbnvfwECvEEL5ie1fzSYmIl3XMcYIASFEStlotJRXpDqmadS2rYGBntXVvBI10WhkYKCnXK7mcsUOwdpOlBJd1yMRq1LpFIymaXR3p+v1ZqVS67irXfNrGjVNY3CwNwhYPl+MxaIAEI1GCoVStVoPP21KqaZRhFAkYmGMOeeNRosx1qH5/+IvPq1gIBvUgY1t2+ERSqllWa9+9S3bwUMp7e5OG4a+sLCsvjDlVsfj0YmJsePHJz3PDwe0+p4wRgBISone9a4PZbMZz/PX1gphtzfJbqRpmm1bKiaRyxUSiRhCWNMoIXh1Ne+6nhrIhBBKCSFY1zWEMAB4nuf7bGd7jxBiGNro6ODS0lqHAargKRYrrdY5tdchxyil8XjUssy1tbxitOo/IWTv3rFqtZ7LFTtQV8xtd24A4M/+7FMYY9JGlNJIJLL5qwqPYIzDPwghsVhsM06EkLGxweXltc3hmEjEjseja2v5bd3Sd73rQ+l0slyutkuVdoTCQWcYerFYUYzeABkPDfVRShYXzwsWhGfb+68kmBBSSkEI6RC+lFLT1Pv7e0qlSq3WUJd1daUHBnpWVnKh0N+sYFTzurszjUZTOert3YtG7VgssrbW6RKexwKE/vM/v+m6LmNMKFEgpQ9AAfA2t2wRHEModIQNw3jTm24Lj6uYUKFQKpWq7bcQQrq708lkbGpqfrvPF/3RH/15LlesVGodAzxESKn9ZDLWajmtltveT4xxPB4xTXOzS9xOynCybauvr7vZdBhjkYhVrzd1Xcvliq67PrSVerQsU9MoAFiW2Wy2mk1HaZHtNL9S+/39PZ7nra4WOmJlmUwyHo/OzS1tpzt/8INvua4bBEEIDADw84FB59+ynYhuMwpQO0gqFjc42FuvN3O5YnhZLBYZHx85e3Z+B48VvfvdH26Xfe2kEFIqp6+vOwy1tvc/m81QSpaXc9t5LYRgXdez2Yzv+7lckXOBMcYYMcb7+3vi8ej8/FKIELTJJQCQUvzKr7xZHb/rru9gjDgXHbEQaHO5goCpFgohMEaZTGpkZGBycnbL/n/60x+77LLLPM9T4YDwgdu5JyFIWw4d2P7sO9/56wCg4hScC0qJ63pjY0O5XHF5eY1zsYPDdy7mphSg8nhDZqlv9h/+4bumaXR3ZzzPy+dLUoKUAmPS35+NRu32KP1mwhjHYhHbtvL5UscQxhj39nY3Gs0Oo7b91WGo37KM/v6eer0ZjUaazVaz2VK2XBgM1jSaSiUAQAVXBgZ6V1ZyytbY3P977/12q9Vql2brzN2uG4pZ6poNi3TLazbDI4S47bb3w/mKSkrZ7s9t+8Zbb32visSk08lUKp7Pl5LJeKVSZ4zV681QsHzjG981DD0ej0opQ8tvdTWvXOUdYoWEkFQqbllmh8MBAJGIPTzcVyiU8/lS+/F2Oaa8v9HRwXK5qsZo+PbR0YHJyVnPC0LUlWUV8k65/mFLQt5973t3K03TYRrAJnjQpuNbY3I+bSn9RkZGrr32tWFjzhfCGGOcSMR8P0gkYirCpMKG6PDhD6bTiWQyvry8Vqs1CMGEEM5Fd3c6lYovLKw4jsc5D+NRyuFQQc/20RDmHTbHg03T6OpKYYwXF1fVKSklIaSvr5sQsrCw0jFY2xWMUvutllOvNzer/ZGRwdOnp3c2C5XtQCnt6kq9851vppReeumlHQJNNWm7AdFxTUfcZcvLtry9p6fnxht/qf2I8lX7+rpHRwfOnJktFiu6TnVd7+/vabWcxcVV9Ku/+hHlWG126Xt7u4UQYZxuO5dI06im0UQirmlUqY1Coez7vpQyNDdM00ilEoRgFepOpeK2bS8vrzmO6/u+EHKHYExXV0oF5dpPqWBEX1/35OTcDvAoj2psbIhz/oY3vErTtEOHDrVj43mepmntY25LCjkeXvOzaiBFyWTyppve3t7BRCJGKelIlSKERkb6bdtCH/jAx01T35yBtixzeLiv0XCWl9faQ43tHFRaobe3O5WKz8+vVCo109SVuzAyMjA1Net5fmgybTh35+QM5zzU/Nv5wpTSeDzS29s9NTXn+0F7MEK5a5vd1Y7b0+lEo9H8wAcOU0pf/OIXK2wKhYKmabqu67rebnFtfkIHoy8Eg+3y2YoJ0Wj0da97h/qJMe7qSrmutzlmallmV1eKep6XTMay2fTaWkHK9uwQabXctbXzTFWVnA9ZiTGyLEPlB5WWC79xzvn4+MipU9MhPB3wh8OFEKJpNBq1pZSGYYRpXTVkGWO1WpMxfskl+6am5oIg4FxkMsm+vuzycm6H9KVyRFR07j3vuVV9NJzz+fl5wzAopSr83MHuLRNUPwdthxDnnFL6ox/92yte8abwFaOjg88/f7rjcowxxpi6rr+2Vujry/b399RqDc6FaepDQ/2VSi2XK0jZqfNDhFSAQ9f1Vsvd/GgAqNebWzrD7SaZrmvpdHJgoEdlfAnBiUQsm80UCqVisarCoIyxZrN19OhJhLBtm7qOGo3WsWOndo4Eh3H+TCZpGIby6mdmZmgbhabUDk/YgXYYJbApGRoS57xYLKq/hRClUtVxvEOHDhw/PskYl1IIIbPZzMTE2PT0Arr11vdijDZiGAQAKCWeFwTBTpEYhZCm0a6uVDQamZ5e6BgcyWRss7u6ORiTySSFEMViud2sIATv3burVmuoMGAHOzbXgYROEiFERTbbs2Ef+9h7CCGXXXYZ53xxcdEwDH2DtpRmOzB9M5ybbb8LkZAYY03TbrnljvCnknIqk9LdnSoUKmtrBSHEOb8nDMa1izgAUD68EFIloNqtrDvvvMcw9EQi1tWVOnt2XvkQmqaNjAwgBDMz6xmEMHZ5vt5ChJCenq5CodwRLcUYxWJRw9BDq2Q70jRKKR0bG8QYl0rVeDzaaDQppcvLa6qpH/3or1JKr7rqKsbY7OysoYq4dF3TNErpls98QXg2Wwcd5vuW1JlnQ8g0zTe/+fZQlW58T+vB0PVYV8f9oThCCGmaput0cLAPISiVqolEzHFc0zSWl9c8LwilXKlUbbVclRFhjGmaNj+/rKpndsjBqEYmEvFGo9lhNCKEIxFLhfi2661Ct7e327LMM2dmGWMIIfXFdXen9+8fP3162vcDjPE111yjzIHh4eFCoUAIUYJuy8e2m3A7BNbaL1ZOAudceV07h3zO+b9ShhksOA9p2e59dVbqhJ2nVOvqShqGPj+/ogQXpYQxHo9Hx8dHpqbmmk0n9IfUmEMIVHWHEKJdwahamc1voZToujY42JfPlyqVmirsQwj19nYPDPQcP35mh2AEANi21dvbvbi4srlCLJNJ2rZ1yy033XDDDa7rhpZ0uVxWQ0fTtO042PGzffgqU6LDmpBSBkFAKQ1dOthRb4UGiNLcN998eLsrMcbbwmOaZjabXl7Obe58Mhm3bWtlJSc3smEdZWMAcOed96i0ZiaTTKeTpVIllUqsrhaCIFBRUXWxUng9PV2+H2galVJ2daUXF1drtXq7IN2y6bFYJJmMh0ZjSMrWf8c73nTjjTc2m+v1Q6qp1WpVwbN59GyJTfi/Ghmet222FwA0TZMbBBdm9WGMu7u7Qytu89kt5K9qja5rUsJm00hVASonRrUglHJtIwapHH5/f3Z2dvH5588QQvL5khByz56RVstdWVlHnXMuhFhaWlVvxhitrOTV+Nu5Y1LKZtOxbXN0dHBmZrHjel3XXv/61/u+ryI37R1Wvdvc5c0/URsp7b1zk4Ig0HVdtWRzfKGj8aGsK5e3TSKbpr4FPMrbdxw3ErGHhnrn51faO6+KVBYWljsiMR1jSFUKHDt2SsEQDpfTp2fGx0dSqUQ+Xwp7wvl6N9qtP+W1qFHCGLdts1BQ2SapwpiMsXy+nE6L/ft3Ly2tqmD22Nig77NvfOP/bY+qhWyKxWKqVrS9v9vZb7DxpSraTl21k4JwZ4TCsaXO7mAeu66PPvKR3wUAFVdQFQgh31WUnhBSrdY556ZpjI4Orq0Vcrmi729RFhMiRAhJJGIAUK3WOsafrmv9/VlVartDP5VaGhsbAoCZmQWVhMYYj44OPvfc6fYgtCqOAQBKqWHozWZLCPn+99/2i7/4i+0x6fDJSk+EPzdj0yHQwsxptVqFCyDTNNersM7/MkLabMIZhnHLLXeoJEsnH8rlqm1bnJNsNqOq6Hw/UJ33PH95OacqQ9RDjxw5oWL4W5pkbTEF2Wo5ExNjQRDU682OxqlCyB16qERrKpU4fXq6o8WO473oRQeOHj2lCucAIGREELAw4fuWt7xlMzCKlIYIubNlAzpkmoo47NDgdtpwws4bIu3d77heDaDe3q5IxHZdT9e12dnFc0Uvt976XrRR+NLXl02l4pOTs+3mQMcL2jW/6p0QUiHfbilQSjRN27NndHFxtdlscS6kFEND/ZlMcmZmcYdyRsWXRCKmaVQFCtvfrhLAjuPuAPDv//5HX/7yl9dqNd/3t6u8Db2NzW+HNpmmxo2y9NbW1rZ7YwfZtq10amcyaauWqP46jvPud39ESplMxi++eOLRR48ooUfbb6vVGhh3isuQ6eqnAsayzIGBnkQitrCwoibiAKBarV6p1MIxJKU8eXIqErG7u9O+H0QiVqlUVUpiB82v4gKUkmw2s3nKi4rO7Ww4NJtNNXR2uGYH/7HDIgiF2w5P66BWq2VZVjh00Kaak3aS5xdlVCq1xx8/evDgnuPHJxlj50lh2zYppR3P2RSJIalUPJNJLiysTE3NAYASfQihSy/dTwgpFsshQpyLarVeqdQwxptDANuliIQQKg6tHKzQbSKEjI4OSil2cFcBwPf9733ve9dff/3OzgfsCBK0FbZdoF2w+d6wazsb2fL8UKyUknOu65QxRlUIC2Pc19fd15c9depsaEtsk4MhmUxqfn45FPQbglIeO3Z6ZKS/WCxDmx7aCEacA0aZZIrXrZajpqCUy1VVZ6IEQhCwcrnGGB8a6kMIWi03nU4SQmZm5n1/i+R0SF/4wh/Mzs6G/dyZiTuIuM1jaOdHdVCr1TIMQ2FzIU5CewQhHo8WCmVV5k77+7MIITUajh07pVTxdsEYjLGmETXRp6PzhJBo1LZtixCikggd2Qc4Z6joe/aMBgE7e3aOMaZERzQamZgYO3bsFOfreDPGqtW60jEIoVKpIuULJ+fVxLYdfA7YBFu7G99+vB2encfZloQQCoItJrxtSRjjr371C5/4xB/t3797ZSU3PT2v2khXVvLKGVRf7o5RsvU6/Hq9uWvX0Nmzc+3MklImk7H5+eX2AFoHQlJKjFEsFpmdXQzLP4RgQcBc12OMHTq0/5lnTgCI8HVhVzvsUaXtIhFL9a1Wa6hhp4b+Dths6WeE12/nsc7MzGz3wC0pGo267k4RqQ7SZ/RaXw0hePjhp8PcNABQIQTnsr0gllJiGLptW8rXKZWqQohQAQQBK5WqUsqDBydmZxfV3JeRkX7LMmdnF5vNVgcr2xFScUyM8eaqM4wRY6xQKG/5mZ5vvGHTNMbHRzgXU1Nztm1pGh0e7lOx0VDuPfTQQ1dfffXOj9pMbT6fEV5/IeGZkHp6etSgMU3zZ0JISqlMofMqYdrnWqrZcSMjg1LK2dlF0zQQQtlsurs7ffr0TOgMMsZKpWqt1kAI6boWieizs0tqHtqWoc8QISGkEDIWi+i6Nj+/fH7jgFLqut5ORV8IIYRisWgiEXvuuTOKlWqwIoSGhvr279+9MyubzZ3m2bRTe3itr69vhyuvvPLKIAh83/c8T931M8EJAGgaIUAA0DHvlRBC1Q+EEMZIlbyeOnVW8SgsaxZC7tu3+8SJydDR45yra1zXC8NH4fsIwSpppFJE0IYQ53xmZrG/P7t79/Ds7JLSnBjj8fGRWCxy8uTZF+yamqbToW+llO2FWqoxTz/99Itf/OKOyxT9TLpkZWVlaGgoTOJRVUW+Eb9hqoR+w9Fpjxdomnbh6kdK2VYlgCcmxiIRi7b1B8dikWq1vjmBnc+XCMFqMs2Wz1V/qBDIY7mK4/q7uuoLlVjLIx9+DRnoGymX86R1/LprtMeefSbfaN04cVMjt1ofWLriotGjx1KJRGx2dtHzAiG2nb8JG6qLUmJZ5uYKEF3XotFIqDwUg55//vmDBw+qI8Vi8eeDBwAYY6GBoD4ptJFu4JyzDdqM0As+GU0jAAAJPbM9b4bb1cFIxGo2W1NTc+vwKLlhWabjeEKcV7Op/KFEItZsOgi5273y6XrQrNf9wI+a6JrRtd3dqXRXbHpxcXJOPHtymvLI5OxavZTzsPaem970zQe+b1lGs+JOm1ZCK/VGMrGJ1mPP4vaXbvkiIeTc3PLo6EBPT9faWiHkF0Kor69b2YHqypBBZ86cmZiYCNn6s+oSRQqDjTaIcOa38lFYG4UIXchj17EBgPMz1BhjVdx5bvRIKefnl0dHBxlj6ttEG7n9vr5suVzdsmTpqWK15QZ+wASmEgCD9rKhIrWyQLq/9J9rdWZjjhiyXznY+Mbj6JfGo33Znn/4wU+ikajjQCqdKNWC5bWZqXkcjUb2DqUwTZ2Z1xSvm00nnU7k8yU13TlkN+d8dnZpfHxE06jn+a7r9fR0pdPJqam5arWugmPhxSGnlpaWFDbqyM/qx4QGoZRSSbZ2eBQpEaekXNiAzZURW2AD67ZqaEPVao3BwV5CMA3vV7pkenp+z55RVV8QBGx4uJ9zMTMzv1msPVtu1BqNADAgIjClID90fddb3/r+aHcPkvzbDz7+3++ckEi85+OfvvHQ5TqOTDWO/vtZKadqiKTetgfAqM6t1rqz6b7B0Vq56Pr+YydOxOPx2266mTPvB4+UXddrNJqmaRw8uKdQKKtlBVSfGWNnzswAgGHoALC4uDo9vaBOhbHLdnjOnj07MDCwtrYWPkEpvJ8JnvYbOwRdKOI64Lnw54MEIkh7zuz48cmhoT70vvf9VqPRao/PqxdTSjSNuq4PIDvCxs833Wqt0RQES2mDd9XAcr6Rer6SvP1K4+8faz77jb+0IhHPC8qFohmJIsHrTXdpdpFolEjeLFff9dV/ev1gIDhq8oaVopePT8yWc05jbaS/5+xq0Sm7Fx+YuCyV2XXR7j/46nH1xksu2Vet1tvLfUPqMEy+9KXPzczMqKSOimYqfa7kW7FYVPFNVUh14dyLRCIqdhCmf8JToTRTwGwOhm7R5unzNZ8A7OKIH3nDF94pz09A44MH95imrmbyhy/jnPt+0DGxT3X4yWK1VK46gXjlBL6pb+WyrhyF2Adve9dvXufl59wffP63quVKuZgXggkgEkjDZYZldvWnx/aMxtLJX/nS1z7zxonvzdMm0cey/QaPPfr8kYXpuVLBOz216FYdKfxnjj3332snHjh+5vduu+KTN08AwMzMgud1ptEUtX+nCKHXvOY1ymVpHz0KGwDIZDLtHLxAbHRdD8UXY0yZ0UEQhH+ExluHZIOtShs7sQEADiCAAr3ssovUgXAY0dnZJYTOWzUnfO65JyKEMTZN/b+mlzwvCFgAWixOpNTxRXsmZk5MTZ+5/68f1v73H3/YsE3dMCmlBEg6kwiYSCdT+VI1Fs8cP7mWjKN/+N0PHP7Tv8UY/2SW/Zg4FIkbsjhixOfrRjRYQ8Al4wThU8+t5earEStYmaxe1s8WeVc0ahcKJdiGFAsSiagQwjCMRqPR/lG3X5lMJgHAcZwLl2+hTaFuCcOd4dl2o6N93GyWb1tgA4AEwhyfciJ/PLd08ODE8eNnQoRwMhmjlO4cYNc0+lyt8cOphZbj+SyQiHC/8pIrLh/oG+BBfWii+84HlpquX6tUc4tLGqG6HREEmabZnU0ZEdrXm255/NJDQ4OD2WPTZ//q196GEJLAbSyFgO8tZrKRru5Yy7LjnEg7qTOKOA/qjebd3334yPLk0IHeXzoYqMnTO3AQIZTJpJrNploHCNoUw+beWZal0u0vgAwAtImvDjM6pM1Oz2Zs0DTaEhvgAByQQB/9m5taLUeIc3288857cKVSq1RqO+uxpwuVUq3pBkxKAEQA4b98zxtPP/dIoit1+szCynJjoWVKjF718S8O7d5FCGnVqjFLDwKvWa3Uq41apdqdjLaKv0IAACAASURBVCCE/IBdOrb7uw/+0DawwJobiOE4vW63cdfJ4IGlLtNwB5PxoAmaTgKGgGqaaVQq4thC4b+fO3Z4iwDNeaSmP7zsZa9561vfGtpvQogrr7xy+1vIhThA7XKyXc3soG/a+flZkFsDo4gD4ogIAgCWZa6tnZfjx2trxZ2beKzaqDYdL2BCSI4QQvgV+7PVtaPpaKpRC0zdyljWb1zX/8WXRO77s4+51YbjNzPZ7lJ+kfvNQASYu/VyubCSR8zljvcfzzz7wKlKyxOYcynlfCV4Ys5720WSM9msyMDH6ZSNPYkxBAGPRcXokF6uFazu1F0/fOo3X5fdoZ1BwGq1xv794xjj22+/vd0l6hBHHfSCF8AmS73jD9lGsIHNZ0Gqfzs8FsQ6PGcb+rXXXp7NZkql81JZeIeFlgDgeMOptVzPZ0KCAEDUfPdl3Zf3MSB6QPTl1cmjtZ6ik9pvopwjeocHH7rvuwJIOb/y7DM/eeyRBxrllbOnHyiVzi7lm5fd9uFKyfnX/37cMGnINQAAIb/5HBAq66TflUG93tQtcuNVL+5P6x4Eq0U3ojPBg/27Mv/j+/9x2y/oqizEsszNWYBqtX7y5FnOuWma7fDsxKA22g6nkD8dILWPmBCYP5RiMyqf3b0NhxkghhBHAsUfeuipEyemOpukag2UklQrV7muJzdSJo+tlR3fZ0JwAcgwPvAiNDoy/qMnfprJRp2KU6vwA6PdjdUGCBGxU6+5/YNmzAh87+iP//GmO37/m3f+3UjX8PVvfiOhem0td8k7fhNhLqTEGO/OmlNrzjoHEWBNR0AwgRuzObB8V/q2hiQLiG285KJLlxfnyov+xQOJhuM9sDT/91/898//1V2maXDOE4nYiRNTHSqEUnr69FOlUunOO++UUr7iFa/YrizkAknx+lPQ+TV8FsIQ3ws/5FNnN30lDMAH7OP5sv7xr92+5V2UEBKJWLt2DQUBKxTKkYjt+348Hp2cnH1ktegxxoWUgAglf/imiwzeOj59PDuYKs27uiH37R8UbrXOmnsvuu7lr77pnm99myaGXnrVrt/5j9X/53//xrP/8pfxRApjKiXXrOg/furXf/lzX1GoT+c9hJDy3jGhCUO/ZgxZolXjARFePKaLwA8koVw+euTx/sFhLes2HeASXZEaml184hdfMfq1f3oSAFzXu/rqQ489dqQdIc45IcSyrLe//e133303ISTE5udGCDZAah8VP/+zAECsD52lKvKlufn8wECvZRl4fHykp6fr2LFTx49Prq0VZmcXl5bW8vnSU4Wq6/lMCImxROiTbzrE/XyZLGaHzEOjA/0Jno3EEINWnu3t7V5cOHP3178ysW9skM8ce/aIRFgCP/iOj7SavuM4vs+MiPbS66655uDu0KfDmFKqAyZ9mchbLtGHu0yfRX44M5yImJSAxzhGrFSrCA5Ls0tNz3fT2lemsnuHe2ce++GewYH+3mUAyOdLp05N79u3q71jUkrHcUzTNE3z5ptvDgPML6hg/u+RAGAADFarKOD0E19/W/vJgYHeV73qWkrJ1NQcrtcbMzMLod+jPrSfzK60XI8LCYAAUNy2p2dP2bE+8I0oNc8uFmLZVDIViSfr+WZDAumx0EuvveHsc09///Fn9+3bJzkDgI/feAWhCGMMQmKiAcDZlRLaWDoDIQkgANPffvWIRpzK/LxlN24ac71mQrQiFGuaCSCpHrEAoaVV74mjC79/SfHZxVa96Dxy33fff+s7wgarpY3ae7h//5W6rluWpev697///fYo2f/3JAEYQACFCgoCzIXefjISsaWU99330NzcEgBgx/E6/AmEUMvzAs6YQJLYN18Kt14GE+Mjgb5gmDCdLzNe1g2kJ3GlQboTmQZQx60Vlk/96Jl5BExy/UvvfrVB0T8+fopgjWKNUp0Qsri0Vmw5GFNMNcAEMMKUEIo++i+Tr33NG7L9PeA5UWq2fGs6H5UCVcogANfqDSMK1MSPehf93rGBqyfsesNfWVmaW1l4/+tSCCE1f3+z1Gq1WpFIxLIshNC99957//33//9iAHGAAIBBsQJegAJOP3nXre3nbds8b777+PiwbZ8n+463/CBgnEuOtTsuQ06x0hIyajQahdaZxQUdKJdd6ZhJ6mJ5NfL3M9YXn4NYxC7W0S9cc1lc1/7ir7/QHdcZMV45kRFCAEKqjsswyesu3U80qmkaNXSKCcZUFWCWl5YdWf/WTPdqa23Rp+OJakQkR/uzZswSGnaqdHcqgSSXWP71s8ZIt7W2yhszU8MTvW+7LmMY2parVuzbdwWlNBqNhtNufvzjH/8cCL2AZXzhJNcFWr0KxTJ4AQoY4dLquEoIMTIyEP7EJ0+ePXToQDRqh8vYOZ4fCC4Bf+z6VG88NTI2emBkoOK04iRpaRnPr8bircW1wmcexP82KzAiV2fZnzxr6/U54U2OdCV/56O/aUfSGNDi3CwhlBCCKRJMDvf33XdqTjMNomuUUqLpanYn0einvvN8KrPr1onG6UrfbEOzJHTZENTdwXiUC83jDpP++ycKSPCTZfGBx+JjQ8NMi95/79MZG2Znl7ZjyNDQAdu2U6mU0nZSyp/85CePPPLI//0xJIErbGpV8H2FDQ6E8fv/8NaOK4vFypkzM4cO7Vdtpq2We+TICdu2h4f7y+Xq/TOrjHMp0Kt2rQ6kduNEtFumPM4JtgLpA1SXazWTsqUFB+O0speezOu/c7nz2Wfo3960x0qkGtXKbV+7DxF8aDyraVRlVsZuvsM2TMPQEULX7Rt48NQSaFwyLhAAIp9/96uePXU82508VJ+6P7+rTLp6tGoyqrOAuNgoYYoILrRan72mYfSmrzt46Ko/O/LPh+wYSU6tlI8Y6UvdbavppZSZTIYxVq1WwzDoI488omna5ZdffiGGnACOAKMLWg5kS2CEBC5ANKvAOPgB+Az5AQ64xiE6ONhbLFY6VhisVuuTk7NXXHHJzMwCFkK0Wm6hUDpxYmp1teD5Pgv42/d711/0kljEooEf+G5heZ41HCHE3EorHrMcF40OpyQCoBghxCXk1ppZi+RK5QeOLb/36/cBAMb4I7/7eU0nvue87I4Px+yIRqiu63/9qy//yic/YhiGYdrUtDTdpLrxnz994Labf3lqKZdJpRK6+NFqbLkVmMhCEkUMcynHp+Zqc62gqHnFZn21WD/5uZdaliVkJBpP1JrrfUMIjY4OptPJfft2JRIxtbbLyMhFt9xyS1dXl8oIQFv6+amnnjp69OgFwMMEBAKYBPGz2NJSglD3fhr0PwDTD8APwA+QHyCfUSbtz3/7lkqlnkrFX/KSF3fc3Gw6TzxxNJcrnpfzOMMQ45yB3D08CiCrTn2gb+KJyaPJdCKi0Vy50JVB3clMq1Vym0EgqI6YRPIjBwqJiNnX4J95LMDC3Ujzct2OUKz96z99qeFJjWKCNaLR3/6XZ8i3ntGpBhhpmgYCHM5/cFY88IkvVlq7seANweO6a2rC0TlhkI6YmUxeY0bMsr74QAIR/NRV8te+dvrL757gu5JAY3ufue+0sG/elYrFIidOTLVaTrVaj0btQ4cOrK7m5+eXBwb2ZbNZFe133fVC1FD9HjlyRK1xsHfv3m3gCRDgjQGEEaiqGvXvvDG14RZJCVKC+AwY7c8JGPgBChjymcal+UfffAtA4PtBo9F0HO+GG6556KGn2nOesmPqLwAEQcAFANbS0TiPEgpx3cTjyUwrKBNDluvNRNxkgTSRxjW912oKjvtj9eHhrCX1E1Xvux+89M1fOYI2loh66rGHr3nZy//8/kmqEUop1QwVgsSApA5AsAiYAGIJLljgcmxQtiuaP5g2pFeMm1HXkdlunTOSjaT+fXkfbUoJ/JZDmsutz73OmTr2zOxc8frrrz80GP3Oc7m5uVb7TJVqtf7EE0df/OKDlBKVSO3r6+Oc5/P5DoRCd/XkyZPKTiGEjIyMhI/i5+A5D5s2cYdCdDogaSfXR0GAA064ND/3L29vP1UuV48dOxWNRsrlaoe8PQfPtB7lzTIX/LaDkCss7+m9eKWymisF0ubScU7Mn13x9T0Z+9gp98AQLq+5aSt6w1A5m4xaMWO5VPnC67rPLMwDJlJwgoEQcvtf/vOvPf00xRollGoaNXQNq2wjIKpJKQVhhKC3XOH/rwcAGOKAJlt9/eSYbSKmkXTE1km8dyh+4OBE5EdPfntq7JNvtC9NJerFlXyhlMs5S4v1a/7iGBB69xv6/ucPtqjiPHbsdH9/Vtf12257/9mzRx555BGMcS6XU8kehVB7kkYdpJTOzMyEE7j7+tLhAz8Jlc9BcjsAtiOE0MwPwPMx44RL66YPJ1/60s5r1HymzamDtnwUZ4xzKeUja6ZPNCGEbpoYKprhFGprSTD3DPn/478y/zXfL3QQmO+2KoP9GaZrPjH29Owyk4aUdQCBMQZEQGKM4c5HZghFVNcMw1B5ZcMwTNM2dNO0bMMwkGacnkc3HVgkGiUavbbr6FXXjA/sGhjN9pWbran5wqOPzugGcQMMVDs1OZuyjWfmc2P79uwZTY+ODdx5I+qlvuD+mUj3Zr6Ypp5OJynFALB796Frrrmmr6+vv7/ftu0OPaRyoGECVJH6u/2BPx82CCEvwD7TAmHf/eRvveMd7+q4JhKxM5mUKrntOHVu9HAWcCECbLx5TFip7mK9apLAMnDVZ8lIXO/25yr8F0ZOPDB3EWdy90SXgaAewMV7Rmutug8B94LBgUzMLLZ8jiVgsu7WEKprmoY1alBN0wilOiLr2T8u5XDMu3p/43/9dM8b9z4/uSKJN5BfE1qthvv60/3j+eW5oCbWcvWxvvjHkktaOl7n8qsPw8H+QioW3z3YEgT9/VsgV5e1enPzwp8DA72Li6uOs17vOT7+oiuuuCIWi91zzz2rq6u1Wq095Cw2kVqq4GfFI0QF2kLgXqALsP7sX28BWNy9e3jfvt0rK7kgCDDG+/ePM8ZOnJjacqnlc/AIziXAy/plSwrTbwZCsCgLAn589oQZoeU1LxqLjHRn9BXmsopmGKWGQWSz2PKn13LppC5cSVv2u19sfOXpADPePjETa+EqNhrWqIaJRBiQJHpswTNnisyHaDpDpqZ2/+qhJWH4eu9wKjM2+dxDDgluvOGKydVCKpX+1FPkQwfWVqqVmSZ9453lf781acdimADixKRMBPhFVx88e3ZOrb4/MTGWTieOH58sl9cnhG5UwAAA3Hzzzb7vf+Mb3ygWi0q+tafXwvlWFzIb+wWBIYQ8/s/aK98XCWfHnz07r1Yl0XVd17Vjx07ttHNEOp10XfdJj2K/JgEeXhLX7OsGgZLZWKu5tLZcb3rINuyZtdxPnr30jsuea7i96WRKEJQwiG5EP/iN2g37YkcfKN+0d3XRRk/P2xhjrBOsUndq9gWcmwhIMdnoM5KESOAPzWUSVvObRy579cRpPW4CdnjLeuiR/xpJZf/42b5/eraCNf3Lb0pd17v6d2cGvRNNigEBsWNR5gWAqdRIKolrCE6cmCQEq6WHFxdXTpyYPB+Yc3MuBgb2LSycOHz4sOM4X//615vNZntiLRw3W0bqtigf2LROCNqYEkQpffDBB9/wpje94hWvbb9FLSEJsO2OB+ce+OEPf8I0jUdLXq1UaDjuW3d7e3YNc+R4qLaYXzg2XT1wMFVYaUjiXzM8PpcP9k7g52ZXoyjpOszoIsvLpSemM2tOn6Dsj27q+v3v13UsESIEgUYwpdSwbFPXdF3XTUvTqVryASEkWSAl4oiompeo5ryox790pIk0ubrkCrby+fv63ntlbmKg5ysPyFN58RsvMb70uI+4i5A2HhdfumVwfqlVrbpXX7WHxuC+x6sPPrHQ0bcOYND5lafHjz+WSCR832+1Wl/72tfC3W2gbV4cQuglL3kJnJ+R2xKetlDvusx44IEHAOALX/jq+PjIykp+h7XN2sk0jf37xyuVqq7rjDGq1vFEsS4gRCI0W57fB6O5YmG6MtVtdTusKAo255Wxnt7ADPbtM44tN+o1u2931KsW67UgCLxaYBKKJMckZn/9FvLef6uAFMrowBgjKQRaZw0CDDJMYhIpBWeeYAF33bVa8O9FPIQDQZrLc86P1/pdxr7ySJKhluAUAfvyQy0sEabEE9pvvUjk8833/8T7n9cirgks7BsOBH/zbOKioEOUrQOjafTgwT2VSs0wdM8L1EZBBw9eDQCzs8/F4/H3ve99rVbL8zzf9+++++4wAYoQUqux7JAuCuUYxvjBBx8MUeSc/9VffU39jEbtF4SHUnrRRROGoR0/Pql2k9G0c6V4EoQEkMODexzNWC4UQdLn1uZNoh9fmO0Z0mu8PjVZTCQMm8ciEUcz/Pxq6T+mr0jrlXdfWfv2MbnqZH/vW6sSAcGGTiQmBFPKgXOQGgAHSUAIWFfCCCEBksuNUgqQEknpu8+V+S9M9E2tHJmvJnQsXaHpEv78htjHflRGiCINvW2v+eYJcqZI2GL+Ly8i738k8WniXjehV2u+mgu2GZiLLprQNO348UnFILWE1nXXXfnww09xLkZHLwaAs2ePJBIJZaq9613v8jYWTOOc33///a997WtD0bfxba0LtB//+MftLFbjzzTNP/3Tv1FHdF33PL+jgmBLSqcT8/PL7VcGwcbUX4yQBIm4dN0g8BqmjuZzFhLEEU7C1nrisaWi1z807JaKj07r4yn9m0d7pehDwMt+8q+fTAIAwhwhjJCGMJcSscADEZiarkQ5Z4JjwSlHCBFEQAjZVp+EEPrYa2Rfqoc3Elaz9c/H96Rtv9RkBmYStI8/5BDDFJxzQq/tlyWIDnfxiJVKJoy/TTc/8FCBPFr+7T0NwbXDd3SudtrdnZ6eXmifZe95fi5XZIxff/1VoaO+e/chADh27OFYLGaaJmNM2dZqYsK9997bwcoQnnahp+v6448/88wzz3teoILLBw/uMQzj5MmpF9wgBAB0Xdu8xNPG6FFBXEL6ukyfo7tO9AFBEtHdicDQTjVafqHs8OYpOxYvBfF7l3sRc0FiAJCChXIAABFdSqTxwCOESCyZFJpStlKosRJ2SXAmAW0UV5JSyz+YZpONtSWuU02WGkwI+OABp8vSPnUsIqUEigHhx+vJV6Z4Mh5nTmN+lYly7uuv3PXJR8t/MhU1kb95NqtpmoXCFl9uuVw9dWpa13W1CZc6eMkl59zF06efUut7DA4OhnWgarF40VZmTSm1bft3f/dPNl5n2LY1NjZULleTyfjMzOLOC2x0wNPfn1W14yGhd77z1/v6up9uynIhX3dat19Oy8vLd093CUBY0yXCUYpfu/fk3FIpFceTlYtnWknwHATnlXUBSLWXICYUEw2BAJCUUo1omqFvbBqla7qJkQzXzRCcCSGCIOBCviz1/JX9g4mBWJRG3/pP+av7gs+8pocG0bwXnDk+NbFntLCSGxgdqDQDxFoJvZEcGmvm84To9WrNTPX+8MFT/5hPv0hWoa1AWdPo5ZdffOLE1GYeqUX6ms1WuKvSdhSPRw8dOrC4uPLxj3/o0KFDV1/9SnV8//5xQvDzz5+5QO5fCA0N9em6dvbsfHiE3HHH4VbLXfal7zpBwMfNYt4rTJUTSLGds4BofXL14drl0/XRsosRYxK4BAB53ux9JBEAwggDrBdJ4fW41LrahPXtR6UQ65NggiBQ8x1938+YtMesGfXmh37IBizns7+cSsb75guuQHQwwzJdVsxmmqkF1dXuvWNECokwQahcqDRLzbLZPJhI/9sC65c+ABw5clJttyaEyOWK+/btUvsPtjNicLA3GrXn5s4t3LQddXenFxdXV1fz3/vefYODu8PjhUIpHo9mMqkL0Svt78UYDw72uq4nZWd1fK3WiMejAwO9nAu16wTp6hquVutONOE6LZ+JsSwdGhh8cpZJACQlwgRRPKItzHmDUgokhRQSSYkAAKN2hCQAxiBBAkgFCSC0/geARAASS4wEgGBqszzGWKC2/OOcz9f1n64lVhvu9busT/zSni4zJXW7XqtLxhIpm5WbrgDLNjWiA5GRiKnrmh6xmO+5jYZNo15E/nBSjujrM+tDhDgXhUL58ssvcl1PLZrU399zzTUvyuWKk5OzL4gNxsi2bcdxt1EeCGO0Za52M01MjF1yyb7V1Xyr5TabLdu2Lr54n5SyXj/vdrVKh1rcUdNouDWlhgnFGO45YZ2dO04IIYYhDVOZyIRiCRhLKYQExKWKrEscRnLXTRoAIUECAoBwAUIBUkjEmQwE93zGmEjY1PUCL1Db+jAGKOAsCALJWnZz9tp93aloUpKUFMiK25F0nBg2TlnJXltPJGJDg07d465DrRjzg6hl+S0PRaxavoWl6O/vedGLDqh+hkX+QcB++tOnSqUqpZphGPV68957H1xYWLkQnqqlI/ft23pGsWkaW87m7CBd1/bt212rNX7848dyuaLjuM2mUyiUH330md7erl27hjquVyuxNxqtYrGyHrRABBFCCSZEOPcv7L02feYto2eRxIhShGDa2ZUwpWA+gAQJGGOQ56a5SCnx+mZuCOH14maMMZdCIpACCSGYBM45cx3faS0Xq77v+64nfMa4ZJ7PAsE5d4h59ZX6QMJyqmUPkXpLWm7Nli1imJiZWO/FuoFNc6Xpa+kMR8TM9FAN67ZRKdctIHFLn51drFbrm6dhAABjrFAolcvVn0kWAcDKSn56ev7Qof1qWbKQDhwY3717+EKGjm2bnPMtp1c8/fTzhBDb7qw4CGl9W1knnhIs8D2PcSYxOTDWqtfdhVZmII5ABDk/3nQDhCUCBBIhLBFgiRGSCCRCCKSUSOkYBIARwkhKjBHBiADBEmEsBZdCSMml4IxJLoXgTAomJVfT6aX8019sDfa+LFhd1pKJRq0u/GZxajrSM+Q7AoRuRTS/XgtaTr0pNL9hx2zJ3dr04vTMSrlQExoUln0AKJdruq6ZpqG8nFDK7cC+/v7s3r27MMZ79oz6vq/mRLZf4Die6/ojIwMqYtTVlbr44r2zs0vtC9zsQKZpqOUhtjybySSllNttabkOT81OEgmu6wSMBb7z8oOJbx3v5Z5XdYXLUMwUjJrS9xAgiREGAgBIAqD1/C6G9WQVQgRASkQIxhIjwEQlELk8V0MrGeOSS5BcIuDrzh6i2g8mjVf3lUaH+4UA6bY8RyDd0nQtEolplDENScDEspJxQ0aSpvDcUrNWzJ8p5Hsz3YK6k2vrqTC1K0Fore2AUH9/9qqrDjWbzvPPn2k2nZWVPGN8//7dtm2GsVRFakf4Wq1RrdZbLXd6emHnZWjPv9ePx2PZbGbzSk2UUssyCoXSdlpwHZ4u7jTtuO86jAVCwhPzxu1Xrx1bNKXEWDNdaWNgvVG97gcIkFA6EZAAiSSWINC5BZ6RRBghhDAFpETf+sqN6+4OSMEEgASJ1XgCRFwhMcWf3lc6OD5Qr/JSvmwmLCubtUzNNBG4CGyuRTI60hmKNWq+jl1RzsvAXVoutzw2ODaSq5ZmC+vlYLFYJJcrts+62hKhSMSybevo0VNK3KkWcs5XVnLDw/1qo5YtWbbdwhgbO3zgzYpKzUnev3+3CqGpcq4DB/aMjw/vvNXAOjyM8SDRxVng+x4XgvtuFmp9kYVFb0BKGXj1v3g9PlugubonQ4dZKRsQCIgKpimJp3SSMhBU+v1cYT9IqpuCeeqXBCQw4QhpBP/d9Ybj1DN2Ij7cU5lbw/GorZnEolj6yEBescocByeHuOdTg7dOnTo5Ne8zWmG8K52hveIPHu7qFe7u3cOXXXZRPl8qlzsnkW9GqLs7EwRsS9aUy1XD0F3Xe8EVlhQNDfVdffUhz/O7utLZbCYatXVd75BXaj+oWCy6d+8uhNCuXUMrK7lTp6Z33mr33JbmQbqHMxZ4HhMSpDzTyAzJxXk+gBACPfJf05CMxlabgCVDbbs4AcLrOXiM1kUcAMJUlR4iOLfoqTKxeeBLQBIQkkgiQEhiiQTW33dtNmXYXA+aK4VEX5pzZkV1akRlwxFYiIZraUIK7rcWp588VivWSi1fi0YbXuDH67/5vVgEw+uv2l8slo8ePdWxPOZ2CCUSsWg0sqWlYFnm4GBf+46a21E6nbj22sur1fpTTz1frdbL5WqhUK5U6hdfvBdv2sbc94Nm01lZydVqjdXVfPteki8MT81KagjUzFYmQPjumsgyiUFILDgWqNxofeY12k9OOxhRhIgaRWG8FgAQwYARAEGUgFCRnnVsxMbitBDOpVY7xRANUe3L19tRaFo93UjS5EC63nBjXT1St3XEkWhyr6FrCBsJEF55ea5VbdVB1gPk2X7dX7Ls+CvHRWXGX1xc3Q6YLRFSPqBaAqbjsqGhvmKxXK02XrAQLpNJTU3Nh3uKhrS4uDo+PkIpuUCvSFEyGVcrf/t+AICklOeMxe7VKd0yNU03NEOnlGjaW65ogvClYFIyKTwJ6A9/4BEj8r5f6AGMAEkJGCECiABGiGABEgFZHzdtAQUV9GwP9CJEEEKACAAA5hPDXdFsz9yZaXtoDNvxRN+YHhmUrNksrxYWCvVC0xcIGdxrrgUtzDGuuCwgTlWWwWd1FgTOFuJeUTQaMU0jnT5XI9Bubc/OLmoaPXBgPBKxdF0jhOzePXzjjS91XW/nvSQ3eqHWbdlaFS0sbLE8/XbU09P18pdf1dPTpZbr6unpuvjiicHB3nOjBwD8VBaEVEEwCXBk0RBAkeCApQQERCKEJZdPzjWoYXPGCAYAjJDAiAIgjAkQjDBGiAgQCImwbA8hBHg9iiARAAKECABIhEEzf/mq3rOnnxs6cFEkkfEZxSAxrPorKwDETsQ9t9KqFhHSppdrZd9dbTrYkI7P/FYrLeJ3nh4uzW2xOHt/f8+VV16q1Liu68lk/MCBcbXvavsYUvuzqP2aU6mEO7rb9gAAEq9JREFU47jHjm0rHjfT4GCvaXaaeaq/6XSCUvqCIVFK6fj4SDQaefLJY8Vi2fP8VstVu69MTIyRyy67JlSAeqXAM9kg8DhjgjHOuQT80uTJVTk83m28fa//xKIAkAhThPHegVSx7gGAUj8YYQBAGAMmIAFAKhwkIMCAMUUIAyEYEQwYAEtMEEYIYSTxWByN7Npl15ad1bOtRvH/tHYlsXEl5/mvqrf38npfKG4iKapJipsWzozG2Yw4mATIITEQGMYcHMRADjkEuTiAEcdAAgQwcvEhCJKbfcktCOAARjJZPDAMz3gwmVE0lihKorgvvS+vX7+1qnIoqofqbpEcIN+J6Cab7/X/6q9/+er/goM9t1Pze4GGWbN8Wis3K3WnetBsNjqN0JVV2YGu5/cwIkosdqcAe6ev9JsNQ1tbW2SMffzxZ41G27Ydy7I7na5tO2++uX56Wg2CVyzk+4HjuJ1Ot9XqiD7Y1VGtNpJJU4yKOv/6xETxxo3pZ892L20l6LpqmtGdnUGFHQA4Pq6Q9fU3zr9B0wXgPAxDRimljAPb7aXv4gdTE+jjF/R6LDihJmcUEYWxsBcAcAYIIcY5RohgAAzojKsn7MOBIjhjjiIOHCOOEBAJI0BYQRg44r87FrLO0eF+tXraNTXuO4EX+rVaq1rrVCrdQFcURSMgd3DIDMpY0Ov2ZIgUI3lGZZIiu/uv3FU2m+50rMPD8oDHc12vXm+ury+enFQYY1fJWAEgk0mm00ld14RyK2N0wI82m+1CIZtIxAShPJ1ObGysWlbvk09+ecU2D8ZkWLhQgCwtvULwlVs1ls5TPwhpyBijDDjG735lKh+JzkwVg+bjG7nui06OM+ojQhBilAOws42FSIARxpgDB37WEsVwbgKNyIiQouuaxxDmASCMGf79657d6dUbLQ4QYhVRYIFR93vbRw1Hg57Dfng682s5/19a4xF+GHK3YzmqpupI7zDng08HiZmGobuuNzJgJQQjhPpkzIstlEyad+8uS5K0s3PIGHddLxIx3nhj7eSkMnAiql5viu9X+KHHj58Pu7vXIQjCiYlCNGqM/BOyvHxn4CWWyYvmGecwbspfm0W/PNiKRrVPPvwfWQLPcn9ryZw0QlOT9i0MnCKEAWEABoJ7KMA/33Y4EmW4fnTAGOOEhZwQxIEg+KCmRqwtLaFBzuyFgW4aFjgtz8sW4j2X/d3eVNNjPz5RjjqB6WxFtYjL0IIx5lIeTWd2jga3X13XSqVZMR114K1IxCCEtNufR1Ovs1A+n0mnk599tiXOdgVB4Hm+bfeazfb9+7fL5drAts8YE027YQHLS1GtNqJRY2wsX6s1+9FTLBZZW1t4JTQQkJo1lB2jlNLA+9o8xmaEuZXTRlU1ZF2WC9dn9Kh9u7QStNyHTQQsRKKzAOgl5xRhQgBheDm2DzHeD+PgLODhFHHEEecUYeQS41EwXjIth4eyzFJ6zHVQRMYh4997lOEcgAUIEHB4a7LbavWwqqTVSEdiPx91wkCInM7PT9frrfMWmpwcW1tb2N8/Hkg4hi1ECJ6ZmTg6Kg+nJiKom5goNpuXzOroQ/AdolEjnU5kMilKKeeDpYdOpyvLcjqdyGSSiqJMTV0bG8s/frw9wjwA4JsZWZIYDScku8u6W9vP87FCrdPKRBM7RzuTE1OAw0Zn992N9H/sYmCcM3pW0gEAzhlnIMIEQAhhjvjLilzfPBidlekwlhTAiAfuA2f8d8YUOfRMNfpRN/P9B+y/DmTgwBkDDsBCFvoPW8X5ZHnGjLkQlq25ubkpx3ExxgOlSdf1fD+cnh5XVTkS0U0z9tZb662W9fHHn42slQkLra0tCiMRQnRd63SskZuHrmvxeKxeb1xqHoTQ4uLc/Pz1nZ3Do6PTdrvb7doA8KUv3W022wPrrNu1222r3e5aVrfdtvb3j30/QF//+h9HIno+n7Wsbi6X3t8/9jzf9wP/+oLTszsd66tL7s9+/otOr2lossTVXDoiJY1O8+Q3bm2UmY8bwd8+SqkSDj1HxMsIIc4BYYwliTGEEeecAxcMKkCcMUD93AgQAX7uOeIYKRhCCgD87LSUYF4x0Z3AmP/5fep4vWwk/f7DM+HUO3dubW5uD+eGfU9rGNoVQ7J+IzydTszNTX366ePh3CWXS1NKL55EL1AsZhnjwxemKPLbb9959OjZxTIsAEC++c0/SiTiOzsHYqy3oigbG6vdbs87OkDZAgDfrYbjGc93fMrCRDTZ6DQrlXoikugEPSnwyp2TX5/ofPWW+ZN9jTOKEOYMQGw3jAEwzjkgQFjCZ8cuRJsbYYwRlhBCwBiHlxkrYkAZcEZDigAQcMG+YoGHOAXGgMIbY2Eukvz3j0Wnlfp+cHRUXltbFC2s8/fWr/W9Lj0UTwnGn2e1fUfnOK5l2Wtri41Gq39sPRo1VlcX4vHowcGg5NZIjI8X6vXm8H+nlFUq9WjUsG3n4iVI8vnpo6NyGNIgCIXGSrXa2NhYaTTaZa4YuuqF/LdXJ7d2noWUd3t2AHR5YumoUj5slE8aHYNIFc9/dniwYdYfOxNn/QTOEJaEbTBCGACAIyR+FP1ujhBwRjkLz2gkoqTNuVgu6KyCyhFwFvjAGacUAfzpPcfgyk8+e+UeGGPlci2VSnS7o8PTYei6trx80zRjphkbHz/r7Qtv07eQ5/mNRrtQyJpmPBaL5POZ8fHi5ubzvb2jq9hGkqRCIdvt9kYGC7FYZGJirFYbFFseNM9AYA0Avh/U661CIese7lp6XNO0T/ade/NRq1PtOg5m7LRVlbA8Fk3R0Le7ipnR3MDSSXSrl+QcI0aBI85CEJNfmJiZzDHGwPlZSiSihpdnAxAA4xyflVTZS3WrQFgLggAxhjmXMHunEP/p9ghaejQayefTfUWtCyDL0spKaXw8/+zZ7tHRaavVqdeb3W7v9u0lABAlsr6FgiBoNtuCVdpud0fKCL4OjLF225qfn3YcVwginEc2m74Ks3d0aBCPR2VZqtdbWrfViyY0Qz/q6F+eSzw/aUiY+SGi1HNC1/ZCidCTisU96rie1t0CJWehqASM835F52VXgVGxKoDTsyIpR/1uEAIOnAMHJNqqYQgcOA954AGnmFEJY83QV0orQqVr4IIzmWSl0rhKDTibTbXbnadPd/stUeG7Dg5OFhfnJIm0WhaMCudeZ3hFUThnqqoOj5sLQ1qtNpaXS2K6pLj9a9fyb7yxZln2pRwueJ15UqlErdYQT4pmNXsRU5bkd3/zzuqNW5892cSI6QZxnCCa4JblKjJXZO75OKLLirv99lhXRZGjMCoB51w0shkCzilDjHJKgYaMUs4ZUIo4A8YQemk/ThljnFFgFGjAwxBxhgBkjFSZ3IspvZ67urpQqzUFH4hzns9n7t1b9v3w8PD00rsFgGIx22i0R4ZkrVaHEOK6Z1z4S8sKhUL27t0VhCCZNJNJU9fVZNIcqO4wxo+Py5GInkjETTNWKGRVVfnoo4ev620PAH3nO3+zs7Pf3/3GxnILC3N7e0dCm0dAlHj/4b//1/HdP9lI/fDH/8q6vdQY3dvvmCYyzRRHnWqdpOO83e6K4nRWNVdvjI1ltL/4SbzVA0ZDAGDiuLKYq31+ZhgSgRwBTjmlnFPOAVGKgWEEikQUjO8kI+JiRBcgFou0291sNul5/ubm9lVuFQBkWVpevvnixcHIoc+ZTHJ6erwvR9i/92HBj3g8ura2UKs1Nze3z+/tS0vzACCmTf6/AH37238dBEEkYliWffPmzOHhybBh+tfnTN7wKfvLd6b/6u//MaK6Eg5yec0Lw+dHdlIH2/KzCaWQzfZCPmvGY6BkxjPOcUPPZr75Iw/RHhJVNw7snKY15wzBWfeIcwbAEGWcc4I45lwmxFDJSjwy+uovFIIZCcPQFxfnnj7dGe7EzM5O1mrN4RrzsIUKhazrusINDqBUmlEU5eHDJ1/oquLxaBCEYrr9eS9KJibmLcuu11u+H2xv7/UXnUjTfvCDfz6/uuV2g8YTv7dYeHN51a6XiYzb7cC32PrcVK8XAA0UFU+mi4TISWZIasTpei2lJ3P7356eEUQR4wwoYhRxwMCBMVGhA+CIU+AMM454KHEuI6Sq5M/+4B2j1xveWi+Gpqni+NTnLOOXEMJNd+8uizAPY8QYm5ubWl9fKpdrggswgGEvl0jEbdsZ6SFd16eUOY53xRhyauraW2+t27YjhF/i8eiNG9P9GGeE6u/AihGUaELw+SX/vW9/46cP3v/o549Utdfs0ETSxRgThA1dQ57vhcjwmBk3pSj67n8yzgLBKz0LmAWTVDB8OeYYEUAYISRIP4hLgCQJK7K0EtOLxWyvd5GQ3wDm56+PjxeePt2RZUlVVd/3Xdcb3oQVRUkkYolEvNdzUqlEs9m+lJh4fg0tLs7ZtiOGRg0glTKLxfyLF/sXkwgAIBqNrKzcrFYbz57tnn89m02trJQ++OCTXs99xTwDholGjVJp1vcDy+rqutZstjEmLxV64Ru/WtzvuNV2kzIvcy22t7dDfT+Tyrq+gxGWESAb47jy/Z+FIQ3FRAD+skDAzwS2zyY3IIQIwRghjJBCiIwRkciCoRJCpqevian8F98qAFy7ViiVZjY3t4+PX5FIvH//9sHByRVpoRfjvIVu3pyxrO6A4QkhpdJMtdoYFsobRj6f4ZyP/M1EIv7mm2vvv/8L9N57752fDS/eNgzt1q2blNLNzeeiSCW8/Nragut6T5686H/QH/5Kseb7Hb9nuV05rtvdLnV7AQABjbmtf3qcYCGlwATZUCSfSFTk0EtmD0IyIUQiBEDCaDH6OWUylUoIVexLsw2M8dhYrlZrjswB79+/vbNzeHJyeSDbhziaSwgmhFhWtx80n7fQykqp2+2VyzVKaRAE8/PXc7nMkycjyksjkculfT9ot63h7VNR5PHxwulpFb333nswpEZWLGYdZ/TWd+fOrXbbOh8+CLz75Wz5sNnwnR9Vi9TrBb5Lw9APKachpQyAU0bPwjXOATAmgBFBGCSMJUm5U5q5HtOfPdsNgoBzMM1oqTRr273Nze2rZIKGoafTiePjynASjhAqFLKe5w/P3BgJSSKl0mwyGd/a2pEkSVEkAIjHY/3d/ryF4vGoYegYY01THcc5Oale+vl95POZ69cnPvzw01G3o01MFCuVBqHU6FdqX16flM2mXrc8HccJQ+p5/oDQ1cOd3os6O2mRFiBN11RVVVVVU1VNVRVd14yIpmmqKhuaoamKpmli/kRJlbKKnJaw32oHQWgYWrGYi0T0ZNLc3Hx+dFS+ItNM17XZ2cnT0xE9HkkiqVQiEtGv0iIrFrPr60v7+8ePHz8XXfBWy2q1LNOMTU6OnZ5W4dVIQRT6LMtuNttftBFu2z3X9WZnp+r11sBzc+PGNMb45KRKlpfvDkQmkYheKGTL5drIZy2dTmazqWr1teV0kwUR34n47nhE+cq9WzmFhNVqgodJYCmMkpi/tTC7MlXwK7UkeuWrdBzXtnv1eqvdtmq1xgUz34fheb7juDMzkwM9HgDIZFLJpLm7e3QpH5oQnEiY29t7wyzGer0Vi0XGxnKixnzFRrgkSZlMUpalXC5j285wGiC0QFdWbtq2oygyIXhy8trdu7eOjyvb2/uMsbOqwQA1AmNy7VphmFSv61oqldjbO7qKw0mlEjs7hwMbNQDU681UKlEs5q7oo/uIx6MIoUTCdBwXYzTweDiOK3ZHoWKLMUomE3fuLBFCnjx5cZULFkOJbdsZ+WRwzhljtt27SiMcAEql2aWlG/V6S4y0iMcjt28vdTrd/pQSgV7PrVQaQRAkEqYkSUEQPHy41c/JPi/qnP9/lmVHo/rMzGSz2eH8TOxwefnm2Fhuf//4iqs4mTQ7ne7IimwQBJ4XOI53xaRyYqK4sbEaBCEhuJ8cNJudgQVh20693pQkUizmhHzz48fPR3a1X4f5+ekwpCOJVKYZMwyt3e72P+11FkokYuvrS7Va4+HDJ6JiLRq4lUr93r3VbtceqA0K5RLLsm3b6RdJRd6JvvWt76qq0j/PeH7fy2SShJB0OmlZ3WTS3Nk5uDoBTLCZHj7cEv3BARQK2VTKfPp091KHE4tFVlcXKpX6wJnYXC69tHTjww8fXJpefCFgjBYXb1Qq9YFGWTJpzs9Pb23tDFeDhmsKExNFz/NHbt6qqmxsrDx4sHnBN3k+iiZTU6Vr1/K5XHrYq4pjdtVqw7LsYfLDxQiC0LLsubkpoa18/q1o1CgUclf0kOl08vi4PJxX2rbjOO76+uJ5wcWrIJk0ZVlKpxNC9mvgbzmHSqW+srIgGMiEYMPQV1dLiUT80aPnI7/TgTWEENI01fP8kZNyxJz94bOuAsOVmv8DfF0gyD2DVFkAAAAASUVORK5CYII=[/img]

I think calculating texcoords in the pixel shader would get around the edge cases, but that may be more expensive.
Reply
RE: Texture Mapping extension
#93
Do any of the POV-Ray converters support this extension yet?
Reply
RE: Texture Mapping extension
#94
(2018-01-30, 1:54)Michael Horvath Wrote: Do any of the POV-Ray converters support this extension yet?

I believe LDCad’s export does.
Reply
RE: Texture Mapping extension
#95
(2018-01-30, 2:34)Orion Pobursky Wrote:
(2018-01-30, 1:54)Michael Horvath Wrote: Do any of the POV-Ray converters support this extension yet?

I believe LDCad’s export does.

It does but there are some limitations resulting from the differences between OpenGL and Pov-ray's texturing systems (POV-Ray seems to be a bit limited on texturing front).

Solid colored planer textured parts should be ok though.
Transparent stuff might end up a bit different or not transparent at all.
Cyl and sphere variants should also be ok except when the texture uses a complete 360 degree wrap around. I'm still looking into that issue hoping to improve it in 1.6b.
Reply
« Next Oldest | Next Newest »



Forum Jump:


Users browsing this thread: 2 Guest(s)