Skip to content
Rival
ModelsCompareBest ForArenaPricing
Sign Up
Sign Up

We compare AI models for a living. On purpose. We chose this.

@rival_tips

Explore

  • Compare Models
  • All Models
  • Find Your Model
  • Image Generation
  • Audio Comparison
  • Best AI For...
  • Pricing
  • Challenges

Discover

  • Insights
  • Research
  • AI Creators
  • AI Tools
  • The Graveyard

Developers

  • Developer Hub
  • MCP Server
  • Rival Datasets

Connect

  • Methodology
  • Sponsor a Model
  • Advertise
  • Partnerships
  • Privacy Policy
  • Terms
  • RSS Feed
© 2026 Rival · Built at hours no one should be awake, on hardware we don't own
Rival
ModelsCompareBest ForArenaPricing
Sign Up
Sign Up

Autonomous Drone Simulator | AI Challenge

  1. Home
  2. Challenges
  3. Autonomous Drone Simulator
Best AI for:3D Graphics (Three.js)Creative Coding

Best AI for Autonomous Drone Simulator

Top Performers: Autonomous Drone Simulator

Aug 2025 – Apr 2026
#1Gemini 3.1 Pro Preview76% win rateHigh confidence
#2Qwen: Qwen3.6 Plus Preview (free)73% win rateHigh confidence
#3Z.AI: GLM 4.5 Air75% win rateHigh confidence
Compare top performers →

Single-shot · temp 0.7 · real votes · identical prompts·How we test →

Loading...
vs

Ask them anything yourself

Gemini 3.1 Pro PreviewQwen: Qwen3.6 Plus Preview (free)

We compare AI models for a living. On purpose. We chose this.

@rival_tips

Explore

  • Compare Models
  • All Models
  • Find Your Model
  • Image Generation
  • Audio Comparison
  • Best AI For...
  • Pricing
  • Challenges

Discover

  • Insights
  • Research
  • AI Creators
  • AI Tools
  • The Graveyard

Developers

  • Developer Hub
  • MCP Server
  • Rival Datasets

Connect

  • Methodology
  • Sponsor a Model
  • Advertise
  • Partnerships
  • Privacy Policy
  • Terms
  • RSS Feed
© 2026 Rival · Built at hours no one should be awake, on hardware we don't own
Back to Challenges
HardWeb Design

Autonomous Drone Simulator

Create an autonomous drone simulator with custom environment using ThreeJS

The Prompt

Create an autonomous drone simulator (drone flies by itself, isometric god like view, optionally interactive. With a custom environment (optionally creative), using ThreeJS, output a single-page self-contained HTML.

How the models did

aurora-alpha logo
Aurora AlphaAutonomous Drone Simulator
aurora-alpha logo
Aurora Alpha
Feb 2026·Autonomous Drone Simulator
Try this prompt
chatgpt-4o-03-25 logo
ChatGPT-4o (March 2025)Autonomous Drone Simulator
chatgpt-4o-03-25 logo
ChatGPT-4o (March 2025)
Feb 2026·Autonomous Drone Simulator
Try this prompt
claude-3-haiku logo
Claude 3 HaikuAutonomous Drone Simulator
claude-3-haiku logo
Claude 3 Haiku
Feb 2026·Autonomous Drone Simulator
Try this prompt
claude-3.5-sonnet logo
Claude Sonnet 3.6 (2022-10-22)Autonomous Drone Simulator
claude-3.5-sonnet logo
Claude Sonnet 3.6 (2022-10-22)
Feb 2026·Autonomous Drone Simulator
Try this prompt
claude-3.7-sonnet logo
Claude 3.7 SonnetAutonomous Drone Simulator
claude-3.7-sonnet logo
Claude 3.7 Sonnet
Mar 2026·Autonomous Drone Simulator
Try this prompt
claude-3.7-sonnet-thinking logo
Claude 3.7 Thinking SonnetAutonomous Drone Simulator
claude-3.7-sonnet-thinking logo
Claude 3.7 Thinking Sonnet
Feb 2026·Autonomous Drone Simulator
Try this prompt
claude-4.5-sonnet logo
Claude Sonnet 4.5Autonomous Drone Simulator
claude-4.5-sonnet logo
Claude Sonnet 4.5
Feb 2026·Autonomous Drone Simulator
Try this prompt
claude-haiku-4.5 logo
Claude Haiku 4.5Autonomous Drone Simulator
claude-haiku-4.5 logo
Claude Haiku 4.5
Feb 2026·Autonomous Drone Simulator
Try this prompt
claude-opus-4 logo
Claude Opus 4Autonomous Drone Simulator
claude-opus-4 logo
Claude Opus 4
Aug 2025·Autonomous Drone Simulator
Try this prompt
claude-opus-4.1 logo
Claude Opus 4.1Autonomous Drone Simulator
claude-opus-4.1 logo
Claude Opus 4.1
Feb 2026·Autonomous Drone Simulator
Try this prompt
claude-opus-4.5 logo
Claude Opus 4.5Autonomous Drone Simulator
claude-opus-4.5 logo
Claude Opus 4.5
Feb 2026·Autonomous Drone Simulator
Try this prompt
claude-opus-4.6 logo
Claude Opus 4.6Autonomous Drone Simulator
claude-opus-4.6 logo
Claude Opus 4.6
Feb 2026·Autonomous Drone Simulator
Legendary·Autonomous flight
Try this prompt
claude-sonnet-4 logo
Claude Sonnet 4Autonomous Drone Simulator
claude-sonnet-4 logo
Claude Sonnet 4
Aug 2025·Autonomous Drone Simulator
Try this prompt
claude-sonnet-4.6 logo
Claude Sonnet 4.6Autonomous Drone Simulator
claude-sonnet-4.6 logo
Claude Sonnet 4.6
Feb 2026·Autonomous Drone Simulator
Try this prompt
deepseek-chat-v3.1 logo
DeepSeek V3.1Autonomous Drone Simulator
deepseek-chat-v3.1 logo
DeepSeek V3.1
Feb 2026·Autonomous Drone Simulator
Try this prompt
deepseek-r1 logo
DeepSeek R1Autonomous Drone Simulator
deepseek-r1 logo
DeepSeek R1
Feb 2026·Autonomous Drone Simulator
Try this prompt
deepseek-r1-0528 logo
DeepSeek R1 0528Autonomous Drone Simulator
deepseek-r1-0528 logo
DeepSeek R1 0528
Nothing here. The model returned empty. We stared at it for a while.
Feb 2026·Autonomous Drone Simulator
Try this prompt
deepseek-v3-03-24 logo
DeepSeek V3 (March 2024)Autonomous Drone Simulator
deepseek-v3-03-24 logo
DeepSeek V3 (March 2024)
Mar 2026·Autonomous Drone Simulator
Try this prompt
deepseek-v3.2 logo
DeepSeek V3.2Autonomous Drone Simulator
deepseek-v3.2 logo
DeepSeek V3.2
Feb 2026·Autonomous Drone Simulator
Legendary·Drone playground
Try this prompt
deepseek-v3.2-exp logo
DeepSeek V3.2 ExpAutonomous Drone Simulator
deepseek-v3.2-exp logo
DeepSeek V3.2 Exp
Feb 2026·Autonomous Drone Simulator
Try this prompt
devstral-medium logo
Mistral Devstral MediumAutonomous Drone Simulator
devstral-medium logo
Mistral Devstral Medium
Feb 2026·Autonomous Drone Simulator
Try this prompt
devstral-small logo
Mistral Devstral Small 1.1Autonomous Drone Simulator
devstral-small logo
Mistral Devstral Small 1.1
Feb 2026·Autonomous Drone Simulator
Try this prompt
gemini-2.5-flash-lite-preview-09-2025 logo
Google: Gemini 2.5 Flash Lite Preview 09-2025Autonomous Drone Simulator
gemini-2.5-flash-lite-preview-09-2025 logo
Google: Gemini 2.5 Flash Lite Preview 09-2025
Feb 2026·Autonomous Drone Simulator
Try this prompt
gemini-2.5-flash-preview-09-2025 logo
Google: Gemini 2.5 Flash Preview 09-2025Autonomous Drone Simulator
gemini-2.5-flash-preview-09-2025 logo
Google: Gemini 2.5 Flash Preview 09-2025
Feb 2026·Autonomous Drone Simulator
Try this prompt
gemini-2.5-pro-exp logo
Gemini 2.5 Pro ExperimentalAutonomous Drone Simulator
gemini-2.5-pro-exp logo
Gemini 2.5 Pro Experimental
Feb 2026·Autonomous Drone Simulator
Legendary·Drone intelligence
Try this prompt
gemini-2.5-pro-preview-05-06 logo
Gemini 2.5 Pro (I/O Edition)Autonomous Drone Simulator
gemini-2.5-pro-preview-05-06 logo
Gemini 2.5 Pro (I/O Edition)
Feb 2026·Autonomous Drone Simulator
Try this prompt
gemini-3-flash-preview logo
Gemini 3 Flash PreviewAutonomous Drone Simulator
gemini-3-flash-preview logo
Gemini 3 Flash Preview
Feb 2026·Autonomous Drone Simulator
Try this prompt
gemini-3-pro-preview logo
Gemini 3 Pro PreviewAutonomous Drone Simulator
gemini-3-pro-preview logo
Gemini 3 Pro Preview
Feb 2026·Autonomous Drone Simulator
Legendary·Drone sim mastery
Try this prompt
gemini-3.1-flash-lite-preview logo
Google: Gemini 3.1 Flash Lite PreviewAutonomous Drone Simulator
gemini-3.1-flash-lite-preview logo
Google: Gemini 3.1 Flash Lite Preview
Mar 2026·Autonomous Drone Simulator
Try this prompt
gemini-3.1-pro-preview logo
Gemini 3.1 Pro PreviewAutonomous Drone Simulator
gemini-3.1-pro-preview logo
Gemini 3.1 Pro Preview
Feb 2026·Autonomous Drone Simulator
Try this prompt
gemma-3-12b-it logo
Gemma 3 12BAutonomous Drone Simulator
gemma-3-12b-it logo
Gemma 3 12B
Feb 2026·Autonomous Drone Simulator
Try this prompt
gemma-3-27b-it logo
Gemma 3 27BAutonomous Drone Simulator
gemma-3-27b-it logo
Gemma 3 27B
Feb 2026·Autonomous Drone Simulator
Try this prompt
gemma-3n-e2b-it-free logo
Google: Gemma 3n 2BAutonomous Drone Simulator
gemma-3n-e2b-it-free logo
Google: Gemma 3n 2B

We can't display this one. It's not us. Well... it might be us.

The model was asked for a web page. It produced something else. We're not going to define what.

View raw output
```html
<!DOCTYPE html>
<html>
<head>
  <title>Autonomous Drone Simulator</title>
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
  <style>
    body {
      font-family: sans-serif;
      margin: 0;
      padding: 0;
      background-color: #f0f0f0;
    }

    .container {
      width: 90%;
      margin: 20px auto;
      text-align: center;
    }

    #environment {
      width: 800px;
      height: 600px;
      margin: 0 auto;
      border: 1px solid #ccc;
    }

    #controls {
      margin-top: 20px;
      padding: 10px;
      background-color: #fff;
      border: 1px solid #ccc;
      border-radius: 5px;
    }

    #status {
      margin-top: 10px;
      font-weight: bold;
    }
  </style>
</head>
<body>

  <div class="container">
    <h1>Autonomous Drone Simulator</h1>

    <div id="environment"></div>

    <div id="controls">
      <label for="speed">Speed:</label>
      <input type="number" id="speed" value="5" min="1" max="100">
      <button id="start">Start</button>
      <button id="stop">Stop</button>
      <button id="reset">Reset</button>
    </div>

    <div id="status">
      <!-- Display drone status here (e.g., "Flying", "Error") -->
    </div>
  </div>

  <script src="https://cdn.jsdelivr.net/npm/three@0.161.0/build/three.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/three@0.161.0/examples/js/loaders/GLTFLoader.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/three@0.161.0/examples/js/controls/FirstPersonControls.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/gsap@3.12.5/gsap.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>

  <script>
    const environmentDiv = document.getElementById('environment');
    const speedInput = document.getElementById('speed');
    const startButton = document.getElementById('start');
    const stopButton = document.getElementById('stop');
    const resetButton = document.getElementById('reset');
    const statusDiv = document.getElementById('status');

    let scene;
    let drone;
    let camera;
    let controls;
    let speed = 5;
    let isRunning = false;
    let lastTime = 0;

    // --- Environment (Customizable) ---
    const environmentData = {
      width: 800,
      height: 600,
      groundColor: '#333',
      skyColor: '#87CEEB',
      objects: [
        { x: 100, y: 50, z: 0, type: 'cube', color: '#FF0000', size: 20 },
        { x: 300, y: 150, z: 0, type: 'sphere', color: '#00FF00', radius: 30 },
        { x: 500, y: 300, z: 0, type: 'cylinder', color: '#0000FF', height: 50, radius: 10 }
      ]
    };


    // --- Drone Class ---
    class Drone {
      constructor(x, y, z) {
        this.x = x;
        this.y = y;
        this.z = z;
        this.rotation = { x: 0, y: 0, z: 0 };
      }

      update(deltaTime) {
        // Simple movement based on speed
        this.x += Math.cos(this.rotation.x * 0.1) * speed * deltaTime;
        this.y += Math.sin(this.rotation.y * 0.1) * speed * deltaTime;
        this.z += speed * deltaTime;

        // Keep drone within environment
        this.x = Math.max(0, Math.min(this.x, environmentData.width));
        this.y = Math.max(0, Math.min(this.y, environmentData.height));
        this.z = Math.max(0, Math.min(this.z, environmentData.height * 2)); // Adjust z-axis limit
      }

      draw() {
        // You can add more advanced drawing here (e.g., using a 3D model)
        // For now, just a simple cube
        const material = new THREE.MeshStandardMaterial({ color: 'purple' });
        const geometry = new THREE.BoxGeometry(20, 20, 20);
        const mesh = new THREE.Mesh(geometry, material);
        mesh.position.set(this.x, this.y, this.z);
        scene.add(mesh);
      }
    }



    // --- Initialize Three.js Scene ---
    function init() {
      scene = new THREE.Scene();
      scene.background = new THREE.Color(environmentData.skyColor);

      const ground = new THREE.PlaneGeometry(environmentData.width * 1.2, environmentData.height * 1.2);
      const groundMaterial = new THREE.MeshStandardMaterial({ color: environmentData.groundColor, roughness: 0.5 });
      const groundMesh = new THREE.Mesh(ground, groundMaterial);
      scene.add(groundMesh);


      drone = new Drone(environmentData.width / 2, environmentData.height / 2, environmentData.height * 1.5);
      drone.draw();

      camera = new THREE.PerspectiveCamera(75, environmentData.width / environmentData.height, 0.1, 1000);
      camera.position.set(0, environmentData.height / 2 + 50, 5);
      scene.add(camera);

      controls = new FirstPersonControls(camera, scene, {
        speed: speed,
        acceleration: 1,
        maxSpeed: 100
      });

      // Add some objects to the environment
      for (const obj of environmentData.objects) {
        const geometry = new THREE.Shape( {
          segments: obj.size,
          bevelDepth: 0
        });
        const material = new THREE.MeshStandardMaterial({ color: obj.color });

        const mesh = new THREE.Mesh(geometry, material);
        scene.add(mesh);
      }



      //--- Add a keypress event to the drone to control the camera ---
      document.addEventListener('keydown', (event) => {
        if (event.key === 'w') {
          camera.position.z += 1;
        } else if (event.key === 's') {
          camera.position.z -= 1;
        }
      });
    }

    // --- Update Function ---
    function update(time) {
      if (!isRunning) return;

      // Update drone position
      drone.update(time / 1000);

      // Update camera position based on drone movement
      camera.position.x = drone.x;
      camera.position.y = drone.y;
      camera.position.z = drone.z;

      // Apply camera movement to the environment
      for (const obj of environmentData.objects) {
        const geometry = new THREE.Shape( {
          segments: obj.size,
          bevelDepth: 0
        });
        const material = new THREE.MeshStandardMaterial({ color: obj.color });

        const mesh = new THREE.Mesh(geometry, material);
        mesh.position.set(drone.x, drone.y, drone.z);
        scene.add(mesh);
      }


      // Render
      renderer.render(scene, camera);
    }

    // --- Event Handlers ---
    startButton.addEventListener('click', () => {
      if (!isRunning) {
        isRunning = true;
        startTime = Date.now();
        console.log('Drone started');
      }
    });

    stopButton.addEventListener('click', () => {
Feb 2026·Autonomous Drone Simulator
Try this prompt
gemma-3n-e4b-it logo
Gemma 3n 4BAutonomous Drone Simulator
gemma-3n-e4b-it logo
Gemma 3n 4B
Feb 2026·Autonomous Drone Simulator
Try this prompt
gemma-4-26b-a4b-it logo
Google: Gemma 4 26B A4BAutonomous Drone Simulator
gemma-4-26b-a4b-it logo
Google: Gemma 4 26B A4B
Apr 2026·Autonomous Drone Simulator
Try this prompt
gemma-4-31b-it logo
Google: Gemma 4 31BAutonomous Drone Simulator
gemma-4-31b-it logo
Google: Gemma 4 31B
Apr 2026·Autonomous Drone Simulator
Try this prompt
glm-4-32b logo
Z.AI: GLM 4 32BAutonomous Drone Simulator
glm-4-32b logo
Z.AI: GLM 4 32B
Feb 2026·Autonomous Drone Simulator
Try this prompt
glm-4.5 logo
Z.AI: GLM 4.5Autonomous Drone Simulator
glm-4.5 logo
Z.AI: GLM 4.5

We can't display this one. It's not us. Well... it might be us.

The model was asked for a web page. It produced something else. We're not going to define what.

View raw output

I'll create an autonomous drone simulator with a futuristic neon city environment. The drone will navigate automatically through waypoints while avoiding obstacles, and you can interact with it by clicking to set new destinations.

```html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Autonomous Drone Simulator</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            font-family: 'Arial', sans-serif;
            overflow: hidden;
            background: #000;
        }

        #canvas-container {
            position: relative;
            width: 100vw;
            height: 100vh;
        }

        .ui-panel {
            position: absolute;
            background: rgba(0, 0, 0, 0.8);
            border: 1px solid #00ffff;
            border-radius: 10px;
            padding: 20px;
            color: #00ffff;
            font-size: 14px;
            backdrop-filter: blur(10px);
            box-shadow: 0 0 20px rgba(0, 255, 255, 0.3);
        }

        .status-panel {
            top: 20px;
            left: 20px;
            min-width: 250px;
        }

        .controls-panel {
            top: 20px;
            right: 20px;
            min-width: 200px;
        }

        .info-panel {
            bottom: 20px;
            left: 20px;
            max-width: 400px;
        }

        .status-item {
            margin: 10px 0;
            display: flex;
            justify-content: space-between;
            align-items: center;
        }

        .status-label {
            color: #00cccc;
        }

        .status-value {
            font-weight: bold;
            color: #00ff88;
        }

        .control-btn {
            background: linear-gradient(135deg, #00ffff, #0088ff);
            border: none;
            border-radius: 5px;
            padding: 10px 20px;
            color: #000;
            font-weight: bold;
            cursor: pointer;
            margin: 5px;
            transition: all 0.3s ease;
            font-size: 14px;
        }

        .control-btn:hover {
            transform: translateY(-2px);
            box-shadow: 0 5px 15px rgba(0, 255, 255, 0.5);
        }

        .control-btn:active {
            transform: translateY(0);
        }

        .control-btn.active {
            background: linear-gradient(135deg, #ff00ff, #ff0088);
        }

        .slider-container {
            margin: 15px 0;
        }

        .slider {
            width: 100%;
            height: 5px;
            border-radius: 5px;
            background: #333;
            outline: none;
            -webkit-appearance: none;
        }

        .slider::-webkit-slider-thumb {
            -webkit-appearance: none;
            appearance: none;
            width: 20px;
            height: 20px;
            border-radius: 50%;
            background: #00ffff;
            cursor: pointer;
            box-shadow: 0 0 10px rgba(0, 255, 255, 0.5);
        }

        .slider::-moz-range-thumb {
            width: 20px;
            height: 20px;
            border-radius: 50%;
            background: #00ffff;
            cursor: pointer;
            box-shadow: 0 0 10px rgba(0, 255, 255, 0.5);
        }

        .waypoint-indicator {
            position: absolute;
            width: 20px;
            height: 20px;
            background: radial-gradient(circle, #ff00ff, transparent);
            border-radius: 50%;
            pointer-events: none;
            animation: pulse 1s infinite;
        }

        @keyframes pulse {
            0% { transform: scale(1); opacity: 1; }
            100% { transform: scale(2); opacity: 0; }
        }

        .title {
            font-size: 24px;
            font-weight: bold;
            text-align: center;
            margin-bottom: 20px;
            text-shadow: 0 0 10px rgba(0, 255, 255, 0.8);
        }

        .speed-indicator {
            width: 100%;
            height: 8px;
            background: #333;
            border-radius: 4px;
            overflow: hidden;
            margin-top: 5px;
        }

        .speed-bar {
            height: 100%;
            background: linear-gradient(90deg, #00ff00, #ffff00, #ff0000);
            transition: width 0.3s ease;
            border-radius: 4px;
        }
    </style>
</head>
<body>
    <div id="canvas-container">
        <div class="ui-panel status-panel">
            <div class="title">DRONE STATUS</div>
            <div class="status-item">
                <span class="status-label">Mode:</span>
                <span class="status-value" id="mode">AUTONOMOUS</span>
            </div>
            <div class="status-item">
                <span class="status-label">Altitude:</span>
                <span class="status-value" id="altitude">0m</span>
            </div>
            <div class="status-item">
                <span class="status-label">Speed:</span>
                <span class="status-value" id="speed">0 m/s</span>
            </div>
            <div class="speed-indicator">
                <div class="speed-bar" id="speed-bar" style="width: 0%"></div>
            </div>
            <div class="status-item">
                <span class="status-label">Waypoint:</span>
                <span class="status-value" id="waypoint">1/5</span>
            </div>
            <div class="status-item">
                <span class="status-label">Battery:</span>
                <span class="status-value" id="battery">100%</span>
            </div>
        </div>

        <div class="ui-panel controls-panel">
            <div class="title">CONTROLS</div>
            <button class="control-btn active" id="auto-btn">AUTO MODE</button>
            <button class="control-btn" id="manual-btn">MANUALbutton>
            <button class="control-btn" id="reset-btn">RESET</button>
            <button class="control-btn" id="add-waypoint">ADD WAYPOINT</button>
            
            <div class="slider-container">
                <label class="status-label">Speed Multiplier</label>
                <input type="range" class="slider" id="speed-slider" min="0.5" max="3" step="0.1" value="1">
                <span class="status-value" id="speed-value">1.0x</span>
            </div>
            
            <div class="slider-container">
                <label class="status-label">Camera Height</label>
                <input type="range" class="slider" id="height-slider" min="50" max="200" step="10" value="100">
                <span class="status-value" id="height-value">100m</span>
            </div>
        </div>

        <div class="ui-panel info-panel">
            <div class="title">INSTRUCTIONS</div>
            <p style="color: #00cccc; line-height: 1.5;">
                🚁 The drone flies autonomously through waypoints in the neon city.<br>
                🖱️ Click anywhere to add a new waypoint.<br>
                🎮 Use controls to switch between auto/manual mode.<br>
                ⚡ Adjust speed and camera height with sliders.<br>
                🎯 Watch as the drone avoids obstacles automatically.
            </p>
        </div>
    </div>

    <script>
        // Scene setup
        const scene = new THREE.Scene();
        scene.fog = new THREE.Fog(0x000000, 50, 300);

        // Camera setup (isometric view)
        const camera = new THREE.OrthographicCamera(
            window.innerWidth / -50,
            window.innerWidth / 50,
            window.innerHeight / -50,
            window.innerHeight / 50,
            1,
            500
        );
        camera.position.set(50, 100, 50);
        camera.lookAt(0, 0, 0);

        // Renderer setup
        const renderer = new THREE.WebGLRenderer({ antialias: true });
        renderer.setSize(window.innerWidth, window.innerHeight);
        renderer.shadowMap.enabled = true;
        renderer.shadowMap.type = THREE.PCFSoftShadowMap;
        document.getElementById('canvas-container').appendChild(renderer.domElement);

        // Lighting
        const ambientLight = new THREE.AmbientLight(0x404040, 0.5);
        scene.add(ambientLight);

        const directionalLight = new THREE.DirectionalLight(0xffffff, 0.8);
        directionalLight.position.set(50, 100, 50);
        directionalLight.castShadow = true;
        directionalLight.shadow.camera.left = -100;
        directionalLight.shadow.camera.right = 100;
        directionalLight.shadow.camera.top = 100;
        directionalLight.shadow.camera.bottom = -100;
        scene.add(directionalLight);

        // Ground
        const groundGeometry = new THREE.PlaneGeometry(200, 200);
        const groundMaterial = new THREE.MeshStandardMaterial({ 
            color: 0x0a0a0a,
            roughness: 0.8,
            metalness: 0.2
        });
        const ground = new THREE.Mesh(groundGeometry, groundMaterial);
        ground.rotation.x = -Math.PI / 2;
        ground.receiveShadow = true;
        scene.add(ground);

        // Grid helper
        const gridHelper = new THREE.GridHelper(200, 40, 0x00ffff, 0x004444);
        scene.add(gridHelper);

        // Drone class
        class Drone {
            constructor() {
                this.group = new THREE.Group();
                
                // Drone body
                const bodyGeometry = new THREE.BoxGeometry(2, 0.5, 2);
                const bodyMaterial = new THREE.MeshStandardMaterial({ 
                    color: 0x00ffff,
                    emissive: 0x004444,
                    emissiveIntensity: 0.5
                });
                const body = new THREE.Mesh(bodyGeometry, bodyMaterial);
                body.castShadow = true;
                this.group.add(body);

                // Drone arms and rotors
                const armGeometry = new THREE.BoxGeometry(3, 0.2, 0.2);
                const armMaterial = new THREE.MeshStandardMaterial({ color: 0x333333 });
                
                const rotorGeometry = new THREE.CylinderGeometry(1, 1, 0.1, 8);
                const rotorMaterial = new THREE.MeshStandardMaterial({ 
                    color: 0x666666,
                    emissive: 0x00ff00,
                    emissiveIntensity: 0.3
                });

                this.rotors = [];
                for (let i = 0; i < 4; i++) {
                    const angle = (Math.PI / 2) * i;
                    const arm = new THREE.Mesh(armGeometry, armMaterial);
                    arm.position.x = Math.cos(angle) * 1.5;
                    arm.position.z = Math.sin(angle) * 1.5;
                    arm.rotation.y = angle;
                    this.group.add(arm);

                    const rotor = new THREE.Mesh(rotorGeometry, rotorMaterial);
                    rotor.position.x = Math.cos(angle) * 1.5;
                    rotor.position.z = Math.sin(angle) * 1.5;
                    rotor.position.y = 0.3;
                    rotor.rotation.x = Math.PI / 2;
                    this.group.add(rotor);
                    this.rotors.push(rotor);
                }

                // LED lights
                const ledGeometry = new THREE.SphereGeometry(0.1, 8, 8);
                const ledMaterial = new THREE.MeshBasicMaterial({ color: 0xff0000 });
                const led = new THREE.Mesh(ledGeometry, ledMaterial);
                led.position.y = -0.3;
                this.group.add(led);

                this.position = new THREE.Vector3(0, 20, 0);
                this.velocity = new THREE.Vector3(0, 0, 0);
                this.targetPosition = new THREE.Vector3(0, 20, 0);
                this.waypoints = [];
                this.currentWaypointIndex = 0;
                this.speed = 0.5;
                this.battery = 100;
                this.mode = 'auto';
                this.rotorSpeed = 0;

                scene.add(this.group);
            }

            update(deltaTime) {
                // Update rotor rotation
                this.rotors.forEach((rotor, index) => {
                    rotor.rotation.z += this.rotorSpeed * (index % 2 === 0 ? 1 : -1);
                });

                if (this.mode === 'auto' && this.waypoints.length > 0) {
                    // Navigate to current waypoint
                    const target = this.waypoints[this.currentWaypointIndex];
                    const direction = new THREE.Vector3()
                        .subVectors(target, this.position)
                        .normalize();
                    
                    const distance = this.position.distanceTo(target);
                    
                    if (distance > 2) {
                        this.velocity = direction.multiplyScalar(this.speed);
                    } else {
                        // Reached waypoint, move to next
                        this.currentWaypointIndex = (this.currentWaypointIndex + 1) % this.waypoints.length;
                        this.velocity.multiplyScalar(0.1);
                    }
                }

                // Apply velocity with some smoothing
                this.position.add(this.velocity);
                this.velocity.multiplyScalar(0.95);

                // Update battery
                this.battery -= deltaTime * 0.5;
                if (this.battery < 0) this.battery = 0;

                // Update rotor speed based on movement
                this.rotorSpeed = this.velocity.length() * 20 + 5;

                // Update drone visual position
                this.group.position.copy(this.position);
                this.group.rotation.y = Math.atan2(this.velocity.x, this.velocity.z);

                // Keep drone above ground
                if (this.position.y < 5) {
                    this.position.y = 5;
                    this.velocity.y = Math.abs(this.velocity.y) * 0.5;
                }
            }

            addWaypoint(position) {
                this.waypoints.push(position.clone());
            }

            setWaypoints(points) {
                this.waypoints = points.map(p => p.clone());
                this.currentWaypointIndex = 0;
            }

            reset() {
                this.position.set(0, 20, 0);
                this.velocity.set(0, 0, 0);
                this.battery = 100;
                this.currentWaypointIndex = 0;
            }
        }

        // Building creation
        function createBuilding(x, z, width, height, depth) {
            const geometry = new THREE.BoxGeometry(width, height, depth);
            const material = new THREE.MeshStandardMaterial({ 
                color: new THREE.Color().setHSL(Math.random() * 0.1 + 0.5, 0.5, 0.3),
                emissive: new THREE.Color().setHSL(Math.random() * 0.1 + 0.5, 0.8, 0.2),
                emissiveIntensity: 0.3
            });
            const building = new THREE.Mesh(geometry, material);
            building.position.set(x, height / 2, z);
            building.castShadow = true;
            building.receiveShadow = true;
            
            // Add windows
            const windowGeometry = new THREE.PlaneGeometry(width * 0.8, height * 0.05);
            const windowMaterial = new THREE.MeshBasicMaterial({ 
                color: 0x00ffff,
                emissive: 0x00ffff,
                emissiveIntensity: 0.8
            });
            
            for (let i = 0; i < Math.floor(height / 5); i++) {
                const window = new THREE.Mesh(windowGeometry, windowMaterial);
                window.position.set(0, i * 5 - height / 2 + 2.5, depth / 2 + 0.01);
                building.add(window);
            }
            
            scene.add(building);
            return building;
        }

        // Create city environment
        function createCity() {
            const buildings = [];
            
            // Create buildings in a grid pattern
            for (let x = -80; x <= 80; x += 20) {
                for (let z = -80; z <= 80; z += 20) {
                    if (Math.random() > 0.3) {
                        const height = Math.random() * 30 + 10;
                        const width = Math.random() * 10 + 10;
                        const depth = Math.random() * 10 + 10;
                        buildings.push(createBuilding(x, z, width, height, depth));
                    }
                }
            }
            
            // Create some neon towers
            for (let i = 0; i < 5; i++) {
                const angle = (Math.PI * 2 / 5) * i;
                const x = Math.cos(angle) * 60
Aug 2025·Autonomous Drone Simulator
Try this prompt
glm-4.5-air logo
Z.AI: GLM 4.5 AirAutonomous Drone Simulator
glm-4.5-air logo
Z.AI: GLM 4.5 Air
Feb 2026·Autonomous Drone Simulator
Try this prompt
glm-4.6 logo
Z.AI: GLM 4.6Autonomous Drone Simulator
glm-4.6 logo
Z.AI: GLM 4.6
Feb 2026·Autonomous Drone Simulator
Try this prompt
glm-4.7 logo
Z.AI: GLM 4.7Autonomous Drone Simulator
glm-4.7 logo
Z.AI: GLM 4.7
Feb 2026·Autonomous Drone Simulator
Try this prompt
glm-4.7-flash logo
GLM 4.7 FlashAutonomous Drone Simulator
glm-4.7-flash logo
GLM 4.7 Flash
Feb 2026·Autonomous Drone Simulator
Try this prompt
glm-5 logo
Z.ai: GLM 5Autonomous Drone Simulator
glm-5 logo
Z.ai: GLM 5
Feb 2026·Autonomous Drone Simulator
Try this prompt
glm-5-turbo logo
GLM 5 TurboAutonomous Drone Simulator
glm-5-turbo logo
GLM 5 Turbo
Mar 2026·Autonomous Drone Simulator
Try this prompt
gpt-4 logo
GPT-4Autonomous Drone Simulator
gpt-4 logo
GPT-4
Feb 2026·Autonomous Drone Simulator
Try this prompt
gpt-4.1 logo
GPT-4.1Autonomous Drone Simulator
gpt-4.1 logo
GPT-4.1
Feb 2026·Autonomous Drone Simulator
Try this prompt
gpt-4.1-mini logo
GPT-4.1 MiniAutonomous Drone Simulator
gpt-4.1-mini logo
GPT-4.1 Mini
Feb 2026·Autonomous Drone Simulator
Try this prompt
gpt-4.1-nano logo
GPT-4.1 NanoAutonomous Drone Simulator
gpt-4.1-nano logo
GPT-4.1 Nano
Feb 2026·Autonomous Drone Simulator
Try this prompt
gpt-4o logo
GPT-4o (Omni)Autonomous Drone Simulator
gpt-4o logo
GPT-4o (Omni)
Feb 2026·Autonomous Drone Simulator
Try this prompt
gpt-4o-mini logo
GPT-4o miniAutonomous Drone Simulator
gpt-4o-mini logo
GPT-4o mini
Feb 2026·Autonomous Drone Simulator
Try this prompt
gpt-5 logo
GPT-5Autonomous Drone Simulator
gpt-5 logo
GPT-5
Nothing here. The model returned empty. We stared at it for a while.
Feb 2026·Autonomous Drone Simulator
Try this prompt
gpt-5-codex logo
GPT-5 CodexAutonomous Drone Simulator
gpt-5-codex logo
GPT-5 Codex
Nothing here. The model returned empty. We stared at it for a while.
Feb 2026·Autonomous Drone Simulator
Try this prompt
gpt-5-mini logo
GPT-5 MiniAutonomous Drone Simulator
gpt-5-mini logo
GPT-5 Mini
Nothing here. The model returned empty. We stared at it for a while.
Feb 2026·Autonomous Drone Simulator
Try this prompt
gpt-5-nano logo
GPT-5 NanoAutonomous Drone Simulator
gpt-5-nano logo
GPT-5 Nano
Nothing here. The model returned empty. We stared at it for a while.
Feb 2026·Autonomous Drone Simulator
Try this prompt
gpt-5-pro logo
GPT-5 ProAutonomous Drone Simulator
gpt-5-pro logo
GPT-5 Pro
Nothing here. The model returned empty. We stared at it for a while.
Feb 2026·Autonomous Drone Simulator
Try this prompt
gpt-5.1 logo
GPT-5.1Autonomous Drone Simulator
gpt-5.1 logo
GPT-5.1
Nothing here. The model returned empty. We stared at it for a while.
Feb 2026·Autonomous Drone Simulator
Try this prompt
gpt-5.1-chat logo
GPT-5.1 ChatAutonomous Drone Simulator
gpt-5.1-chat logo
GPT-5.1 Chat
Nothing here. The model returned empty. We stared at it for a while.
Feb 2026·Autonomous Drone Simulator
Try this prompt
gpt-5.1-codex logo
GPT-5.1-CodexAutonomous Drone Simulator
gpt-5.1-codex logo
GPT-5.1-Codex
Nothing here. The model returned empty. We stared at it for a while.
Feb 2026·Autonomous Drone Simulator
Try this prompt
gpt-5.1-codex-max logo
GPT-5.1 Codex MaxAutonomous Drone Simulator
gpt-5.1-codex-max logo
GPT-5.1 Codex Max
Nothing here. The model returned empty. We stared at it for a while.
Feb 2026·Autonomous Drone Simulator
Try this prompt
gpt-5.1-codex-mini logo
GPT-5.1-Codex-MiniAutonomous Drone Simulator
gpt-5.1-codex-mini logo
GPT-5.1-Codex-Mini
Nothing here. The model returned empty. We stared at it for a while.
Feb 2026·Autonomous Drone Simulator
Try this prompt
gpt-5.2 logo
GPT-5.2Autonomous Drone Simulator
gpt-5.2 logo
GPT-5.2
Nothing here. The model returned empty. We stared at it for a while.
Feb 2026·Autonomous Drone Simulator
Try this prompt
gpt-5.2-chat logo
GPT-5.2 ChatAutonomous Drone Simulator
gpt-5.2-chat logo
GPT-5.2 Chat
Nothing here. The model returned empty. We stared at it for a while.
Feb 2026·Autonomous Drone Simulator
Try this prompt
gpt-5.2-pro logo
GPT-5.2 ProAutonomous Drone Simulator
gpt-5.2-pro logo
GPT-5.2 Pro
Nothing here. The model returned empty. We stared at it for a while.
Feb 2026·Autonomous Drone Simulator
Try this prompt
gpt-5.3-chat logo
GPT-5.3 ChatAutonomous Drone Simulator
gpt-5.3-chat logo
GPT-5.3 Chat
Mar 2026·Autonomous Drone Simulator
Try this prompt
gpt-5.3-codex logo
GPT-5.3-CodexAutonomous Drone Simulator
gpt-5.3-codex logo
GPT-5.3-Codex
Feb 2026·Autonomous Drone Simulator
Try this prompt
gpt-5.4 logo
GPT-5.4Autonomous Drone Simulator
gpt-5.4 logo
GPT-5.4
Mar 2026·Autonomous Drone Simulator
Try this prompt
gpt-5.4-mini logo
GPT-5.4 MiniAutonomous Drone Simulator
gpt-5.4-mini logo
GPT-5.4 Mini
Mar 2026·Autonomous Drone Simulator
Try this prompt
gpt-5.4-nano logo
GPT-5.4 NanoAutonomous Drone Simulator
gpt-5.4-nano logo
GPT-5.4 Nano
Mar 2026·Autonomous Drone Simulator
Try this prompt
gpt-oss-120b logo
GPT OSS 120BAutonomous Drone Simulator
gpt-oss-120b logo
GPT OSS 120B
Aug 2025·Autonomous Drone Simulator
Try this prompt
gpt-oss-20b logo
GPT OSS 20BAutonomous Drone Simulator
gpt-oss-20b logo
GPT OSS 20B
Aug 2025·Autonomous Drone Simulator
Try this prompt
grok-3 logo
Grok 3Autonomous Drone Simulator
grok-3 logo
Grok 3
Feb 2026·Autonomous Drone Simulator
Try this prompt
grok-3-beta logo
Grok 3 BetaAutonomous Drone Simulator
grok-3-beta logo
Grok 3 Beta
Feb 2026·Autonomous Drone Simulator
Try this prompt
grok-4 logo
xAI: Grok 4Autonomous Drone Simulator
grok-4 logo
xAI: Grok 4
Aug 2025·Autonomous Drone Simulator
Try this prompt
grok-4.1-fast logo
Grok 4.1 FastAutonomous Drone Simulator
grok-4.1-fast logo
Grok 4.1 Fast
Feb 2026·Autonomous Drone Simulator
Try this prompt
grok-4.20-beta logo
Grok 4.20 BetaAutonomous Drone Simulator
grok-4.20-beta logo
Grok 4.20 Beta
Mar 2026·Autonomous Drone Simulator
Try this prompt
grok-4.20-multi-agent-beta logo
Grok 4.20 Multi-Agent BetaAutonomous Drone Simulator
grok-4.20-multi-agent-beta logo
Grok 4.20 Multi-Agent Beta
Mar 2026·Autonomous Drone Simulator
Try this prompt
grok-code-fast-1 logo
Grok Code Fast 1Autonomous Drone Simulator
grok-code-fast-1 logo
Grok Code Fast 1
Feb 2026·Autonomous Drone Simulator
Try this prompt
healer-alpha logo
Healer AlphaAutonomous Drone Simulator
healer-alpha logo
Healer Alpha
Mar 2026·Autonomous Drone Simulator
Try this prompt
horizon-beta logo
Horizon BetaAutonomous Drone Simulator
horizon-beta logo
Horizon Beta
Aug 2025·Autonomous Drone Simulator
Try this prompt
hunter-alpha logo
Hunter AlphaAutonomous Drone Simulator
hunter-alpha logo
Hunter Alpha
Mar 2026·Autonomous Drone Simulator
Try this prompt
intellect-3 logo
INTELLECT-3Autonomous Drone Simulator
intellect-3 logo
INTELLECT-3
Feb 2026·Autonomous Drone Simulator
Try this prompt
kimi-k2 logo
Kimi K2Autonomous Drone Simulator
kimi-k2 logo
Kimi K2

We can't display this one. It's not us. Well... it might be us.

The model was asked for a web page. It produced something else. We're not going to define what.

View raw output
```html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Autonomous Drone Simulator</title>
    <style>
        @import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@400;700;900&display=swap');
        
        body {
            margin: 0;
            overflow: hidden;
            font-family: 'Orbitron', monospace;
            background: #000;
        }
        #info {
            position: absolute;
            top: 10px;
            left: 10px;
            color: #fff;
            background: linear-gradient(135deg, rgba(0, 20, 40, 0.9), rgba(0, 40, 80, 0.8));
            padding: 15px;
            border-radius: 10px;
            z-index: 100;
            border: 1px solid rgba(0, 150, 255, 0.3);
            box-shadow: 0 0 20px rgba(0, 150, 255, 0.5);
            backdrop-filter: blur(10px);
        }
        #controls {
            position: absolute;
            bottom: 10px;
            left: 10px;
            color: #fff;
            background: linear-gradient(135deg, rgba(0, 20, 40, 0.9), rgba(0, 40, 80, 0.8));
            padding: 15px;
            border-radius: 10px;
            z-index: 100;
            border: 1px solid rgba(0, 150, 255, 0.3);
            box-shadow: 0 0 20px rgba(0, 150, 255, 0.5);
            backdrop-filter: blur(10px);
        }
        button {
            margin: 5px;
            padding: 8px 15px;
            background: linear-gradient(135deg, #0066cc, #0088ff);
            color: white;
            border: none;
            border-radius: 5px;
            cursor: pointer;
            font-family: 'Orbitron', monospace;
            font-weight: 700;
            text-transform: uppercase;
            letter-spacing: 1px;
            transition: all 0.3s ease;
            box-shadow: 0 2px 10px rgba(0, 136, 255, 0.3);
        }
        button:hover {
            background: linear-gradient(135deg, #0088ff, #00aaff);
            transform: translateY(-2px);
            box-shadow: 0 4px 20px rgba(0, 170, 255, 0.5);
        }
        button:active {
            transform: translateY(0);
            box-shadow: 0 2px 10px rgba(0, 136, 255, 0.3);
        }
        #stats {
            position: absolute;
            top: 10px;
            right: 10px;
            color: #fff;
            background: linear-gradient(135deg, rgba(0, 20, 40, 0.9), rgba(0, 40, 80, 0.8));
            padding: 15px;
            border-radius: 10px;
            z-index: 100;
            border: 1px solid rgba(0, 150, 255, 0.3);
            box-shadow: 0 0 20px rgba(0, 150, 255, 0.5);
            backdrop-filter: blur(10px);
            font-size: 12px;
            min-width: 200px;
        }
        .stat-row {
            display: flex;
            justify-content: space-between;
            margin: 5px 0;
            padding: 2px 0;
            border-bottom: 1px solid rgba(0, 150, 255, 0.2);
        }
        .stat-value {
            color: #00ff88;
            font-weight: bold;
        }
        #loading {
            position: fixed;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            color: #00ff88;
            font-size: 24px;
            z-index: 1000;
            text-shadow: 0 0 20px rgba(0, 255, 136, 0.8);
        }
        .pulse {
            animation: pulse 2s infinite;
        }
        @keyframes pulse {
            0% { opacity: 1; }
            50% { opacity: 0.5; }
            100% { opacity: 1; }
        }
    </style>
    <div id="loading" class="pulse">INITIALIZING AUTONOMOUS DRONE...</div>
</head>
<body>
    <div id="info">
        <h3 style="margin: 0 0 10px 0; color: #00ff88; text-shadow: 0 0 10px rgba(0, 255, 136, 0.8);">AUTONOMOUS DRONE SIMULATOR</h3>
        <p style="margin: 5px 0; font-size: 12px;">Drone is flying autonomously through the obstacle field</p>
        <p style="margin: 5px 0; font-size: 12px;">Status: <span id="status" style="color: #00ff88;">ACTIVE</span></p>
    </div>
    <div id="controls">
        <button id="toggleView">Toggle Camera</button>
        <button id="togglePause">Pause/Resume</button>
        <button id="resetDrone">Reset Drone</button>
        <button id="addObstacle">Add Obstacle</button>
    </div>
    <div id="stats">
        <h4 style="margin: 0 0 10px 0; color: #00ff88;">FLIGHT STATS</h4>
        <div class="stat-row">
            <span>Altitude:</span>
            <span class="stat-value" id="altitude">0m</span>
        </div>
        <div class="stat-row">
            <span>Speed:</span>
            <span class="stat-value" id="speed">0 km/h</span>
        </div>
        <div class="stat-row">
            <span>Battery:</span>
            <span class="stat-value" id="battery">100%</span>
        </div>
        <div class="stat-row">
            <span>Distance:</span>
            <span class="stat-value" id="distance">0m</span>
        </div>
        <div class="stat-row">
            <span>Waypoints:</span>
            <span class="stat-value" id="waypoints">0/0</span>
        </div>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/three@0.132.2/build/three.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/three@0.132.2/examples/js/controls/OrbitControls.js"></script>
    <script>
        // Hide loading screen after a delay
        setTimeout(() => {
            document.getElementById('loading').style.display = 'none';
        }, 2000);

        // Initialize Three.js scene
        const scene = new THREE.Scene();
        scene.background = new THREE.Color(0x001122);
        scene.fog = new THREE.FogExp2(0x001122, 0.001);

        // Add stars to the background
        const starsGeometry = new THREE.BufferGeometry();
        const starsMaterial = new THREE.PointsMaterial({ color: 0xffffff, size: 0.5 });
        const starsVertices = [];
        for (let i = 0; i < 10000; i++) {
            const x = (Math.random() - 0.5) * 2000;
            const y = (Math.random() - 0.5) * 2000;
            const z = (Math.random() - 0.5) * 2000;
            starsVertices.push(x, y, z);
        }
        starsGeometry.setAttribute('position', new THREE.Float32BufferAttribute(starsVertices, 3));
        const stars = new THREE.Points(starsGeometry, starsMaterial);
        scene.add(stars);

        // Add ambient light
        const ambientLight = new THREE.AmbientLight(0x404040, 0.5);
        scene.add(ambientLight);
        
        // Add directional light (sun)
        const directionalLight = new THREE.DirectionalLight(0xffffff, 0.8);
        directionalLight.position.set(100, 100, 50);
        directionalLight.castShadow = true;
        directionalLight.shadow.camera.near = 0.1;
        directionalLight.shadow.camera.far = 500;
        directionalLight.shadow.camera.left = -100;
        directionalLight.shadow.camera.right = 100;
        directionalLight.shadow.camera.top = 100;
        directionalLight.shadow.camera.bottom = -100;
        scene.add(directionalLight);

        // Add hemisphere light for better ambient lighting
        const hemisphereLight = new THREE.HemisphereLight(0x0088ff, 0x002244, 0.5);
        scene.add(hemisphereLight);

        // Camera setup
        const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
        camera.position.set(30, 30, 30);
        camera.lookAt(0, 0, 0);

        // Renderer setup
        const renderer = new THREE.WebGLRenderer({ antialias: true });
        renderer.setSize(window.innerWidth, window.innerHeight);
        renderer.shadowMap.enabled = true;
        renderer.shadowMap.type = THREE.PCFSoftShadowMap;
        document.body.appendChild(renderer.domElement);

        // Add orbit controls
        const controls = new THREE.OrbitControls(camera, renderer.domElement);
        controls.enableDamping = true;
        controls.dampingFactor = 0.05;

        // Create ground plane with custom texture
        const groundGeometry = new THREE.PlaneGeometry(100, 100, 50, 50);
        const groundMaterial = new THREE.MeshStandardMaterial({
            color: 0x002244,
            metalness: 0.3,
            roughness: 0.7,
            wireframe: false
        });
        
        // Add displacement to ground vertices for terrain effect
        const groundVertices = groundGeometry.attributes.position.array;
        for (let i = 0; i < groundVertices.length; i += 3) {
            groundVertices[i + 2] = Math.sin(groundVertices[i] * 0.1) * Math.cos(groundVertices[i + 1] * 0.1) * 2;
        }
        groundGeometry.computeVertexNormals();
        
        const ground = new THREE.Mesh(groundGeometry, groundMaterial);
        ground.rotation.x = -Math.PI / 2;
        ground.receiveShadow = true;
        scene.add(ground);

        // Add animated grid
        const gridHelper = new THREE.GridHelper(100, 20, 0x0088ff, 0x004466);
        gridHelper.material.opacity = 0.5;
        gridHelper.material.transparent = true;
        scene.add(gridHelper);

        // Create drone body with metallic material
        const droneGroup = new THREE.Group();
        
        const droneBodyGeometry = new THREE.BoxGeometry(2, 0.5, 2);
        const droneBodyMaterial = new THREE.MeshStandardMaterial({
            color: 0x0066cc,
            metalness: 0.8,
            roughness: 0.2,
            emissive: 0x003366,
            emissiveIntensity: 0.2
        });
        const droneBody = new THREE.Mesh(droneBodyGeometry, droneBodyMaterial);
        droneBody.castShadow = true;
        droneBody.receiveShadow = true;
        droneGroup.add(droneBody);

        // Add LED lights to drone
        const ledGeometry = new THREE.SphereGeometry(0.1, 8, 8);
        const ledMaterial = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
        const leds = [];
        for (let i = 0; i < 4; i++) {
            const led = new THREE.Mesh(ledGeometry, ledMaterial);
            const angle = (i / 4) * Math.PI * 2;
            led.position.set(Math.cos(angle) * 1.2, 0.3, Math.sin(angle) * 1.2);
            droneGroup.add(led);
            leds.push(led);
        }

        // Create drone propellers with metallic finish
        const propellerGeometry = new THREE.BoxGeometry(0.1, 0.1, 1.5);
        const propellerMaterial = new THREE.MeshStandardMaterial({
            color: 0xcccccc,
            metalness: 0.9,
            roughness: 0.1
        });
        
        const propellers = [];
        const propellerPositions = [
            { x: -1, y: 0.2, z: -1 },
            { x: 1, y: 0.2, z: -1 },
            { x: 1, y: 0.2, z: 1 },
            { x: -1, y: 0.2, z: 1 }
        ];
        
        for (let i = 0; i < 4; i++) {
            const propeller = new THREE.Mesh(propellerGeometry, propellerMaterial);
            propeller.position.set(
                propellerPositions[i].x,
                propellerPositions[i].y,
                propellerPositions[i].z
            );
            propeller.castShadow = true;
            droneGroup.add(propeller);
            
            const propeller2 = new THREE.Mesh(propellerGeometry, propellerMaterial);
            propeller2.position.set(
                propellerPositions[i].x,
                propellerPositions[i].y + 0.2,
                propellerPositions[i].z
            );
            propeller2.rotation.y = Math.PI / 2;
            propeller2.castShadow = true;
            droneGroup.add(propeller2);
            
            propellers.push(propeller, propeller2);
        }

        // Add drone to scene
        scene.add(droneGroup);

        // Create obstacles with variety
        const obstacles = [];
        const obstacleTypes = [
            { geometry: new THREE.BoxGeometry(5, 10, 5), material: new THREE.MeshStandardMaterial({ color: 0xff4444, metalness: 0.6, roughness: 0.4 }) },
            { geometry: new THREE.CylinderGeometry(3, 3, 12, 8), material: new THREE.MeshStandardMaterial({ color: 0x44ff44, metalness: 0.6, roughness: 0.4 }) },
            { geometry: new THREE.SphereGeometry(4, 16, 16), material: new THREE.MeshStandardMaterial({ color: 0x4444ff, metalness: 0.6, roughness: 0.4 }) },
            { geometry: new THREE.TorusGeometry(3, 1, 8, 16), material: new THREE.MeshStandardMaterial({ color: 0xffff44, metalness: 0.6, roughness: 0.4 }) }
        ];

        for (let i = 0; i < 15; i++) {
            const type = obstacleTypes[Math.floor(Math.random() * obstacleTypes.length)];
            const obstacle = new THREE.Mesh(type.geometry, type.material);
            
            obstacle.position.set(
                Math.random() * 80 - 40,
                5 + Math.random() * 10,
                Math.random() * 80 - 40
            );
            
            if (Math.abs(obstacle.position.x) < 5 && Math.abs(obstacle.position.z) < 5) {
                obstacle.position.x += 10;
                obstacle.position.z += 10;
            }
            
            obstacle.castShadow = true;
            obstacle.receiveShadow = true;
            scene.add(obstacle);
            obstacles.push(obstacle);
        }

        // Create waypoints with glow effect
        const waypoints = [];
        const waypointGeometry = new THREE.SphereGeometry(1, 16, 16);
        const waypointMaterial = new THREE.MeshBasicMaterial({ 
            color: 0x00ffff,
            transparent: true,
            opacity: 0.6
        });
        
        for (let i = 0; i < 8; i++) {
            const waypoint = new THREE.Mesh(waypointGeometry, waypointMaterial);
            waypoint.position.set(
                Math.random() * 60 - 30,
                5 + Math.random() * 15,
                Math.random() * 60 - 30
            );
            scene.add(waypoint);
            waypoints.push(waypoint);
            
            // Add glow effect
            const glowGeometry = new THREE.SphereGeometry(1.5, 16, 16);
            const glowMaterial = new THREE.MeshBasicMaterial({
                color: 0x00ffff,
                transparent: true,
                opacity: 0.2
            });
            const glow = new THREE.Mesh(glowGeometry, glowMaterial);
            waypoint.add(glow);
        }

        // Add particle trail
        const trailGeometry = new THREE.BufferGeometry();
        const trailMaterial = new THREE.PointsMaterial({
            color: 0x00ff88,
            size: 0.2,
            transparent: true,
            opacity: 0.6
        });
        const trailPositions = [];
        const trailMaxPoints = 50;
        const trail = new THREE.Points(trailGeometry, trailMaterial);
        scene.add(trail);

        // Drone flight variables
        let currentWaypointIndex = 0;
        let droneSpeed = 0.05;
        let propellerRotation = 0;
        let isPaused = false;
        let cameraFollow = false;
        let totalDistance = 0;
        let lastPosition = new THREE.Vector3();
        let battery = 100;
        let ledBlink = 0;

        // Handle window resize
        window.addEventListener('resize', () => {
            camera.aspect = window.innerWidth / window.innerHeight;
            camera.updateProjectionMatrix();
            renderer.setSize(window.innerWidth, window.innerHeight);
Aug 2025·Autonomous Drone Simulator
Try this prompt
kimi-k2-0905 logo
MoonshotAI: Kimi K2 0905Autonomous Drone Simulator
kimi-k2-0905 logo
MoonshotAI: Kimi K2 0905
Feb 2026·Autonomous Drone Simulator
Try this prompt
kimi-k2-thinking logo
Kimi K2 ThinkingAutonomous Drone Simulator
kimi-k2-thinking logo
Kimi K2 Thinking

We can't display this one. It's not us. Well... it might be us.

The model was asked for a web page. It produced something else. We're not going to define what.

View raw output
```html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Autonomous Drone Simulator</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            overflow: hidden;
            background: linear-gradient(135deg, #0a0a2a 0%, #1a1a4a 50%, #0a0a2a 100%);
            color: #e0e0ff;
        }

        #canvas-container {
            position: relative;
            width: 100vw;
            height: 100vh;
        }

        #info-panel {
            position: absolute;
            top: 20px;
            left: 20px;
            background: rgba(10, 15, 40, 0.9);
            padding: 20px;
            border-radius: 15px;
            min-width: 280px;
            backdrop-filter: blur(15px);
            border: 2px solid rgba(100, 180, 255, 0.4);
            box-shadow: 0 8px 32px rgba(0, 20, 80, 0.4);
            z-index: 10;
        }

        #info-panel h2 {
            color: #64b4ff;
            margin-bottom: 15px;
            font-size: 1.4em;
            text-shadow: 0 0 15px rgba(100, 180, 255, 0.7);
            font-weight: 600;
        }

        .info-item {
            margin: 10px 0;
            font-size: 14px;
            display: flex;
            justify-content: space-between;
            align-items: center;
        }

        .info-label {
            color: #a0b0ff;
            font-weight: 500;
        }

        .info-value {
            color: #64ffda;
            font-weight: 600;
            font-family: 'Courier New', monospace;
        }

        .control-button {
            background: linear-gradient(45deg, #0066cc, #0099ff);
            border: none;
            color: white;
            padding: 10px 18px;
            margin: 8px 5px;
            border-radius: 8px;
            cursor: pointer;
            font-size: 13px;
            font-weight: 600;
            transition: all 0.3s ease;
            box-shadow: 0 4px 15px rgba(0, 102, 204, 0.4);
            min-width: 120px;
        }

        .control-button:hover {
            transform: translateY(-3px);
            box-shadow: 0 6px 25px rgba(0, 153, 255, 0.7);
            background: linear-gradient(45deg, #0099ff, #00ccff);
        }

        .control-button.danger {
            background: linear-gradient(45deg, #cc3300, #ff6600);
            box-shadow: 0 4px 15px rgba(204, 51, 0, 0.4);
        }

        .control-button.danger:hover {
            background: linear-gradient(45deg, #ff6600, #ff9933);
            box-shadow: 0 6px 25px rgba(255, 102, 0, 0.7);
        }

        .control-button.active {
            background: linear-gradient(45deg, #00cc66, #00ff99);
            box-shadow: 0 4px 15px rgba(0, 204, 102, 0.4);
        }

        .slider-container {
            margin: 15px 0;
        }

        .slider-label {
            display: flex;
            justify-content: space-between;
            margin-bottom: 8px;
            font-size: 13px;
            color: #a0b0ff;
            font-weight: 500;
        }

        input[type="range"] {
            width: 100%;
            height: 8px;
            border-radius: 4px;
            background: rgba(100, 180, 255, 0.2);
            outline: none;
            -webkit-appearance: none;
        }

        input[type="range"]::-webkit-slider-thumb {
            -webkit-appearance: none;
            width: 20px;
            height: 20px;
            border-radius: 50%;
            background: linear-gradient(45deg, #64b4ff, #00ccff);
            cursor: pointer;
            box-shadow: 0 0 15px rgba(100, 180, 255, 0.8);
            border: 2px solid rgba(255, 255, 255, 0.8);
        }

        #loading {
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            text-align: center;
            z-index: 100;
            background: rgba(10, 15, 40, 0.95);
            padding: 40px;
            border-radius: 20px;
            border: 2px solid rgba(100, 180, 255, 0.4);
            box-shadow: 0 0 50px rgba(0, 102, 204, 0.6);
        }

        .loader {
            border: 4px solid rgba(100, 180, 255, 0.2);
            border-top: 4px solid #64b4ff;
            border-radius: 50%;
            width: 60px;
            height: 60px;
            animation: spin 1.2s cubic-bezier(0.5, 0.1, 0.5, 0.9) infinite;
            margin: 0 auto 25px;
            box-shadow: 0 0 25px rgba(100, 180, 255, 0.6);
        }

        @keyframes spin {
            0% { transform: rotate(0deg); }
            100% { transform: rotate(360deg); }
        }

        .section-title {
            color: #64b4ff;
            margin: 20px 0 10px 0;
            font-size: 1.1em;
            font-weight: 600;
            text-transform: uppercase;
            letter-spacing: 1px;
            text-shadow: 0 0 10px rgba(100, 180, 255, 0.5);
        }

        #controls {
            margin-top: 20px;
            padding-top: 20px;
            border-top: 2px solid rgba(100, 180, 255, 0.3);
        }

        .status-indicator {
            display: inline-block;
            width: 12px;
            height: 12px;
            border-radius: 50%;
            margin-left: 8px;
            box-shadow: 0 0 10px currentColor;
        }

        .status-active { background: #00ff99; color: #00ff99; }
        .status-inactive { background: #ff4444; color: #ff4444; }
        .status-idle { background: #ffaa00; color: #ffaa00; }

        .mode-selector {
            display: flex;
            gap: 10px;
            margin: 15px 0;
        }

        .mode-button {
            flex: 1;
            padding: 10px;
            background: rgba(100, 180, 255, 0.1);
            border: 2px solid rgba(100, 180, 255, 0.3);
            border-radius: 8px;
            color: #a0b0ff;
            cursor: pointer;
            transition: all 0.3s ease;
            font-size: 12px;
            font-weight: 500;
            text-align: center;
        }

        .mode-button:hover {
            background: rgba(100, 180, 255, 0.2);
            border-color: rgba(100, 180, 255, 0.5);
        }

        .mode-button.active {
            background: linear-gradient(45deg, #0066cc, #0099ff);
            border-color: #64b4ff;
            color: white;
            box-shadow: 0 0 20px rgba(100, 180, 255, 0.6);
        }
    </style>
</head>
<body>
    <div id="loading">
        <div class="loader"></div>
        <h2>Initializing Drone Simulator</h2>
        <p>Loading advanced systems...</p>
    </div>

    <div id="canvas-container">
        <div id="info-panel">
            <h2>🚁 DRONE COMMAND</h2>
            
            <div class="section-title">Flight Status</div>
            <div class="info-item">
                <span class="info-label">Altitude:</span>
                <span class="info-value" id="altitude">0m</span>
            </div>
            <div class="info-item">
                <span class="info-label">Speed:</span>
                <span class="info-value" id="speed">0 km/h</span>
            </div>
            <div class="info-item">
                <span class="info-label">Position:</span>
                <span class="info-value" id="position">X:0 Z:0</span>
            </div>
            <div class="info-item">
                <span class="info-label">Battery:</span>
                <span class="info-value" id="battery">100%</span>
            </div>
            <div class="info-item">
                <span class="info-label">Flight Mode:</span>
                <span class="info-value" id="flight-mode">AUTO</span>
            </div>

            <div class="section-title">Environment</div>
            <div class="info-item">
                <span class="info-label">Wind Speed:</span>
                <span class="info-value" id="wind-speed">5 km/h</span>
            </div>
            <div class="info-item">
                <span class="info-label">Time:</span>
                <span class="info-value" id="time">12:00</span>
            </div>

            <div class="section-title">Control Mode</div>
            <div class="mode-selector">
                <div class="mode-button active" data-mode="auto">AUTO</div>
                <div class="mode-button" data-mode="manual">MANUAL</div>
                <div class="mode-button" data-mode="waypoint">WAYPOINT</div>
            </div>

            <div class="section-title">Drone Controls</div>
            <div id="controls">
                <button class="control-button" id="takeoff-btn">🚀 Takeoff</button>
                <button class="control-button danger" id="land-btn">🛬 Land</button>
                <button class="control-button" id="rtl-btn">🏠 Return Home</button>
                
                <div class="slider-container">
                    <div class="slider-label">
                        <span>Flight Speed</span>
                        <span id="speed-value">50%</span>
                    </div>
                    <input type="range" id="speed-slider" min="10" max="100" value="50">
                </div>

                <div class="slider-container">
                    <div class="slider-label">
                        <span>Altitude Limit</span>
                        <span id="altitude-value">100m</span>
                    </div>
                    <input type="range" id="altitude-slider" min="20" max="200" value="100">
                </div>

                <button class="control-button" id="camera-btn">📷 Toggle Camera</button>
                <button class="control-button" id="lights-btn">💡 Lights</button>
            </div>
        </div>
    </div>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
    <script>
        // Global variables
        let scene, camera, renderer, drone, environment, clock;
        let droneController, physicsEngine, environmentManager;
        let isInitialized = false;
        let currentMode = 'auto';
        let animationId;

        // Hide loading screen
        function hideLoading() {
            const loading = document.getElementById('loading');
            loading.style.opacity = '0';
            setTimeout(() => {
                loading.style.display = 'none';
                isInitialized = true;
            }, 500);
        }

        // Initialize ThreeJS scene
        function initScene() {
            // Scene setup
            scene = new THREE.Scene();
            scene.fog = new THREE.Fog(0x0a0a2a, 100, 2000);
            
            // Camera setup (isometric view)
            camera = new THREE.PerspectiveCamera(
                60,
                window.innerWidth / window.innerHeight,
                0.1,
                10000
            );
            camera.position.set(300, 400, 300);
            camera.lookAt(0, 0, 0);

            // Renderer setup
            renderer = new THREE.WebGLRenderer({ 
                antialias: true,
                alpha: true,
                powerPreference: "high-performance"
            });
            renderer.setSize(window.innerWidth, window.innerHeight);
            renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
            renderer.shadowMap.enabled = true;
            renderer.shadowMap.type = THREE.PCFSoftShadowMap;
            renderer.toneMapping = THREE.ACESFilmicToneMapping;
            renderer.toneMappingExposure = 1.2;
            
            const container = document.getElementById('canvas-container');
            container.appendChild(renderer.domElement);

            // Clock for animations
            clock = new THREE.Clock();

            // Initialize systems
            initLighting();
            initEnvironment();
            initDrone();
            initControls();
            initEventListeners();
            
            // Start render loop
            animate();
            
            // Hide loading screen
            setTimeout(hideLoading, 1000);
        }

        // Initialize lighting system
        function initLighting() {
            // Ambient light
            const ambientLight = new THREE.AmbientLight(0x404080, 0.3);
            scene.add(ambientLight);

            // Main directional light (sun)
            const sunLight = new THREE.DirectionalLight(0xffffff, 1.2);
            sunLight.position.set(200, 300, 100);
            sunLight.castShadow = true;
            sunLight.shadow.mapSize.width = 4096;
            sunLight.shadow.mapSize.height = 4096;
            sunLight.shadow.camera.near = 0.5;
            sunLight.shadow.camera.far = 1000;
            sunLight.shadow.camera.left = -300;
            sunLight.shadow.camera.right = 300;
            sunLight.shadow.camera.top = 300;
            sunLight.shadow.camera.bottom = -300;
            sunLight.shadow.bias = -0.0001;
            scene.add(sunLight);

            // Hemisphere light for natural lighting
            const hemisphereLight = new THREE.HemisphereLight(0x87CEEB, 0x1a1a4a, 0.6);
            scene.add(hemisphereLight);

            // Point lights for dramatic effect
            const pointLight1 = new THREE.PointLight(0x64b4ff, 0.8, 200);
            pointLight1.position.set(-100, 50, -100);
            scene.add(pointLight1);

            const pointLight2 = new THREE.PointLight(0xff6b6b, 0.6, 150);
            pointLight2.position.set(100, 30, 100);
            scene.add(pointLight2);
        }

        // Initialize environment
        function initEnvironment() {
            environmentManager = new EnvironmentManager(scene);
            environmentManager.createTerrain();
            environmentManager.createBuildings();
            environmentManager.createTrees();
            environmentManager.createWaterFeatures();
            environmentManager.createClouds();
            environment = environmentManager.getEnvironment();
        }

        // Initialize drone
        function initDrone() {
            droneController = new DroneController(scene);
            drone = droneController.getDrone();
            physicsEngine = new PhysicsEngine();
        }

        // Initialize UI controls
        function initControls() {
            // Takeoff/Landing
            document.getElementById('takeoff-btn').addEventListener('click', () => {
                droneController.takeoff();
                updateButtonStates();
            });

            document.getElementById('land-btn').addEventListener('click', () => {
                droneController.land();
                updateButtonStates();
            });

            // Return to launch
            document.getElementById('rtl-btn').addEventListener('click', () => {
                droneController.returnToLaunch();
            });

            // Speed control
            const speedSlider = document.getElementById('speed-slider');
            speedSlider.addEventListener('input', (e) => {
                const value = e.target.value;
                document.getElementById('speed-value').textContent = value + '%';
                droneController.setSpeedMultiplier(value / 100);
            });

            // Altitude control
            const altitudeSlider = document.getElementById('altitude-slider');
            altitudeSlider.addEventListener('input', (e) => {
                const value = e.target.value;
                document.getElementById('altitude-value').textContent = value + 'm';
                droneController.setAltitudeLimit(parseInt(value));
            });

            // Camera toggle
            document.getElementById('camera-btn').addEventListener('click', () => {
                droneController.toggleCamera();
            });

            // Lights toggle
            document.getElementById('lights-btn').addEventListener('click', () => {
                droneController.toggleLights();
            });

            // Mode selection
            document.querySelectorAll('.mode-button').forEach(button => {
                button.addEventListener('click', (e) => {
                    document.querySelectorAll('.mode-button').forEach(b => b.classList.remove('active'));
                    e.target.classList.add('active');
                    currentMode = e.target.dataset.mode;
                    droneController.setFlightMode(currentMode);
                    document.getElementById('flight-mode').textContent = currentMode.toUpperCase();
                });
            });
        }

        // Initialize event listeners
        function initEventListeners() {
            // Window resize
            window.addEventListener('resize', onWindowResize);
            
            // Mouse controls for camera
            let mouseX = 0, mouseY = 0;
            let isMouseDown = false;
            
            renderer.domElement.addEventListener('mousedown', () => { isMouseDown = true; });
            renderer.domElement.addEventListener('mouseup', () => { isMouseDown = false; });
            
            renderer.domElement.addEventListener('mousemove', (e) => {
                if (isMouseDown) {
                    const deltaX = e.clientX - mouseX;
                    const deltaY = e.clientY - mouseY;
                    
                    // Rotate camera around scene
                    const spherical = new THREE.Spherical();
                    spherical.setFromVector3(camera.position);
                    spherical.theta -= deltaX * 0.01;
                    spherical.phi += deltaY * 0.01;
                    spherical.phi = Math.max(0.1, Math.min(Math.PI - 0.1, spherical.phi));
                    
                    camera.position.setFromSpherical(spherical);
                    camera.lookAt(0, 50, 0);
                }
                mouseX = e.clientX;
                mouseY = e.clientY;
            });
            
            // Scroll to zoom
            renderer.domElement.addEventListener('wheel', (e) => {
                const scale = e.deltaY > 0 ? 1.1 : 0.9;
                camera.position.multiplyScalar(scale);
                camera.position.clampLength(100, 1000);
                camera.lookAt(0, 50, 0);
            });
        }

        // Window resize handler
        function onWindowResize() {
            camera.aspect = window.innerWidth / window.innerHeight;
            camera.updateProjectionMatrix();
            renderer.setSize(window.innerWidth, window.innerHeight);
        }

        // Update UI
        function updateUI() {
            if (!drone || !isInitialized) return;

            const position = drone.position;
            const velocity = droneController.getVelocity();
            const altitude = Math.max(0, position.y);
            const speed = velocity.length() * 3.6; // Convert to km/h
            const battery = droneController.getBatteryLevel();
            const flightMode = droneController.getFlightMode();

            document.getElementById('altitude').textContent = altitude.toFixed(1) + 'm';
            document.getElementById('speed').textContent = speed.toFixed(1) + ' km/h';
            document.getElementById('position').textContent = `X:${position.x.toFixed(0)} Z:${position.z.toFixed(0)}`;
            document.getElementById('battery').textContent = battery.toFixed(0) + '%';
            document.getElementById('flight-mode').textContent = flightMode.toUpperCase();

            // Update environment info
            const windSpeed = environmentManager.getWindSpeed();
            const time = environmentManager.getTimeOfDay();
            document.getElementById('wind-speed').textContent = windSpeed.toFixed(0) + ' km/h';
            document.getElementById('time').textContent = time;

            // Update button states
            updateButtonStates();
        }

        // Update button states
        function updateButtonStates() {
            const isFlying = droneController.isFlying();
            const isLanding = droneController.isLanding();
            
            document.getElementById('takeoff-btn').disabled = isFlying;
            document.getElementById('land-btn').disabled = !isFlying || isLanding;
            document.getElementById('rtl-btn').disabled = !isFlying;
        }

        // Animation loop
        function animate() {
            animationId = requestAnimationFrame(animate);
            
            if (!isInitialized) return;
            
            const deltaTime = clock.getDelta();
            const elapsedTime = clock.getElapsedTime();
            
            // Update systems
            droneController.update(deltaTime, elapsedTime);
            environmentManager.update(deltaTime, elapsedTime);
            physicsEngine.update(deltaTime);
            
            // Update UI
            updateUI();
            
            // Render scene
            renderer.render(scene, camera);
        }

        // Environment Manager Class
        class Environment
Feb 2026·Autonomous Drone Simulator
Try this prompt
kimi-k2.5 logo
Kimi K2.5Autonomous Drone Simulator
kimi-k2.5 logo
Kimi K2.5
Feb 2026·Autonomous Drone Simulator
Legendary·Drone control
Try this prompt
llama-3.1-70b logo
Llama 3.1 70B (Instruct)Autonomous Drone Simulator
llama-3.1-70b logo
Llama 3.1 70B (Instruct)
Feb 2026·Autonomous Drone Simulator
Try this prompt
llama-4-maverick logo
Llama 4 MaverickAutonomous Drone Simulator
llama-4-maverick logo
Llama 4 Maverick
Feb 2026·Autonomous Drone Simulator
Try this prompt
llama-4-scout logo
Llama 4 ScoutAutonomous Drone Simulator
llama-4-scout logo
Llama 4 Scout
Feb 2026·Autonomous Drone Simulator
Try this prompt
mercury logo
Inception: MercuryAutonomous Drone Simulator
mercury logo
Inception: Mercury
Feb 2026·Autonomous Drone Simulator
Try this prompt
mercury-2 logo
Inception: Mercury 2Autonomous Drone Simulator
mercury-2 logo
Inception: Mercury 2
Mar 2026·Autonomous Drone Simulator
Try this prompt
mimo-v2-flash logo
MiMo-V2-FlashAutonomous Drone Simulator
mimo-v2-flash logo
MiMo-V2-Flash
Mar 2026·Autonomous Drone Simulator
Try this prompt
mimo-v2-omni logo
MiMo-V2-OmniAutonomous Drone Simulator
mimo-v2-omni logo
MiMo-V2-Omni
Mar 2026·Autonomous Drone Simulator
Try this prompt
mimo-v2-pro logo
MiMo-V2-ProAutonomous Drone Simulator
mimo-v2-pro logo
MiMo-V2-Pro
Mar 2026·Autonomous Drone Simulator
Try this prompt
minimax-m1 logo
MiniMax M1Autonomous Drone Simulator
minimax-m1 logo
MiniMax M1
Feb 2026·Autonomous Drone Simulator
Try this prompt
minimax-m2-her logo
MiniMax M2-herAutonomous Drone Simulator
minimax-m2-her logo
MiniMax M2-her

We can't display this one. It's not us. Well... it might be us.

The model was asked for a web page. It produced something else. We're not going to define what.

View raw output
I'll create a self-contained HTML page with a ThreeJS-based drone simulator. This will include an isometric view, autonomous drone movement, and a custom environment. Let me build this for you.
Feb 2026·Autonomous Drone Simulator
Try this prompt
minimax-m2.1 logo
MiniMax: MiniMax M2.1Autonomous Drone Simulator
minimax-m2.1 logo
MiniMax: MiniMax M2.1
Feb 2026·Autonomous Drone Simulator
Try this prompt
minimax-m2.5 logo
MiniMax M2.5Autonomous Drone Simulator
minimax-m2.5 logo
MiniMax M2.5
Feb 2026·Autonomous Drone Simulator
Try this prompt
minimax-m2.7 logo
MiniMax M2.7Autonomous Drone Simulator
minimax-m2.7 logo
MiniMax M2.7
Mar 2026·Autonomous Drone Simulator
Try this prompt
mistral-large logo
Mistral LargeAutonomous Drone Simulator
mistral-large logo
Mistral Large
Feb 2026·Autonomous Drone Simulator
Try this prompt
mistral-large-2 logo
Mistral Large 2Autonomous Drone Simulator
mistral-large-2 logo
Mistral Large 2
Feb 2026·Autonomous Drone Simulator
Try this prompt
mistral-large-2512 logo
Mistral Large 3 2512Autonomous Drone Simulator
mistral-large-2512 logo
Mistral Large 3 2512
Feb 2026·Autonomous Drone Simulator
Try this prompt
mistral-medium-3 logo
Mistral Medium 3Autonomous Drone Simulator
mistral-medium-3 logo
Mistral Medium 3
Feb 2026·Autonomous Drone Simulator
Try this prompt
mistral-medium-3.1 logo
Mistral Medium 3.1Autonomous Drone Simulator
mistral-medium-3.1 logo
Mistral Medium 3.1
Feb 2026·Autonomous Drone Simulator
Try this prompt
mistral-nemo logo
Mistral NemoAutonomous Drone Simulator
mistral-nemo logo
Mistral Nemo

We can't display this one. It's not us. Well... it might be us.

The model was asked for a web page. It produced something else. We're not going to define what.

View raw output
drone-simulator/
|-- index.html
|-- styles.css
|-- script.js
|-- assets/
|   |-- drone.png
|   |-- environment.png
Feb 2026·Autonomous Drone Simulator
Try this prompt
mistral-small-2603 logo
Mistral Small 4Autonomous Drone Simulator
mistral-small-2603 logo
Mistral Small 4
Mar 2026·Autonomous Drone Simulator
Try this prompt
mistral-small-creative logo
Mistral Small CreativeAutonomous Drone Simulator
mistral-small-creative logo
Mistral Small Creative
Feb 2026·Autonomous Drone Simulator
Try this prompt
nemotron-3-super-120b-a12b-free logo
NVIDIA Nemotron 3 Super (free)Autonomous Drone Simulator
nemotron-3-super-120b-a12b-free logo
NVIDIA Nemotron 3 Super (free)
Mar 2026·Autonomous Drone Simulator
Try this prompt
nemotron-nano-9b-v2 logo
NVIDIA Nemotron Nano 9B V2Autonomous Drone Simulator
nemotron-nano-9b-v2 logo
NVIDIA Nemotron Nano 9B V2
Feb 2026·Autonomous Drone Simulator
Try this prompt
nova-premier-v1 logo
Nova Premier 1.0Autonomous Drone Simulator
nova-premier-v1 logo
Nova Premier 1.0
Feb 2026·Autonomous Drone Simulator
Try this prompt
o1 logo
o1Autonomous Drone Simulator
o1 logo
o1
Nothing here. The model returned empty. We stared at it for a while.
Feb 2026·Autonomous Drone Simulator
Try this prompt
o3 logo
OpenAI o3Autonomous Drone Simulator
o3 logo
OpenAI o3
Aug 2025·Autonomous Drone Simulator
Try this prompt
o3-mini logo
o3 MiniAutonomous Drone Simulator
o3-mini logo
o3 Mini
Nothing here. The model returned empty. We stared at it for a while.
Feb 2026·Autonomous Drone Simulator
Try this prompt
o4-mini logo
OpenAI o4-miniAutonomous Drone Simulator
o4-mini logo
OpenAI o4-mini
Nothing here. The model returned empty. We stared at it for a while.
Feb 2026·Autonomous Drone Simulator
Try this prompt
o4-mini-high logo
OpenAI o4 Mini HighAutonomous Drone Simulator
o4-mini-high logo
OpenAI o4 Mini High
Nothing here. The model returned empty. We stared at it for a while.
Feb 2026·Autonomous Drone Simulator
Try this prompt
pony-alpha logo
Pony AlphaAutonomous Drone Simulator
pony-alpha logo
Pony Alpha
Feb 2026·Autonomous Drone Simulator
Try this prompt
qwen-plus-2025-07-28 logo
Qwen Plus 0728Autonomous Drone Simulator
qwen-plus-2025-07-28 logo
Qwen Plus 0728
Feb 2026·Autonomous Drone Simulator
Try this prompt
qwen-plus-2025-07-28-thinking logo
Qwen Plus 0728 (thinking)Autonomous Drone Simulator
qwen-plus-2025-07-28-thinking logo
Qwen Plus 0728 (thinking)
Feb 2026·Autonomous Drone Simulator
Try this prompt
qwen3-235b-a22b logo
Qwen3 235B A22BAutonomous Drone Simulator
qwen3-235b-a22b logo
Qwen3 235B A22B
Mar 2026·Autonomous Drone Simulator
Try this prompt
qwen3-235b-a22b-07-25 logo
Qwen: Qwen3 235B A22B 2507Autonomous Drone Simulator
qwen3-235b-a22b-07-25 logo
Qwen: Qwen3 235B A22B 2507

We can't display this one. It's not us. Well... it might be us.

The model was asked for a web page. It produced something else. We're not going to define what.

View raw output
```html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Autonomous Drone Simulator</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
    <style>
        body { margin: 0; overflow: hidden; }
        canvas { display: block; }
        #info {
            position: absolute;
            top: 10px;
            left: 10px;
            color: white;
            background-color: rgba(0,0,0,0.5);
            padding: 10px;
            border-radius: 5px;
            font-family: Arial, sans-serif;
        }
        #controls {
            position: absolute;
            top: 10px;
            right: 10px;
            color: white;
            background-color: rgba(0,0,0,0.5);
            padding: 10px;
            border-radius: 5px;
            font-family: Arial, sans-serif;
        }
        button {
            margin: 5px;
            padding: 8px;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <div id="info">
        <h3>Autonomous Drone Simulator</h3>
        <p>Drone is flying autonomously through the environment</p>
        <p><strong>Camera:</strong> Drag to rotate, Scroll to zoom</p>
    </div>
    <div id="controls">
        <button id="resetBtn">Reset Drone</button>
        <button id="toggleMode">Toggle Creative Mode</button>
        <div>
            <label for="speedRange">Speed: </label>
            <input type="range" id="speedRange" min="0.5" max="5" step="0.5" value="2">
            <span id="speedValue">2</span>
        </div>
    </div>
    
    <script>
        // Main variables
        let scene, camera, renderer;
        let drone, droneBody, droneProps = [];
        let controls = {
            rotateX: 0,
            rotateY: 0,
            distance: 80
        };
        let mouse = { x: 0, y: 0 }, isDragging = false;
        let targets = [];
        let currentTargetIndex = 0;
        let dronePosition, droneVelocity;
        let droneSpeed = 2;
        let creativeMode = false;
        let environmentObjects = [];
        
        // Initialize the simulation
        function init() {
            // Create scene
            scene = new THREE.Scene();
            scene.background = new THREE.Color(0x87CEEB); // Sky blue
            
            // Create camera (isometric perspective)
            camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 0.1, 1000);
            updateCamera();
            
            // Create renderer
            renderer = new THREE.WebGLRenderer({ antialias: true });
            renderer.setSize(window.innerWidth, window.innerHeight);
            document.body.appendChild(renderer.domElement);
            
            // Add lights
            const ambientLight = new THREE.AmbientLight(0x404040, 1);
            scene.add(ambientLight);
            
            const directionalLight = new THREE.DirectionalLight(0xffffff, 0.8);
            directionalLight.position.set(100, 100, 50);
            directionalLight.castShadow = true;
            directionalLight.shadow.mapSize.width = 2048;
            directionalLight.shadow.mapSize.height = 2048;
            scene.add(directionalLight);
            
            // Create environment
            createEnvironment();
            
            // Create drone
            createDrone();
            
            // Set initial drone position and velocity
            dronePosition = new THREE.Vector3(0, 10, 0);
            droneVelocity = new THREE.Vector3(0, 0, -1);
            
            // Create targets for the drone to navigate to
            createTargets();
            
            // Add event listeners
            window.addEventListener('resize', onWindowResize);
            window.addEventListener('mousedown', onMouseDown);
            window.addEventListener('mouseup', onMouseUp);
            window.addEventListener('mousemove', onMouseMove);
            window.addEventListener('wheel', onMouseWheel);
            
            document.getElementById('resetBtn').addEventListener('click', resetDrone);
            document.getElementById('toggleMode').addEventListener('click', toggleCreativeMode);
            document.getElementById('speedRange').addEventListener('input', function(e) {
                droneSpeed = parseFloat(e.target.value);
                document.getElementById('speedValue').textContent = droneSpeed;
            });
            
            // Start animation loop
            animate();
        }
        
        function createEnvironment() {
            // Create ground
            const groundGeometry = new THREE.PlaneGeometry(200, 200, 32, 32);
            const groundMaterial = new THREE.MeshLambertMaterial({ color: 0x228B22 });
            const ground = new THREE.Mesh(groundGeometry, groundMaterial);
            ground.rotation.x = -Math.PI / 2;
            ground.receiveShadow = true;
            scene.add(ground);
            environmentObjects.push(ground);
            
            // Add some terrain variation
            const vertices = groundGeometry.attributes.position;
            for (let i = 0; i < vertices.count; i++) {
                const x = vertices.getX(i);
                const y = vertices.getY(i);
                const z = vertices.getZ(i);
                
                // Create hills and valleys
                const distortion = 3 * Math.sin(0.05 * x) * Math.cos(0.05 * z);
                vertices.setZ(i, distortion);
            }
            groundGeometry.computeVertexNormals();
            
            // Add buildings in regular mode
            if (!creativeMode) {
                for (let i = 0; i < 15; i++) {
                    createBuilding(
                        Math.random() * 160 - 80,
                        Math.random() * 4 + 2,
                        Math.random() * 160 - 80,
                        Math.random() * 10 + 5,
                        Math.random() * 10 + 5,
                        Math.random() * 15 + 5
                    );
                }
            }
            
            // Add trees
            for (let i = 0; i < 30; i++) {
                createTree(
                    Math.random() * 180 - 90,
                    0,
                    Math.random() * 180 - 90
                );
            }
            
            // Add some decorative elements in creative mode
            if (creativeMode) {
                createCreativeEnvironment();
            }
        }
        
        function createBuilding(x, baseY, z, width, depth, height) {
            const buildingGeometry = new THREE.BoxGeometry(width, height, depth);
            const colors = [0xff5555, 0x55ff55, 0x5555ff, 0xffff55, 0xff55ff, 0x55ffff];
            const color = colors[Math.floor(Math.random() * colors.length)];
            const buildingMaterial = new THREE.MeshLambertMaterial({ color: color });
            const building = new THREE.Mesh(buildingGeometry, buildingMaterial);
            building.position.set(x, baseY + height/2, z);
            building.castShadow = true;
            building.receiveShadow = true;
            scene.add(building);
            environmentObjects.push(building);
        }
        
        function createTree(x, baseY, z) {
            // Tree trunk
            const trunkGeometry = new THREE.CylinderGeometry(0.5, 0.7, 4, 8);
            const trunkMaterial = new THREE.MeshLambertMaterial({ color: 0x8B4513 });
            const trunk = new THREE.Mesh(trunkGeometry, trunkMaterial);
            trunk.position.set(x, baseY + 2, z);
            trunk.castShadow = true;
            scene.add(trunk);
            environmentObjects.push(trunk);
            
            // Tree leaves
            const leavesGeometry = new THREE.ConeGeometry(3, 6, 8);
            const leavesMaterial = new THREE.MeshLambertMaterial({ color: 0x228B22 });
            const leaves = new THREE.Mesh(leavesGeometry, leavesMaterial);
            leaves.position.set(x, baseY + 6, z);
            leaves.castShadow = true;
            scene.add(leaves);
            environmentObjects.push(leaves);
        }
        
        function createCreativeEnvironment() {
            // Add floating platforms
            for (let i = 0; i < 8; i++) {
                const platformGeometry = new THREE.BoxGeometry(
                    Math.random() * 15 + 5,
                    1,
                    Math.random() * 15 + 5
                );
                const platformMaterial = new THREE.MeshLambertMaterial({
                    color: Math.random() * 0xffffff
                });
                const platform = new THREE.Mesh(platformGeometry, platformMaterial);
                
                platform.position.set(
                    Math.random() * 120 - 60,
                    Math.random() * 30 + 15,
                    Math.random() * 120 - 60
                );
                
                platform.castShadow = true;
                platform.receiveShadow = true;
                scene.add(platform);
                environmentObjects.push(platform);
            }
            
            // Add floating spheres
            for (let i = 0; i < 12; i++) {
                const sphereGeometry = new THREE.SphereGeometry(
                    Math.random() * 3 + 1, 16, 16
                );
                const sphereMaterial = new THREE.MeshLambertMaterial({
                    color: Math.random() * 0xffffff,
                    transparent: true,
                    opacity: 0.8
                });
                const sphere = new THREE.Mesh(sphereGeometry, sphereMaterial);
                
                sphere.position.set(
                    Math.random() * 160 - 80,
                    Math.random() * 40 + 5,
                    Math.random() * 160 - 80
                );
                
                sphere.castShadow = true;
                scene.add(sphere);
                environmentObjects.push(sphere);
            }
        }
        
        function createDrone() {
            // Create drone group
            drone = new THREE.Group();
            scene.add(drone);
            
            // Drone body
            const bodyGeometry = new THREE.BoxGeometry(2, 0.5, 2);
            const bodyMaterial = new THREE.MeshLambertMaterial({ color: 0x333333 });
            droneBody = new THREE.Mesh(bodyGeometry, bodyMaterial);
            droneBody.castShadow = true;
            drone.add(droneBody);
            
            // Add camera/lights to drone
            const droneLight = new THREE.PointLight(0xffffff, 0.5, 10);
            droneLight.position.set(0, -0.5, 0);
            drone.add(droneLight);
            
            // Create propellers
            const propGeometry = new THREE.BoxGeometry(0.3, 0.3, 1.2);
            const propMaterial = new THREE.MeshLambertMaterial({ color: 0x666666 });
            
            // Front-left propeller
            const prop1 = new THREE.Mesh(propGeometry, propMaterial);
            prop1.position.set(-0.7, 0.5, -0.7);
            drone.add(prop1);
            droneProps.push(prop1);
            
            // Front-right propeller
            const prop2 = new THREE.Mesh(propGeometry, propMaterial);
            prop2.position.set(0.7, 0.5, -0.7);
            drone.add(prop2);
            droneProps.push(prop2);
            
            // Back-left propeller
            const prop3 = new THREE.Mesh(propGeometry, propMaterial);
            prop3.position.set(-0.7, 0.5, 0.7);
            drone.add(prop3);
            droneProps.push(prop3);
            
            // Back-right propeller
            const prop4 = new THREE.Mesh(propGeometry, propMaterial);
            prop4.position.set(0.7, 0.5, 0.7);
            drone.add(prop4);
            droneProps.push(prop4);
            
            // Add propeller arms
            const armGeometry = new THREE.BoxGeometry(1.8, 0.2, 0.2);
            const armMaterial = new THREE.MeshLambertMaterial({ color: 0x555555 });
            
            const arm1 = new THREE.Mesh(armGeometry, armMaterial);
            arm1.position.set(0, 0.2, -0.7);
            drone.add(arm1);
            
            const arm2 = new THREE.Mesh(armGeometry, armMaterial);
            arm2.position.set(0, 0.2, 0.7);
            arm2.rotation.z = Math.PI;
            drone.add(arm2);
        }
        
        function createTargets() {
            // Clear existing targets
            targets.forEach(target => scene.remove(target));
            targets = [];
            
            // Create new targets based on mode
            if (creativeMode) {
                // In creative mode, navigate through floating platforms
                environmentObjects.forEach(obj => {
                    if (obj.geometry instanceof THREE.BoxGeometry && obj.position.y > 10) {
                        targets.push(new THREE.Vector3(obj.position.x, obj.position.y + 5, obj.position.z));
                    }
                });
                
                // Add some additional targets
                for (let i = 0; i < 5; i++) {
                    targets.push(new THREE.Vector3(
                        Math.random() * 100 - 50,
                        Math.random() * 20 + 10,
                        Math.random() * 100 - 50
                    ));
                }
            } else {
                // In regular mode, navigate around buildings
                for (let i = 0; i < 10; i++) {
                    targets.push(new THREE.Vector3(
                        Math.random() * 120 - 60,
                        Math.random() * 15 + 8,
                        Math.random() * 120 - 60
                    ));
                }
            }
            
            // Visualize targets
            targets.forEach(target => {
                const targetGeometry = new THREE.SphereGeometry(0.5, 8, 8);
                const targetMaterial = new THREE.MeshBasicMaterial({ 
                    color: 0xffff00, 
                    transparent: true, 
                    opacity: 0.7 
                });
                const targetMesh = new THREE.Mesh(targetGeometry, targetMaterial);
                targetMesh.position.copy(target);
                scene.add(targetMesh);
                
                // Add pulsing animation to targets
                targetMesh.userData = {
                    originalScale: targetMesh.scale.clone(),
                    pulseFactor: 0.2,
                    pulseSpeed: 2 + Math.random() * 2
                };
            });
        }
        
        function updateDrone() {
            if (!targets.length) return;
            
            // Get current target
            const target = targets[currentTargetIndex];
            
            // Calculate direction to target
            const direction = new THREE.Vector3().subVectors(target, dronePosition);
            const distanceToTarget = direction.length();
            
            // If close to target, switch to next target
            if (distanceToTarget < 3) {
                currentTargetIndex = (currentTargetIndex + 1) % targets.length;
                return;
            }
            
            // Normalize direction and apply speed
            direction.normalize().multiplyScalar(droneSpeed * 0.05);
            droneVelocity.lerp(direction, 0.05);
            
            // Update position
            dronePosition.add(droneVelocity);
            
            // Update drone mesh position and rotation
            drone.position.copy(dronePosition);
            
            // Orient drone in direction of movement
            if (droneVelocity.length() > 0.01) {
                drone.lookAt(new THREE.Vector3().addVectors(dronePosition, droneVelocity));
                
                // Add banking effect when turning
                const yaw = Math.atan2(droneVelocity.x, droneVelocity.z);
                drone.rotation.x = Math.max(Math.min(droneVelocity.length() * 0.2, 0.5), -0.5);
                drone.rotation.z = -yaw * 0.2;
            }
            
            // Rotate propellers
            droneProps.forEach(prop => {
                prop.rotation.x += 0.5;
            });
            
            // Keep drone above ground
            if (dronePosition.y < 2) {
                dronePosition.y = 2;
                droneVelocity.y = Math.abs(droneVelocity.y);
            }
            
            // Check collisions with buildings
            for (let obj of environmentObjects) {
                if (obj.geometry instanceof THREE.BoxGeometry && obj !== droneBody) {
                    const box = new THREE.Box3().setFromObject(obj);
                    const droneBox = new THREE.Box3().setFromObject(drone);
                    
                    if (droneBox.intersectsBox(box)) {
                        // Simple collision response - push drone away
                        const center = box.getCenter(new THREE.Vector3());
                        const away = new THREE.Vector3().subVectors(dronePosition, center).normalize();
                        dronePosition.add(away.multiplyScalar(1));
                        droneVelocity.reflect(away).multiplyScalar(0.5);
                    }
                }
            }
        }
        
        function animateTargets() {
            scene.children.forEach(child => {
                if (child.userData && child.userData.originalScale) {
                    const time = Date.now() * 0.001;
                    const scale = child.userData.originalScale.clone();
                    const pulse = 1 + child.userData.pulseFactor * Math.sin(time * child.userData.pulseSpeed);
                    child.scale.set(scale.x * pulse, scale.y * pulse, scale.z * pulse);
                }
            });
        }
        
        function updateCamera() {
            // Isometric-like view with ability to rotate
            const x = controls.distance * Math.sin(controls.rotateY) * Math.cos(controls.rotateX);
            const y = controls.distance * Math.sin(controls.rotateX);
            const z = controls.distance * Math.cos(controls.rotateY) * Math.cos(controls.rotateX);
            
            camera.position.set(x, y, z);
            camera.lookAt(0, 10, 0);
        }
        
        function onWindowResize() {
            camera.aspect = window.innerWidth / window.innerHeight;
            camera.updateProjectionMatrix();
            renderer.setSize(window.innerWidth, window.innerHeight);
        }
        
        function onMouseDown(event) {
            isDragging = true;
            mouse.x = event.clientX;
            mouse.y = event.clientY;
        }
        
        function onMouseUp() {
            isDragging = false;
        }
        
        function onMouseMove(event) {
            if (isDragging) {
                const deltaX = event.clientX - mouse.x;
                const deltaY = event.clientY - mouse.y;
                
                controls.rotateY -= deltaX * 0.01;
                controls.rotateX += deltaY * 0.01;
                
                // Limit vertical rotation
                controls.rotateX =
Feb 2026·Autonomous Drone Simulator
Try this prompt
qwen3-235b-a22b-thinking-2507 logo
Qwen: Qwen3 235B A22B Thinking 2507Autonomous Drone Simulator
qwen3-235b-a22b-thinking-2507 logo
Qwen: Qwen3 235B A22B Thinking 2507
Feb 2026·Autonomous Drone Simulator
Try this prompt
qwen3-30b-a3b logo
Qwen3 30B A3BAutonomous Drone Simulator
qwen3-30b-a3b logo
Qwen3 30B A3B
Mar 2026·Autonomous Drone Simulator
Try this prompt
qwen3-30b-a3b-instruct-2507 logo
Qwen: Qwen3 30B A3B Instruct 2507Autonomous Drone Simulator
qwen3-30b-a3b-instruct-2507 logo
Qwen: Qwen3 30B A3B Instruct 2507
Feb 2026·Autonomous Drone Simulator
Try this prompt
qwen3-30b-a3b-thinking-2507 logo
Qwen3 30B A3B Thinking 2507Autonomous Drone Simulator
qwen3-30b-a3b-thinking-2507 logo
Qwen3 30B A3B Thinking 2507
Mar 2026·Autonomous Drone Simulator
Try this prompt
qwen3-coder logo
Qwen3 CoderAutonomous Drone Simulator
qwen3-coder logo
Qwen3 Coder
Feb 2026·Autonomous Drone Simulator
Try this prompt
qwen3-coder-flash logo
Qwen3 Coder FlashAutonomous Drone Simulator
qwen3-coder-flash logo
Qwen3 Coder Flash
Feb 2026·Autonomous Drone Simulator
Try this prompt
qwen3-coder-next logo
Qwen3 Coder NextAutonomous Drone Simulator
qwen3-coder-next logo
Qwen3 Coder Next
Feb 2026·Autonomous Drone Simulator
Try this prompt
qwen3-coder-plus logo
Qwen3 Coder PlusAutonomous Drone Simulator
qwen3-coder-plus logo
Qwen3 Coder Plus
Feb 2026·Autonomous Drone Simulator
Try this prompt
qwen3-max logo
Qwen: Qwen3 MaxAutonomous Drone Simulator
qwen3-max logo
Qwen: Qwen3 Max
Feb 2026·Autonomous Drone Simulator
Try this prompt
qwen3-max-thinking logo
Qwen: Qwen3 Max ThinkingAutonomous Drone Simulator
qwen3-max-thinking logo
Qwen: Qwen3 Max Thinking
Feb 2026·Autonomous Drone Simulator
Try this prompt
qwen3-next-80b-a3b-instruct logo
Qwen3 Next 80B A3B InstructAutonomous Drone Simulator
qwen3-next-80b-a3b-instruct logo
Qwen3 Next 80B A3B Instruct
Feb 2026·Autonomous Drone Simulator
Try this prompt
qwen3-next-80b-a3b-thinking logo
Qwen3 Next 80B A3B ThinkingAutonomous Drone Simulator
qwen3-next-80b-a3b-thinking logo
Qwen3 Next 80B A3B Thinking
Feb 2026·Autonomous Drone Simulator
Try this prompt
qwen3.5-122b-a10b logo
Qwen: Qwen3.5 122B A10BAutonomous Drone Simulator
qwen3.5-122b-a10b logo
Qwen: Qwen3.5 122B A10B
Feb 2026·Autonomous Drone Simulator
Try this prompt
qwen3.5-27b logo
Qwen: Qwen3.5 27BAutonomous Drone Simulator
qwen3.5-27b logo
Qwen: Qwen3.5 27B
Feb 2026·Autonomous Drone Simulator
Try this prompt
qwen3.5-35b-a3b logo
Qwen: Qwen3.5 35B A3BAutonomous Drone Simulator
qwen3.5-35b-a3b logo
Qwen: Qwen3.5 35B A3B
Feb 2026·Autonomous Drone Simulator
Try this prompt
qwen3.5-397b-a17b logo
Qwen: Qwen3.5 397B A17BAutonomous Drone Simulator
qwen3.5-397b-a17b logo
Qwen: Qwen3.5 397B A17B
Feb 2026·Autonomous Drone Simulator
Try this prompt
qwen3.5-9b logo
Qwen3.5 9BAutonomous Drone Simulator
qwen3.5-9b logo
Qwen3.5 9B
Mar 2026·Autonomous Drone Simulator
Try this prompt
qwen3.5-flash-02-23 logo
Qwen: Qwen3.5 FlashAutonomous Drone Simulator
qwen3.5-flash-02-23 logo
Qwen: Qwen3.5 Flash
Feb 2026·Autonomous Drone Simulator
Try this prompt
qwen3.5-plus-02-15 logo
Qwen: Qwen3.5 Plus 2026-02-15Autonomous Drone Simulator
qwen3.5-plus-02-15 logo
Qwen: Qwen3.5 Plus 2026-02-15
Feb 2026·Autonomous Drone Simulator
Try this prompt
qwen3.6-plus-preview-free logo
Qwen: Qwen3.6 Plus Preview (free)Autonomous Drone Simulator
qwen3.6-plus-preview-free logo
Qwen: Qwen3.6 Plus Preview (free)
Mar 2026·Autonomous Drone Simulator
Try this prompt
seed-2.0-lite logo
Seed 2.0 LiteAutonomous Drone Simulator
seed-2.0-lite logo
Seed 2.0 Lite
Mar 2026·Autonomous Drone Simulator
Try this prompt
solar-pro-3-free logo
Solar Pro 3Autonomous Drone Simulator
solar-pro-3-free logo
Solar Pro 3
Feb 2026·Autonomous Drone Simulator
Try this prompt
sonar-pro-search logo
Sonar Pro SearchAutonomous Drone Simulator
sonar-pro-search logo
Sonar Pro Search
Feb 2026·Autonomous Drone Simulator
Try this prompt
tng-r1t-chimera-free logo
TNG R1T ChimeraAutonomous Drone Simulator
tng-r1t-chimera-free logo
TNG R1T Chimera
Feb 2026·Autonomous Drone Simulator
Try this prompt