Что нового

3D Лабиринт с шаром (AutoIt3 + C)

FlatX007

Tattoo!
Сообщения
198
Репутация
35
3D Лабиринт с шаром (AutoIt3 + C)

Гибрид из AutoIt3 и нативной C DLL. AutoIt рулит логикой и окном, а C делает всю графику через рейкастинг напрямую в пиксельный буфер. Никаких сторонних движков.

Как устроено

Два уровня:

1. AutoIt3 (maze_ball.au3) — мозг игры. Обрабатывает клавиатуру, считает физику шара (инерция, отскоки), создаёт окно и крутит игровой цикл.

2. C DLL (maze_rc.c) — графический движок. Рейкастинг (псевдо-3D как в Wolfenstein), рисует небо с солнцем, пол с тенями, стены. Шар рендерится как 3D-сфера с текстурой и бликами.

Как AutoIt рисует 3D

Сам AutoIt для 3D не годится, поэтому обходим через сырой пиксельный буфер:

- В AutoIt создаём DllStruct — массив на 307200 пикселей (640x480).
- Передаём указатель на эту память в C DLL.
- C заполняет буфер цветами — вся математика на полной скорости процессора.
- Когда кадр готов, AutoIt вызывает StretchDIBits из Windows API — копирует буфер прямо в окно.

Что умеет

Освещение — солнце на юге, тени от стен падают на север. Плавные градиенты через мульти-сэмплинг, ambient occlusion у оснований стен.

Физика — у шара есть инерция, он катится сам после разгона и замедляется трением. При ударе о стену отскакивает под углом отражения. Камера сама доворачивается в коридор после поворота.

Сборка и запуск

1. Поставить MinGW (gcc).
2. Запустить build_maze.bat — соберёт mazeball_rc.dll и 32-битную версию.
3. Запустить maze_ball.au3 через AutoIt3.

Управление: стрелки вверх/вниз — разгон/торможение, влево/вправо — поворот (в тупике стрейф), Q или Esc — выход.
 

Вложения

  • 2026-03-09_01-33-31.png
    2026-03-09_01-33-31.png
    51.9 КБ · Просмотры: 3
  • maze_ball.au3
    17.5 КБ · Просмотры: 2
  • AutoIt3.7z
    75.9 КБ · Просмотры: 2

Prog

Продвинутый
Сообщения
644
Репутация
81
Когда кадр готов, AutoIt вызывает StretchDIBits из Windows API — копирует буфер прямо в окно.
То есть без аппаратного ускорения. На топовой видеокарте и встроенной в процессор будет работать с одинаковой производительностью...
Сам AutoIt для 3D не годится
Из него нельзя вызывать функции OpenGL, которые к тому же аппаратно ускорены?
 
Автор темы Похожие темы Форум Ответы Дата
I Разработка ботов 2
Верх