Finding
TA 3DO files do not contain explicit UV coordinates. A primitive stores vertex indices and a texture-name reference. UVs are generated by the renderer from the primitive’s vertex order.
The local TA3D implementation confirms the general rule in src/ta3d/src/mesh/3do.cpp:
- texture images are packed into a per-piece atlas;
- each primitive vertex receives a corner coordinate using
e & 3; - corner order is
(0,0),(1,0),(1,1),(0,1); - polygons are triangulated as a fan while preserving those coordinates;
- visibility is resolved by the OpenGL depth buffer, not by a unit-specific primitive order.
Relevant source lines in the analyzed checkout:
3do.cpp:293-435— atlas placement;3do.cpp:480-542— triangulation and generated texture coordinates;3do.cpp:499-531— primitive-order UV assignment;3do.cpp:825-910— textured geometry submission;gfx.cpp:216-225— depth testing withGL_LESS.
Annihilator implication
The noise3*, noise2*, and metal3* entries on the turret are real source textures, not missing geometry. Their average colors create the coarse gray mosaic currently visible in the preview. A faithful texture pass must reproduce TA3D’s primitive-order UVs and texture filtering, then be compared against a flat-color pass on isolated turret, arm, and gun pieces before replacing the production animation.
The first experimental screen-angle mapping was rejected: it produced wood-like diagonal artifacts and was removed. No unit-specific ordering or geometry edits are justified by that experiment.