// SPDX-License-Identifier: CC0-1.0 // // SPDX-FileContributor: Antonio Niño Díaz, 2008-2011, 2019, 2022 // // This file is part of Nitro Engine #include #include NE_Camera *Camera; NE_Model *Model; NE_Material *Material; void Draw3DScene(void) { NE_CameraUse(Camera); NE_ModelDraw(Model); } int main(void) { irqEnable(IRQ_HBLANK); irqSet(IRQ_VBLANK, NE_VBLFunc); irqSet(IRQ_HBLANK, NE_HBLFunc); // Init Nitro Engine in normal 3D mode NE_Init3D(); // libnds uses VRAM_C for the text console, reserve A and B only NE_TextureSystemReset(0, 0, NE_VRAM_AB); // Init console in non-3D screen consoleDemoInit(); if (!nitroFSInit(NULL)) { printf("nitroFSInit failed.\nPress START to exit"); while (1) { NE_WaitForVBL(0); scanKeys(); uint32_t keys = keysHeld(); if (keys & KEY_START) return 0; } } // Allocate space for the objects we'll use Model = NE_ModelCreate(NE_Static); Camera = NE_CameraCreate(); Material = NE_MaterialCreate(); // Set coordinates for the camera NE_CameraSet(Camera, -8, 3, 0, // Position 0, 3, 0, // Look at 0, 1, 0); // Up direction // Load mesh from the filesystem and assign it to the object "Model". NE_ModelLoadStaticMeshFAT(Model, "robot.bin"); // Load a RGB texture from RAM and assign it to "Material". NE_MaterialTexLoadFAT(Material, NE_RGB5, 256, 256, NE_TEXGEN_TEXCOORD, "texture.img.bin"); // Assign texture to model... NE_ModelSetMaterial(Model, Material); // We set up a light and its color NE_LightSet(0, NE_White, -0.5, -0.5, -0.5); while (1) { // Wait for next frame NE_WaitForVBL(0); // Get keys information scanKeys(); uint32_t keys = keysHeld(); printf("\x1b[0;0HPad: Rotate."); // Rotate model using the pad if (keys & KEY_UP) NE_ModelRotate(Model, 0, 0, -2); if (keys & KEY_DOWN) NE_ModelRotate(Model, 0, 0, 2); if (keys & KEY_RIGHT) NE_ModelRotate(Model, 0, 2, 0); if (keys & KEY_LEFT) NE_ModelRotate(Model, 0, -2, 0); // Draw scene NE_Process(Draw3DScene); } return 0; }