lua z维度中的3d光栅化器问题不起作用
所以基本上我试着将olc3d引擎从cpp翻译成minecraft中computercraft中的lua 我可以在x和y方向上平移立方体,但z方向不起作用 这是我试图复制的原始olc3d引擎 如果有人想尝试复制设置,它是一个6x8高级显示器,在左侧显示,在右侧显示高级计算机(显示器在左侧很重要)。modpack是ftb显示,但它应该只与安装的computercraft mod一起工作lua z维度中的3d光栅化器问题不起作用,lua,3d,minecraft,computercraft,Lua,3d,Minecraft,Computercraft,所以基本上我试着将olc3d引擎从cpp翻译成minecraft中computercraft中的lua 我可以在x和y方向上平移立方体,但z方向不起作用 这是我试图复制的原始olc3d引擎 如果有人想尝试复制设置,它是一个6x8高级显示器,在左侧显示,在右侧显示高级计算机(显示器在左侧很重要)。modpack是ftb显示,但它应该只与安装的computercraft mod一起工作 function newLine() xPos, yPos = term.getCursorPos()
function newLine()
xPos, yPos = term.getCursorPos()
term.setCursorPos(1,(yPos + 1))
end
paitutils2.newMonitor("left")
mesh = {
{vector.new(0.0,0.0,0.0),vector.new(0.0,1.0,0.0),vector.new(1.0,1.0,0.0)},
{vector.new(0.0,0.0,0.0),vector.new(1.0,1.0,0.0),vector.new(1.0,0.0,0.0)},
{vector.new(1.0,0.0,0.0),vector.new(1.0,1.0,0.0),vector.new(1.0,1.0,1.0)},
{vector.new(1.0,0.0,0.0),vector.new(1.0,1.0,1.0),vector.new(1.0,0.0,1.0)},
{vector.new(1.0,0.0,1.0),vector.new(1.0,1.0,1.0),vector.new(0.0,1.0,1.0)},
{vector.new(1.0,0.0,1.0),vector.new(0.0,1.0,1.0),vector.new(0.0,0.0,1.0)},
{vector.new(0.0,0.0,1.0),vector.new(0.0,1.0,1.0),vector.new(0.0,1.0,0.0)},
{vector.new(0.0,0.0,1.0),vector.new(0.0,1.0,0.0),vector.new(0.0,0.0,0.0)},
{vector.new(0.0,1.0,0.0),vector.new(0.0,1.0,1.0),vector.new(1.0,1.0,1.0)},
{vector.new(0.0,1.0,0.0),vector.new(1.0,1.0,1.0),vector.new(1.0,1.0,0.0)},
{vector.new(1.0,0.0,1.0),vector.new(0.0,0.0,1.0),vector.new(0.0,0.0,0.0)},
{vector.new(1.0,0.0,1.0),vector.new(0.0,0.0,0.0),vector.new(1.0,0.0,0.0)}
}
matrix = {{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0}}
matproj = matrix
wysokosc = 80.0
szerokosc = 164.0
fnear = 0.1
ffar = 1000.0
ffov = 90.0
fasr = (wysokosc/szerokosc)* (7/5) --because 'pixel' is 7x5 pixels
ffovr = 1.0 / math.tan(ffov * 0.5 / 180.0 * math.pi)
w=1
--3dpespective matrix
matproj[1][1] = fasr * ffovr
matproj[2][2] = ffovr
matproj[3][3] = -ffar / (ffar - fnear)
matproj[4][3] = (-ffar * fnear)/(ffar - fnear)
matproj[3][4] = -1.0
matproj[4][4] = 0.0
function proj_mat(matrix ,trj)
proj_tri = vector.new()
--print(trj.x .." ".. trj.y .." " .. trj.z )
proj_tri.x = (trj.x * matrix[1][1]) + (trj.y * matrix[2][1]) + (trj.z * matrix[3][1] )+ w * matrix[4][1]
proj_tri.y = (trj.x * matrix[1][2]) + (trj.y * matrix[2][2]) + (trj.z * matrix[3][2] )+ w * matrix[4][2]
proj_tri.z = (trj.x * matrix[1][3]) + (trj.y * matrix[2][3]) + (trj.z * matrix[3][3] )+ w * matrix[4][3]
w = (trj.x * matrix[1][4]) + (trj.y * matrix[2][4]) + (trj.z * matrix[3][4] )+ w * matrix[4][4]
if not w == 0.0 then
proj_tri.x = proj_tri.x / w
proj_tri.y = proj_tri.y / w
proj_tri.z = proj_tri.z / w
end
print(proj_tri.x .." ".. proj_tri.y .." " .. proj_tri.z .." ".. trj.x .." ".. trj.y .. " " .. trj.z)
return(proj_tri)
end
peripheral.call("left","setBackgroundColor",colors.black)
peripheral.call("left","setCursorBlink",false)
peripheral.call("left","setTextScale",0.5)
peripheral.call("left","clear")
peripheral.call("left","setBackgroundColor",colors.red)
for i = 1 , 12 ,1 do
vert = {}
vert[1] = mesh[i][1]
vert[2] = mesh[i][2]
vert[3] = mesh[i][3]
--print(vert[1].x .." ".. vert[1].y.." " .. vert[1].z .. " "..vert[2].x .." ".. vert[2].y.." " .. vert[2].z .." ".. vert[3].x .." ".. vert[3].y.." " .. vert[3].z)
vert[1].z = vert[1].z + 3.0
vert[2].z = vert[2].z + 3.0 --translacja
vert[3].z = vert[3].z + 3.0
vert[1].x = vert[1].x + 0.25
vert[2].x = vert[2].x + 0.25 --translacja
vert[3].x = vert[3].x + 0.25
--vert[1].y = vert[1].y + 0.5
--vert[2].y = vert[2].y + 0.5 --translacja
--vert[3].y = vert[3].y + 0.5
--print(vert[1].x .." ".. vert[1].y.." " .. vert[1].z .. " | "..vert[2].x .." ".. vert[2].y.." " .. vert[2].z .." | ".. vert[3].x .." ".. vert[3].y.." " .. vert[3].z)
proj_vert = vector.new()
-- proj_vert[1] = proj_mat(rotx,vert[1])
-- proj_vert[2] = proj_mat(rotx,vert[2]) --rotate x
-- proj_vert[3] = proj_mat(rotx,vert[3])
proj_vert[1] = proj_mat(matproj,vert[1])
proj_vert[2] = proj_mat(matproj,vert[2]) --projekcja 3d na 2d
proj_vert[3] = proj_mat(matproj,vert[3])
--skalowanie
proj_vert[1].x = proj_vert[1].x * szerokosc
proj_vert[1].y = proj_vert[1].y * wysokosc + 1
proj_vert[2].x = proj_vert[2].x * szerokosc
proj_vert[2].y = proj_vert[2].y * wysokosc + 1
proj_vert[3].x = proj_vert[3].x * szerokosc
proj_vert[3].y = proj_vert[3].y * wysokosc + 1
paitutils2.drawLine(proj_vert[1].x,proj_vert[1].y,proj_vert[2].x,proj_vert[2].y)
paitutils2.drawLine(proj_vert[1].x,proj_vert[1].y,proj_vert[3].x,proj_vert[3].y)
paitutils2.drawLine(proj_vert[3].x,proj_vert[3].y,proj_vert[2].x,proj_vert[2].y)
term.setTextColor(colors.white)
--term.write("w["..w.."] ")
--newLine()
--term.write(" x[" .. proj_vert[1].x .. "] y[" .. proj_vert[1].y .. "] x2[" .. proj_vert[2].x .. "] y2[" .. proj_vert[2].y .."] \n")
--newLine()
--term.write(" x[" .. proj_vert[1].x .. "] y[" .. proj_vert[1].y .. "] x2[" .. proj_vert[3].x .. "] y2[" .. proj_vert[3].y .."] \n")
--newLine()
--term.write(" x[" .. proj_vert[3].x .. "] y[" .. proj_vert[3].y .. "] x2[" .. proj_vert[2].x .. "] y2[" .. proj_vert[2].y .."] \n")
--newLine()
end