int osd_lookuppatch(<geometry>geometry, int face_id, float face_u, float face_v, int &patch_id, float &patch_u, float &patch_v)
If you don’t specify a texture attribute, the function uses intrinsic polygon interpolants.
int osd_lookuppatch(<geometry>geometry, int face_id, float face_u, float face_v, int &patch_id, float &patch_u, float &patch_v, string attribute)
If you specify a texture attribute, the function uses the UVs in that attribute to translate the face coordinates onto the OSD patch.
Given the face_id
and texture coordinates for a point inside the face (face_u
andface_v
), this function will return the corresponding patch_id
(Catmull-Clark subdivision face) and the patch interpolants (patch_u
and patch_v
). The reverse function to map from patch to face is osd_lookupface.
<geometry>
При запуске в контексте ноды (например, Wrangle SOP) этот аргумент может быть целым числом, представляющим номер входа (начиная с 0), с которого функция будет читать атрибуты.
В качестве альтернативы аргумент может быть строкой, указывающей на файл геометрии (например, *.bgeo
) для чтения. При запуске внутри Houdini может быть ссылкой op:/путь/до/sop
.
face_id
The primitive number of the Houdini polygon face.
face_u
, face_v
The coordinates in the subdivision patch to map onto a Houdini primitive.
These should have values in the range 0 to 1. Not all values are valid for triangles.
The texture coordinates should be specified according to the attribute passed in.
If you pass invalid coordinates, the function will fail and return 0
.
&patch_id
The function overwrites this variable with the corresponding OSD patch number. This is also the same integer value used to identify the face when performing PTex texture mapping.
&face_u
, &face_v
The function overwrites these variables with the corresponding U/V coordinates on the OSD patch.
Returns
1
on success or 0
on an error.
Examples
// This function can be used to move points generated by a scatter SOP to the // subdivision limit surface. The scatter SOP needs to store the "sourceprim" // (the Output Attributes tab). Texture coordinates also need to be // transferred from the source geometry. void movePointToLimitSurface(string file; vector P, uv; int sourceprim) { int patch_id = -1; float patch_u, patch_v; if (osd_lookuppatch(file, sourceprim, uv.x, uv.y, patch_id, patch_u, patch_v, "uv")) { vector tmpP; if (osd_limitsurface(file, "P", patch_id, patch_u, patch_v, tmpP)) P = tmpP; } }
See also | |
subd |