1

Тема: 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д тапок.
Ну, или хотя бы линкните что-то по теме.

2

Re: AHK: 3D

Вроде работает, только клавиши Up и Down задвоились.

3

Re: AHK: 3D

ypppu
Так вот именно что вроде..
Вращение камеры почему-то вращает куб вокруг начала координат...
Неужели нет ни одной ссылки?