MCPcopy Create free account
hub / github.com/OpenNFS/OpenNFS / nfsUvGenerate

Function nfsUvGenerate

src/Loaders/track_utils.cpp:204–337  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

202 }
203
204 std::vector<glm::vec2> nfsUvGenerate(NFSVer tag, EntityType mesh_type, uint32_t textureFlags, Texture gl_texture) {
205 std::bitset<32> textureAlignment(textureFlags);
206 std::vector<glm::vec2> uvs;
207
208 switch (tag) {
209 case NFS_1:
210 ASSERT(false, "Unimplemented");
211 break;
212 case NFS_2:
213 case NFS_2_SE:
214 switch (mesh_type) {
215 case XOBJ: {
216 bool horizontalFlip = false; //textureAlignment[8];
217 bool verticalFlip = false; //textureAlignment[9];
218 glm::vec2 originTransform = glm::vec2(0.5f, 0.5f);
219 uint8_t nRotate = 0;
220 float angle = nRotate * 90.f;
221 glm::mat2 uvRotationTransform = glm::mat2(cos(glm::radians(angle)), sin(glm::radians(angle)), -sin(glm::radians(angle)), cos(glm::radians(angle)));
222 uvs.emplace_back(((glm::vec2(1.0f, 1.0f) - originTransform) * uvRotationTransform) + originTransform);
223 uvs.emplace_back(((glm::vec2(0.0f, 1.0f) - originTransform) * uvRotationTransform) + originTransform);
224 uvs.emplace_back(((glm::vec2(0.0f, 0.0f) - originTransform) * uvRotationTransform) + originTransform);
225 uvs.emplace_back(((glm::vec2(1.0f, 1.0f) - originTransform) * uvRotationTransform) + originTransform);
226 uvs.emplace_back(((glm::vec2(0.0f, 0.0f) - originTransform) * uvRotationTransform) + originTransform);
227 uvs.emplace_back(((glm::vec2(1.0f, 0.0f) - originTransform) * uvRotationTransform) + originTransform);
228 for (auto &uv : uvs) {
229 if (horizontalFlip) {
230 uv.x = 1.0f - uv.x;
231 }
232 if (verticalFlip) {
233 uv.y = 1.0f - uv.y;
234 }
235 uv.x *= gl_texture.max_u;
236 uv.y *= gl_texture.max_v;
237 }
238 }
239 break;
240 case OBJ_POLY:
241 break;
242 case ROAD:
243 {
244 bool horizontalFlip = false; // textureAlignment[8];
245 bool verticalFlip = false; // textureAlignment[9];
246 glm::vec2 originTransform = glm::vec2(0.5f, 0.5f);
247 uint8_t nRotate = (textureFlags >> 11) & 3; // 8,11 ok
248 float angle = nRotate * 90.f;
249 glm::mat2 uvRotationTransform = glm::mat2(cos(glm::radians(angle)), sin(glm::radians(angle)), -sin(glm::radians(angle)), cos(glm::radians(angle)));
250 uvs.emplace_back(((glm::vec2(1.0f, 1.0f) - originTransform) * uvRotationTransform) + originTransform);
251 uvs.emplace_back(((glm::vec2(0.0f, 1.0f) - originTransform) * uvRotationTransform) + originTransform);
252 uvs.emplace_back(((glm::vec2(0.0f, 0.0f) - originTransform) * uvRotationTransform) + originTransform);
253 uvs.emplace_back(((glm::vec2(1.0f, 1.0f) - originTransform) * uvRotationTransform) + originTransform);
254 uvs.emplace_back(((glm::vec2(0.0f, 0.0f) - originTransform) * uvRotationTransform) + originTransform);
255 uvs.emplace_back(((glm::vec2(1.0f, 0.0f) - originTransform) * uvRotationTransform) + originTransform);
256 for (auto &uv : uvs) {
257 if (horizontalFlip) {
258 uv.x = 1.0f - uv.x;
259 }
260 if (verticalFlip) {
261 uv.y = 1.0f - uv.y;

Callers 4

LoadGEOMethod · 0.85
ParseTRKModelsMethod · 0.85
ParseTRKModelsMethod · 0.85
ParseTRKModelsMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected