別に2D処理でもDrawRotaGraph3を使えばそんなに難しくないですよ。
多分3Dのカメラ操作するよりこっちの方が楽です。
(3D空間だとドットバイドットで描画するのがちょっと面倒。)
↓サンプル
#include "DxLib.h"
#define WinX 640
#define WinY 480
#define GMAX 50
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
ChangeWindowMode(TRUE);
SetGraphMode(WinX, WinY, 32);
if (DxLib_Init() == -1)return -1;
int MousX = 0, MousY = 0,
DragCX = 0, DragCY = 0,
ShiftXTnp = 0, ShiftYTnp = 0,
ShiftX = -WinX / 2, ShiftY = -WinY / 2,
Rot = 0,
posX[GMAX], posY[GMAX];
double Scale = 1.0;
bool MousFlag = false;
//画像読み込み(適当な画像を指定する)
int GH = LoadGraph("Test.png");
//画像の座標を乱数で作成
for (int i = 0; i < GMAX; i++) {
posX[i] = rand() % WinX;
posY[i] = rand() % WinY;
}
SetDrawScreen(DX_SCREEN_BACK);
//メインループ
while (!ProcessMessage())
{
//ドラックでスライド
if(GetMouseInput() & MOUSE_INPUT_LEFT){
if (MousFlag) {
GetMousePoint(&MousX, &MousY);
ShiftX = ShiftXTnp + int(double(MousX - DragCX)/ Scale);
ShiftY = ShiftYTnp + int(double(MousY - DragCY)/ Scale);
}
else {
MousFlag = true;
GetMousePoint(&DragCX, &DragCY);
ShiftXTnp = ShiftX;
ShiftYTnp = ShiftY;
}
}else {
MousFlag = false;
}
//スクロールでスケール変更
Rot = GetMouseWheelRotVol();
if (Rot != 0) {
Scale += 0.2 * Rot;
if (Scale <= 0.2)Scale = 0.2;
}
//描画
ClearDrawScreen();
for (int i = 0;i< GMAX;i++) {
DrawRotaGraph3(int(Scale * (ShiftX + posX[i])) + WinX / 2, int(Scale * (ShiftY + posY[i])) + WinY / 2, 0, 0, Scale, Scale, 0, GH, TRUE, FALSE);
}
DrawString(0,0, "マウス左クリックドラッグで移動\nマウスホイールを回転で拡大縮小", 0xffffff);
DrawFormatString(0,32,0xffffff,"X座標X=%d\nY座標=%d\nスケール=%f", ShiftX, ShiftY, Scale);
ScreenFlip();
}
DxLib_End();
return 0;
}