Тема: AHK: 3D
Хочу написать скрипт для рисовки пространственных объектов в перспективе.
Пытался сделать по тутору для другого языка. Видимо что-то напутал - не вышло.
Проблемы с вращением камеры.
Вот что есть:
#Include C:\Program Files\AutoHotkey\lib\Gdip.ahk
; wasd x/space arrows
If !pToken := Gdip_Startup()
{
MsgBox, 48, gdiplus error!, Gdiplus failed to start. Please ensure you have gdiplus on your system
ExitApp
}
Gui, 1: +E0x80000 +LastFound +OwnDialogs -Caption ;-AlwaysOnTop +ToolWindow
Gui, 1: Show,,SH_MineSweper
hwnd1 := WinExist()
hbm := CreateDIBSection(A_ScreenWidth, A_ScreenHeight)
hdc := CreateCompatibleDC()
obm := SelectObject(hdc, hbm)
G := Gdip_GraphicsFromHDC(hdc)
Gdip_SetSmoothingMode(G, 0)
; pBrush :=Gdip_BrushCreateSolid("0xffaaaaaa")
; pBrushBlack :=Gdip_BrushCreateSolid("0xff000000")
; pBrush1 :=Gdip_BrushCreateSolid("0xff888888")
ppen :=Gdip_CreatePen("0xff888888",1)
cx:=A_ScreenWidth//2
cy:=A_ScreenHeight//2
camera:=["2","-2","-8"]
Rot:=["0","0"]
rad:="0.35"
edges:=[["1","2"],["2","3"],["3","4"],["4","1"],["5","6"],["6","7"],["7","8"],["8","5"],["1","5"],["2","6"],["3","7"],["4","8"]]
st:
Dots:=[]
verts:=[["-1","-1","-1"],["1","-1","-1"],["1","1","-1"],["-1","1","-1"],["-1","-1","1"],["1","-1","1"],["1","1","1"],["-1","1","1"]]
Gdip_GraphicsClear(G,"0xff000000")
Loop % verts.Length()
{
x:=verts[A_Index][1]-camera[1]
y:=verts[A_Index][2]-camera[2]
z:=verts[A_Index][3]-camera[3]
rotate2d(x,z,Rot[2])
rotate2d(y,z,Rot[1])
f:=(A_ScreenHeight)/z
x:=x*f
y:=y*f
Dots[A_Index]:=[cx+x,cy+y]
; gdip_fillellipse(G,pBrush,cx+x-5,cy+y-5,"10","10")
}
Loop % edges.Length()
{
xx1:=Dots[edges[A_Index][1]][1]
yy1:=Dots[edges[A_Index][1]][2]
xx2:=Dots[edges[A_Index][2]][1]
yy2:=Dots[edges[A_Index][2]][2]
gdip_drawline(g,ppen,xx1,yy1,xx2,yy2)
}
UpdateLayeredWindow(hwnd1, hdc, 0, 0, A_ScreenWidth, A_ScreenHeight)
return
rotate2d(byref x,byref y,rad)
{
s:=Sin(rad)
c:=Cos(rad)
x:=x*c-y*s
y:=y*c+x*s
}
esc::
gdip_shutdown(pToken)
ExitApp
Right::
rot[2]+=0.1
goto st
Left::
rot[2]-=0.1
goto st
Down::
rot[1]+=0.1
goto st
Up::
rot[1]-=0.1
goto st
Down::
rot[1]+=0.1
goto st
Up::
rot[1]-=0.1
goto st
; ToolTip, % "camera:=[" camera[1] "," camera[2] "," camera[3] "]",0,0
D::
camera[1]+=0.2
goto st
A::
camera[1]-=0.2
goto st
Space::
camera[2]-=0.2
goto st
X::
camera[2]+=0.2
goto st
w::
camera[3]+=0.2
goto st
s::
camera[3]-=0.2
goto st
Кто шарит, киньте в меня 3д тапок.
Ну, или хотя бы линкните что-то по теме.