#include <zone.h>
Nevrax France
Definition at line 86 of file src/3d/zone.h.
Patch geometry. | |
| bool | getCornerSmoothFlag (uint corner) const |
| void | setCornerSmoothFlag (uint corner, bool smooth) |
| setup NoiseSmooth flags: used for Noise geometry and lighting. NB: convention: corner0==A, corner1==B ... | |
| uint16 | BaseVertices [4] |
| The base corner vertices indices in the current zone. Used for patch connectivity. | |
| float | ErrorSize |
| The Base Size*bumpiness of the patch (/2 at each subdivide). Set to 0, if you want CZone to compute it for you. | |
| uint8 | Flags |
| uint8 | NoiseRotation |
| The orientation of the NoiseMap. 0,1,2,3. This represent a CCW rotation of the NoiseMap. | |
| uint8 | OrderS |
| Tile Order for the patch. | |
| uint8 | OrderT |
| Tile Order for the patch. | |
| CBezierPatch | Patch |
| The patch coordinates. | |
Smooth flags methods | |
| bool | getNeighborTile (uint patchId, uint edge, sint position, uint &patchOut, sint &sOut, sint &tOut, const std::vector< CPatchInfo > &patchInfos) const |
| bool | getSmoothFlag (uint edge) |
| void | setSmoothFlag (uint edge, bool flag) |
| bool | getTileSymmetryRotate (const NL3D::CTileBank &bank, uint tile, bool &symmetry, uint &rotate) |
| bool | transform (std::vector< CPatchInfo > &patchInfo, NL3D::CZoneSymmetrisation &zoneSymmetry, const NL3D::CTileBank &bank, bool symmetry, uint rotate, float snapCell, float weldThreshold, const NLMISC::CMatrix &toOriginalSpace) |
| void | transform256Case (const NL3D::CTileBank &bank, uint8 &case256, uint tileRotation, bool symmetry, uint rotate, bool goofy) |
| bool | transformTile (const NL3D::CTileBank &bank, uint &tile, uint &tileRotation, bool symmetry, uint rotate, bool goofy) |
Public Member Functions | |
| CPatchInfo () | |
Data Fields | |
Patch Binding. | |
| CBindInfo | BindEdges [4] |
Patch texture. | |
| std::vector< uint8 > | Lumels |
| std::vector< CTileColor > | TileColors |
| std::vector< CTileLightInfluence > | TileLightInfluences |
| std::vector< CTileElement > | Tiles |
Private Attributes | |
| uint8 | _CornerSmoothFlag |
|
|
Definition at line 241 of file src/3d/zone.h.
00242 {
00243 ErrorSize= 0;
00244 // No Rotation / not smooth by default.
00245 NoiseRotation= 0;
00246 _CornerSmoothFlag= 0;
00247 }
|
|
|
Definition at line 67 of file 3d/zone.cpp. References nlassert, and uint. Referenced by NL3D::CZone::build().
00068 {
00069 nlassert(corner<=3);
00070 uint mask= 1<<corner;
00071 return (_CornerSmoothFlag & mask)!=0;
00072 }
|
|
||||||||||||||||||||||||||||||||
|
Get neighbor tile across a edge
Definition at line 1551 of file 3d/zone.cpp. References BindEdges, NL3D::CPatchInfo::CBindInfo::Edge, NL3D::CPatchInfo::CBindInfo::Next, nlassert, NL3D::CPatchInfo::CBindInfo::NPatchs, sint, and uint.
01553 {
01554 nlassert (edge<4);
01555
01556 // S or T ?
01557 uint length = (edge&1) ? OrderS : OrderT;
01558 nlassert ((uint)position<length);
01559
01560 // What kind of case ?
01561 switch (BindEdges[edge].NPatchs)
01562 {
01563 case 1:
01564 case 2:
01565 case 4:
01566 {
01567 // Get neighbor index and position in neighbor
01568 uint neighborLength = (length / BindEdges[edge].NPatchs);
01569 uint neighbor = position / neighborLength;
01570 uint neighborPosition = neighborLength - (position % neighborLength) - 1;
01571 uint neighborEdge = BindEdges[edge].Edge[neighbor];
01572
01573 // Patch id
01574 patchOut = BindEdges[edge].Next[neighbor];
01575
01576 // Check neighbor
01577 uint neighborRealLength = (neighborEdge&1) ? patchInfos[patchOut].OrderS : patchInfos[patchOut].OrderT;
01578 if (neighborRealLength == neighborLength)
01579 {
01580 // Get final coordinate
01581 switch (neighborEdge)
01582 {
01583 case 0:
01584 sOut = 0;
01585 tOut = neighborPosition;
01586 break;
01587 case 1:
01588 sOut = neighborPosition;
01589 tOut = patchInfos[patchOut].OrderT-1;
01590 break;
01591 case 2:
01592 sOut = patchInfos[patchOut].OrderS-1;
01593 tOut = patchInfos[patchOut].OrderT-neighborPosition-1;
01594 break;
01595 case 3:
01596 sOut = patchInfos[patchOut].OrderS-neighborPosition-1;
01597 tOut = 0;
01598 break;
01599 }
01600
01601 // Ok todo remove
01602 return true;
01603 }
01604 }
01605 break;
01606
01607 case 5:
01608 {
01609 // Find in the neighbor where we are
01610 patchOut = BindEdges[edge].Next[0];
01611 uint neighborEdge = BindEdges[edge].Edge[0];
01612 uint neighborEdgeCount = patchInfos[patchOut].BindEdges[neighborEdge].NPatchs;
01613
01614 // Check neighbor
01615 uint neighborRealLength = (neighborEdge&1) ? patchInfos[patchOut].OrderS : patchInfos[patchOut].OrderT;
01616
01617 // Good length ?
01618 if ((neighborRealLength / neighborEdgeCount) == length)
01619 {
01620 // Find us in the neighbor
01621 uint neighborPosition;
01622 for (neighborPosition=0; neighborPosition<neighborEdgeCount; neighborPosition++)
01623 {
01624 // Found ?
01625 if (patchInfos[patchOut].BindEdges[neighborEdge].Next[neighborPosition] == patchId)
01626 break;
01627 }
01628
01629 // Must be found
01630 nlassert (neighborPosition!=neighborEdgeCount);
01631 neighborPosition = (neighborPosition + 1) * (neighborRealLength / neighborEdgeCount) - position - 1;
01632
01633 // Get final coordinate
01634 switch (neighborEdge)
01635 {
01636 case 0:
01637 sOut = 0;
01638 tOut = neighborPosition;
01639 break;
01640 case 1:
01641 sOut = neighborPosition;
01642 tOut = patchInfos[patchOut].OrderT-1;
01643 break;
01644 case 2:
01645 sOut = patchInfos[patchOut].OrderS-1;
01646 tOut = patchInfos[patchOut].OrderT-neighborPosition-1;
01647 break;
01648 case 3:
01649 sOut = patchInfos[patchOut].OrderS-neighborPosition-1;
01650 tOut = 0;
01651 break;
01652 }
01653
01654 // Ok
01655 return true;
01656 }
01657 }
01658 break;
01659 }
01660
01661 return false;
01662 }
|
|
|
Get the smooth flag for the n-th edge. Return true if this edge must by smoothed, false else. Definition at line 192 of file src/3d/zone.h. References uint. Referenced by NL3D::CZoneTgtSmoother::makeVerticesCoplanar(), NL3D::CZoneSmoother::smoothTangents(), and transform().
00193 {
00194 // Test it
00195 return ((Flags&(1<<edge))!=0);
00196 }
|
|
||||||||||||||||||||
|
Get neighbor tile across a edge
Definition at line 1667 of file 3d/zone.cpp. References NL3D::CTileSet::getOriented(), NL3D::CTileBank::getTileCount(), NL3D::CTileBank::getTileSet(), NL3D::CTileBank::getTileSetCount(), NL3D::CTileBank::getTileXRef(), nlwarning, type, and uint. Referenced by transform().
01668 {
01669 // Need check the tile ?
01670 if ( (symmetry || (rotate != 0)) && (tile != 0xffffffff) )
01671 {
01672 // Tile exist ?
01673 if (tile < (uint)bank.getTileCount())
01674 {
01675 // Get xref
01676 int tileSet;
01677 int number;
01678 CTileBank::TTileType type;
01679
01680 // Get tile xref
01681 bank.getTileXRef ((int)tile, tileSet, number, type);
01682
01683 if ((tileSet < 0) || (tileSet >= bank.getTileSetCount()))
01684 {
01685 nlwarning("tile %d has an unknown tileSet (%d)",tile, tileSet);
01686 return false;
01687 }
01688
01689 // Is it an oriented tile ?
01690 if (bank.getTileSet (tileSet)->getOriented())
01691 {
01692 // New rotation value
01693 rotate = 0;
01694 }
01695
01696 // Ok
01697 return true;
01698 }
01699
01700 return false;
01701 }
01702 else
01703 return true;
01704 }
|
|
||||||||||||
|
setup NoiseSmooth flags: used for Noise geometry and lighting. NB: convention: corner0==A, corner1==B ...
Definition at line 56 of file 3d/zone.cpp. References nlassert, and uint. Referenced by NL3D::CZone::retrieve().
00057 {
00058 nlassert(corner<=3);
00059 uint mask= 1<<corner;
00060 if(smooth)
00061 _CornerSmoothFlag|= mask;
00062 else
00063 _CornerSmoothFlag&= ~mask;
00064 }
|
|
||||||||||||
|
Set the smooth flag for the n-th edge. flag is false if this edge must by smoothed, true else. Definition at line 180 of file src/3d/zone.h. References uint.
|
|
||||||||||||||||||||||||||||||||||||
|
Adjusts a CPatchInfo array to get a symmetrized / rotated zone with matching oriented tiles. This method only adjuste tile and vertex color array, does'nt transform vertices. Transform an array of patchInfo by a symmetry on OY axis followed by a 90deg CCW rotation (0, 1, 2, 3). The method doesn't transform vertices. If symmetry, the method invert 0-3 and 1-2 vertices indexes to get CCW oriented patches. It will fix bind informations. The method fixes tile and color vertex arrays. The method fixes tile rotation, 256 cases and tile transistions. Return false if something wrong. Definition at line 1825 of file 3d/zone.cpp. References BaseVertices, BindEdges, NL3D::CZoneSymmetrisation::build(), NL3D::CPatchInfo::CBindInfo::Edge, Flags, getSmoothFlag(), NL3D::CTileElement::getTile256Info(), NL3D::CTileElement::getTileOrient(), NL3D::CZoneSymmetrisation::getTileState(), getTileSymmetryRotate(), NL3D::CBezierPatch::Interiors, NL3D::CPatchInfo::CBindInfo::Next, nlwarning, NL3D::CPatchInfo::CBindInfo::NPatchs, OrderS, OrderT, Patch, NL3D::CTileElement::setTile256Info(), NL3D::CTileElement::setTileOrient(), NL3D::CBezierPatch::Tangents, NL3D::CTileElement::Tile, TileColors, Tiles, transform256Case(), transformTile(), uint, uint16, uint8, v, and NL3D::CBezierPatch::Vertices.
01826 {
01827 uint patchCount = patchInfo.size ();
01828 uint i;
01829
01830 // --- Export tile info Symmetry of the bind info.
01831 // --- Parse each patch and each edge
01832
01833 // For each patches
01834 NL3D::CZoneSymmetrisation::CError error;
01835
01836 // Build the structure
01837 if (!zoneSymmetry.build (patchInfo, snapCell, weldThreshold, bank, error, toOriginalSpace))
01838 {
01839 return false;
01840 }
01841
01842 // Symmetry ?
01843 if (symmetry)
01844 {
01845 for(i=0 ; i<patchCount; i++)
01846 {
01847 // Ref on the current patch
01848 CPatchInfo &pi = patchInfo[i];
01849
01850 // --- Symmetry vertex indexes
01851
01852 // Vertices
01853 CVector tmp = pi.Patch.Vertices[0];
01854 pi.Patch.Vertices[0] = pi.Patch.Vertices[3];
01855 pi.Patch.Vertices[3] = tmp;
01856 tmp = pi.Patch.Vertices[1];
01857 pi.Patch.Vertices[1] = pi.Patch.Vertices[2];
01858 pi.Patch.Vertices[2] = tmp;
01859
01860 // Tangents
01861 tmp = pi.Patch.Tangents[0];
01862 pi.Patch.Tangents[0] = pi.Patch.Tangents[5];
01863 pi.Patch.Tangents[5] = tmp;
01864 tmp = pi.Patch.Tangents[1];
01865 pi.Patch.Tangents[1] = pi.Patch.Tangents[4];
01866 pi.Patch.Tangents[4] = tmp;
01867 tmp = pi.Patch.Tangents[2];
01868 pi.Patch.Tangents[2] = pi.Patch.Tangents[3];
01869 pi.Patch.Tangents[3] = tmp;
01870 tmp = pi.Patch.Tangents[6];
01871 pi.Patch.Tangents[6] = pi.Patch.Tangents[7];
01872 pi.Patch.Tangents[7] = tmp;
01873
01874 // Interior
01875 tmp = pi.Patch.Interiors[0];
01876 pi.Patch.Interiors[0] = pi.Patch.Interiors[3];
01877 pi.Patch.Interiors[3] = tmp;
01878 tmp = pi.Patch.Interiors[1];
01879 pi.Patch.Interiors[1] = pi.Patch.Interiors[2];
01880 pi.Patch.Interiors[2] = tmp;
01881
01882 // ** Symmetries tile colors
01883
01884 uint u,v;
01885 uint countU = pi.OrderS/2+1;
01886 uint countV = pi.OrderT+1;
01887 for (v=0; v<countV; v++)
01888 for (u=0; u<countU; u++)
01889 {
01890 // Store it in the tile info
01891 uint index0 = u+v*(pi.OrderS+1);
01892 uint index1 = (pi.OrderS-u)+v*(pi.OrderS+1);
01893
01894 // XChg
01895 uint16 tmp = pi.TileColors[index0].Color565;
01896 pi.TileColors[index0].Color565 = pi.TileColors[index1].Color565;
01897 pi.TileColors[index1].Color565 = tmp;
01898 }
01899
01900 // Smooth flags
01901 uint flags = (uint)(pi.getSmoothFlag (0))<<2;
01902 flags |= (uint)(pi.getSmoothFlag (2))<<0;
01903 flags |= (uint)(pi.getSmoothFlag (1))<<1;
01904 flags |= (uint)(pi.getSmoothFlag (3))<<3;
01905 pi.Flags &= ~3;
01906 pi.Flags |= flags;
01907 }
01908
01909 // --- Symmetry of the bind info.
01910 // --- Parse each patch and each edge
01911 // For each patches
01912 for (i=0 ; i<patchCount; i++)
01913 {
01914 // Ref on the patch info
01915 CPatchInfo &pi = patchInfo[i];
01916
01917 // Xchg left and right
01918 swap (pi.BindEdges[0], pi.BindEdges[2]);
01919 swap (pi.BaseVertices[0], pi.BaseVertices[3]);
01920 swap (pi.BaseVertices[1], pi.BaseVertices[2]);
01921
01922 // Flip edges
01923 for (uint edge=0; edge<4; edge++)
01924 {
01925 // Ref on the patch info
01926 CPatchInfo::CBindInfo &bindEdge = pi.BindEdges[edge];
01927
01928 uint next;
01929 // Look if it is a bind ?
01930 if ( (bindEdge.NPatchs>1) && (bindEdge.NPatchs!=5) )
01931 {
01932 for (next=0; next<(uint)bindEdge.NPatchs/2; next++)
01933 {
01934 swap (bindEdge.Next[bindEdge.NPatchs - next - 1], bindEdge.Next[next]);
01935 swap (bindEdge.Edge[bindEdge.NPatchs - next - 1], bindEdge.Edge[next]);
01936 }
01937 }
01938
01939 // Look if we are binded on a reversed edge
01940 uint bindCount = (bindEdge.NPatchs==5) ? 1 : bindEdge.NPatchs;
01941 for (next=0; next<bindCount; next++)
01942 {
01943 // Left or right ?
01944 if ( (bindEdge.Edge[next] & 1) == 0)
01945 {
01946 // Invert
01947 bindEdge.Edge[next] += 2;
01948 bindEdge.Edge[next] &= 3;
01949 }
01950 }
01951 }
01952 }
01953 }
01954
01955 // For each patches
01956 for (i=0 ; i<patchCount; i++)
01957 {
01958 // Tile infos
01959 CPatchInfo &pi = patchInfo[i];
01960
01961 // Backup tiles
01962 std::vector<CTileElement> tiles = pi.Tiles;
01963
01964 int u,v;
01965 for (v=0; v<pi.OrderT; v++)
01966 for (u=0; u<pi.OrderS; u++)
01967 {
01968 // U tile
01969 int uSymmetry = symmetry ? (pi.OrderS-u-1) : u;
01970
01971 // Destination tile
01972 CTileElement &element = pi.Tiles[u+v*pi.OrderS];
01973
01974 // Copy the orginal symmetrical element
01975 element = tiles[uSymmetry+v*pi.OrderS];
01976
01977 // For each layer
01978 for (int l=0; l<3; l++)
01979 {
01980 // Empty ?
01981 if (element.Tile[l] != 0xffff)
01982 {
01983 // Get the tile index
01984 uint tile = element.Tile[l];
01985 uint tileRotation = element.getTileOrient (l);
01986
01987 // Get rot and symmetry for this tile
01988 uint tileRotate = rotate;
01989 bool tileSymmetry = symmetry;
01990 bool goofy = symmetry && (zoneSymmetry.getTileState (i, uSymmetry+v*pi.OrderS, l) == CZoneSymmetrisation::Goofy);
01991
01992 // Transform the transfo
01993 if (getTileSymmetryRotate (bank, tile, tileSymmetry, tileRotate))
01994 {
01995 // Transform the tile
01996 if (!transformTile (bank, tile, tileRotation, tileSymmetry, (4-tileRotate)&3, goofy))
01997 {
01998 // Info
01999 nlwarning ("Error getting symmetrical / rotated zone tile.");
02000 return false;
02001 }
02002 }
02003 else
02004 {
02005 // Info
02006 nlwarning ("Error getting symmetrical / rotated zone tile.");
02007 return false;
02008 }
02009
02010 // Set the tile
02011 element.Tile[l] = tile;
02012 element.setTileOrient (l, (uint8)tileRotation);
02013 }
02014 }
02015
02016 // Empty ?
02017 if (element.Tile[0]!=0xffff)
02018 {
02019 // Get 256 info
02020 bool is256x256;
02021 uint8 uvOff;
02022 element.getTile256Info (is256x256, uvOff);
02023
02024 // 256 ?
02025 if (is256x256)
02026 {
02027 // Get rot and symmetry for this tile
02028 uint tileRotate = rotate;
02029 bool tileSymmetry = symmetry;
02030 uint tileRotation = tiles[uSymmetry+v*pi.OrderS].getTileOrient (0);
02031 bool goofy = symmetry && (zoneSymmetry.getTileState (i, uSymmetry+v*pi.OrderS, 0) == CZoneSymmetrisation::Goofy);
02032
02033 // Transform the transfo
02034 getTileSymmetryRotate (bank, element.Tile[0], tileSymmetry, tileRotate);
02035
02036 // Transform the case
02037 transform256Case (bank, uvOff, tileRotation, tileSymmetry, (4-tileRotate)&3, goofy);
02038
02039 element.setTile256Info (true, uvOff);
02040 }
02041 }
02042 }
02043 }
02044
02045 // Ok
02046 return true;
02047 }
|
|
||||||||||||||||||||||||||||
|
Get neighbor tile across a edge
Definition at line 1799 of file 3d/zone.cpp. Referenced by transform().
01800 {
01801 // Tile exist ?
01802 if ( (rotate!=0) || symmetry )
01803 {
01804 // Symmetry ?
01805 if (symmetry)
01806 {
01807 // Take the symmetry
01808 uint symArray[4] = {3, 2, 1, 0};
01809 case256 = symArray[case256];
01810
01811 if (goofy && ((tileRotation & 1) ==0))
01812 case256 += 2;
01813 if ((!goofy) && (tileRotation & 1))
01814 case256 += 2;
01815 }
01816
01817 // Rotation ?
01818 case256 -= rotate;
01819 case256 &= 3;
01820 }
01821 }
|
|
||||||||||||||||||||||||||||
|
Get neighbor tile across a edge
Definition at line 1708 of file 3d/zone.cpp. References NL3D::CTileSet::getOrientedBorder(), NL3D::CTileSetTransition::getTile(), NL3D::CTileBank::getTileCount(), NL3D::CTileBank::getTileSet(), NL3D::CTileBank::getTileXRef(), NL3D::CTileSet::getTransition(), NL3D::CTileSet::getTransitionTile(), nlassert, type, and uint. Referenced by transform().
01709 {
01710 // Tile exist ?
01711 if ( (rotate!=0) || symmetry )
01712 {
01713 if (tile < (uint)bank.getTileCount())
01714 {
01715 // Get xref
01716 int tileSet;
01717 int number;
01718 CTileBank::TTileType type;
01719
01720 // Get tile xref
01721 bank.getTileXRef ((int)tile, tileSet, number, type);
01722
01723 // Transition ?
01724 if (type == CTileBank::transition)
01725 {
01726 // Rotation for transition
01727 uint transRotate = rotate;
01728
01729 // Number should be ok
01730 nlassert (number>=0);
01731 nlassert (number<CTileSet::count);
01732
01733 // Tlie set number
01734 const CTileSet *pTileSet = bank.getTileSet (tileSet);
01735
01736 // Get border desc
01737 CTileSet::TFlagBorder oriented[4] =
01738 {
01739 pTileSet->getOrientedBorder (CTileSet::left, CTileSet::getEdgeType ((CTileSet::TTransition)number, CTileSet::left)),
01740 pTileSet->getOrientedBorder (CTileSet::bottom, CTileSet::getEdgeType ((CTileSet::TTransition)number, CTileSet::bottom)),
01741 pTileSet->getOrientedBorder (CTileSet::right, CTileSet::getEdgeType ((CTileSet::TTransition)number, CTileSet::right)),
01742 pTileSet->getOrientedBorder (CTileSet::top, CTileSet::getEdgeType ((CTileSet::TTransition)number, CTileSet::top))
01743 };
01744
01745 // Symmetry ?
01746 if (symmetry)
01747 {
01748 if ( (tileRotation & 1) ^ goofy )
01749 {
01750 CTileSet::TFlagBorder tmp = oriented[1];
01751 oriented[1] = CTileSet::getInvertBorder (oriented[3]);
01752 oriented[3] = CTileSet::getInvertBorder (tmp);
01753 oriented[2] = CTileSet::getInvertBorder (oriented[2]);
01754 oriented[0] = CTileSet::getInvertBorder (oriented[0]);
01755 }
01756 else
01757 {
01758 CTileSet::TFlagBorder tmp = oriented[0];
01759 oriented[0] = CTileSet::getInvertBorder (oriented[2]);
01760 oriented[2] = CTileSet::getInvertBorder (tmp);
01761 oriented[1] = CTileSet::getInvertBorder (oriented[1]);
01762 oriented[3] = CTileSet::getInvertBorder (oriented[3]);
01763 }
01764 }
01765
01766 // Rotation
01767 CTileSet::TFlagBorder edges[4];
01768 edges[0] = pTileSet->getOrientedBorder (CTileSet::left, oriented[(0 + transRotate )&3]);
01769 edges[1] = pTileSet->getOrientedBorder (CTileSet::bottom, oriented[(1 + transRotate )&3]);
01770 edges[2] = pTileSet->getOrientedBorder (CTileSet::right, oriented[(2 + transRotate )&3]);
01771 edges[3] = pTileSet->getOrientedBorder (CTileSet::top, oriented[(3 + transRotate )&3]);
01772
01773 // Get the good tile number
01774 CTileSet::TTransition transition = pTileSet->getTransitionTile (edges[3], edges[1], edges[0], edges[2]);
01775 nlassert ((CTileSet::TTransition)transition != CTileSet::notfound);
01776 tile = (uint)(pTileSet->getTransition (transition)->getTile ());
01777 }
01778
01779 // Transform rotation: invert rotation
01780 tileRotation += rotate;
01781
01782 // If goofy, add +2
01783 if (goofy && symmetry)
01784 tileRotation += 2;
01785
01786 // Mask the rotation
01787 tileRotation &= 3;
01788 }
01789 else
01790 return false;
01791 }
01792
01793 // Ok
01794 return true;
01795 }
|
|
|
Definition at line 251 of file src/3d/zone.h. |
|
|
The base corner vertices indices in the current zone. Used for patch connectivity.
Definition at line 126 of file src/3d/zone.h. Referenced by NL3D::CZone::build(), NL3D::CZoneTgtSmoother::makeVerticesCoplanar(), NL3D::CZone::retrieve(), and transform(). |
|
|
Definition at line 236 of file src/3d/zone.h. Referenced by NL3D::CZone::build(), getNeighborTile(), NL3D::CZoneTgtSmoother::makeVerticesCoplanar(), NL3D::CZone::retrieve(), NL3D::CZoneSmoother::smoothTangents(), and transform(). |
|
|
The Base Size*bumpiness of the patch (/2 at each subdivide). Set to 0, if you want CZone to compute it for you.
Definition at line 124 of file src/3d/zone.h. Referenced by NL3D::CZone::build(), and NL3D::CZone::retrieve(). |
|
|
"The don't smooth" flags. For each edge of the patch (0~3), the flag means that this patch mustn't be smoothed with its neightbor. The n-th edge links the vertices "n" and "(n+1)%4". The flag for the n-th edge is (1<<n). Definition at line 130 of file src/3d/zone.h. Referenced by NL3D::CZone::build(), NL3D::CZone::retrieve(), and transform(). |
|
|
The Tile lumels for this patch. There must be (OrderS*4+1)*(OrderT*4+1) tile lumels. Those are lumel value in tiles. There is 4x4 lumels by tiles plus last lumels. They are stored in line first order, from S=0 to 1, and T=0 to 1. Definition at line 161 of file src/3d/zone.h. Referenced by NL3D::CZone::build(), NL3D::CZoneLighter::processCalc(), and NL3D::CZone::retrieve(). |
|
|
The orientation of the NoiseMap. 0,1,2,3. This represent a CCW rotation of the NoiseMap.
Definition at line 134 of file src/3d/zone.h. Referenced by NL3D::CZone::build(), and NL3D::CZone::retrieve(). |
|
|
Tile Order for the patch.
Definition at line 122 of file src/3d/zone.h. Referenced by NL3D::CZoneSymmetrisation::build(), NL3D::CZone::build(), NL3D::CZoneSymmetrisation::propagateTileState(), NL3D::CZone::retrieve(), NL3D::CZoneSymmetrisation::setOrientedTileState(), NL3D::CZoneSymmetrisation::setTileState(), NL3D::st2uv(), transform(), and NL3D::uv2st(). |
|
|
Tile Order for the patch.
Definition at line 122 of file src/3d/zone.h. Referenced by NL3D::CZoneSymmetrisation::build(), NL3D::CZone::build(), NL3D::CZone::retrieve(), NL3D::CZoneSymmetrisation::setOrientedTileState(), NL3D::CZoneSymmetrisation::setTileState(), NL3D::st2uv(), transform(), and NL3D::uv2st(). |
|
|
The patch coordinates.
Definition at line 120 of file src/3d/zone.h. Referenced by NL3D::CZone::build(), NL3D::CZoneTgtSmoother::makeVerticesCoplanar(), NL3D::CZone::retrieve(), NL3D::CZoneSymmetrisation::setOrientedTileState(), NL3D::CZoneSymmetrisation::setTileState(), NL3D::CZoneSmoother::smoothTangents(), and transform(). |
|
|
The Tile colors for this patch. There must be (OrderS+1)*(OrderT+1) tile colors. Those are the colors at the corners of the tiles. They are stored in line first order, from S=0 to 1, and T=0 to 1. Definition at line 155 of file src/3d/zone.h. Referenced by NL3D::CZone::build(), NL3D::CZone::retrieve(), and transform(). |
|
|
There is (OrderS/2+1) * (OrderT/2+1) tiles light influence. It indicates which static pointLight influence each corner of a TessBlock (block of 2*2 tiles). If size()==0, suppose no light influence. but CZone::retrieve() always return a size() == (OrderS/2+1) * (OrderT/2+1). They are stored in line first order, from S=0 to 1, and T=0 to 1. Definition at line 171 of file src/3d/zone.h. Referenced by NL3D::CZone::build(), NL3D::CZoneLighter::processZonePointLightRT(), and NL3D::CZone::retrieve(). |
|
|
The Tiles for this patch. There must be OrderS*OrderT tiles. They are stored in line first order, from S=0 to 1, and T=0 to 1. Definition at line 149 of file src/3d/zone.h. Referenced by NL3D::CZone::build(), NL3D::CZoneSymmetrisation::propagateTileState(), NL3D::CZone::retrieve(), NL3D::CZoneSymmetrisation::setOrientedTileState(), NL3D::CZoneSymmetrisation::setTileState(), and transform(). |
1.3.6