Кто там пробовал 3дэ которое в 11й версии упростили? Кто шейдеры писать пробовал? Вышло у кого?
Тем временем я вспоминаю математику и пилю софтварный рендер.
Крутить хернюшку стрелочками и , . в англ раскладке
Собственно хернюшкаАноним28/06/18 Чтв 06:31:10#2№507846
function love.load() local Object = {} Object.__index = Object
function Object:new() end
function Object:extend() local cls = {} for k, v in pairs(self) do if k:find("__") == 1 then cls[k] = v end end cls.__index = cls cls.super = self setmetatable(cls, self) return cls end
function Object:implement(...) for _, cls in pairs({...}) do for k, v in pairs(cls) do if self[k] == nil and type(v) == "function" then self[k] = v end end end end
function Object:is(T) local mt = getmetatable(self) while mt do if mt == T then return true end mt = getmetatable(mt) end return false end
function Object:__tostring() return "Object" end
function Object:__call(...) local obj = setmetatable({}, self) obj:new(...) return obj end
class = Object vec3 = class:extend()
function vec3:new(x, y, z) self.x = x or 0 self.y = y or 0 self.z = z or 0 end
function vec3:p() print(self.x, self.y, self.z) end
function vec3:__unm(a) local x = -a.x local y = -a.y local z = -a.z return vec3(x, y, z) end
function vec3:__add(a) local x = self.x + a.x local y = self.y + a.y local z = self.z + a.z return vec3(x, y, z) end
function vec3:__sub(a) local x = self.x - a.x local y = self.y - a.y local z = self.z - a.z return vec3(x, y, z) end
function vec3:__pow(a) local x = self.y a.z - self.z a.y local y = self.z a.x - self.x a.z local z = self.x a.y - self.y a.x return vec3(x, y, z) end
function vec3:__div(a) local x = self.x / a local y = self.y / a local z = self.z / a return vec3(x, y, z) end
function vec3:len() return math.sqrt(self.x ^ 2 + self.y ^ 2 + self.z ^ 2) end
function vec3:unit() return self / self:len() end mat4 = class:extend()
function mat4:new(a) if a then self[1] = {unpack(a[1])} self[2] = {unpack(a[2])} self[3] = {unpack(a[3])} self[4] = {unpack(a[4])} else self[1] = {1, 0, 0, 0} self[2] = {0, 1, 0, 0} self[3] = {0, 0, 1, 0} self[4] = {0, 0, 0, 1} end end
function mat4:__mul(a) if a:is(mat4) then local c = {{}, {}, {}, {}} for i = 1, 4 do for j = 1, 4 do local d = 0 for k = 1, 4 do d = d + a[k] self[k][j] end c[j] = d end end return mat4(c) elseif a:is(vec3) then local x, y, z, f x = self[1][1] a.x + self[1][2] a.y + self[1][3] a.z + self[1][4] 1 y = self[2][1] a.x + self[2][2] a.y + self[2][3] a.z + self[2][4] 1 z = self[3][1] a.x + self[3][2] a.y + self[3][3] a.z + self[3][4] 1 f = 1 - z / camera x = x / f y = y / f z = z / f return vec3(x, y, z) end end
function mat4:__add(a) local c = {{}, {}, {}, {}} for i = 1, 4 do for j = 1, 4 do c[j] = self[j] + a[j] end end return mat4(c) end
function mat4:__sub(a, b) local c = {{}, {}, {}, {}} for i = 1, 4 do for j = 1, 4 do c[j] = self[j] - a[j] end end return mat4(c) end
function mat4:rt(x, y, z) local cosa, sina local mx = mat4() cosa = math.cos(x) sina = math.sin(x) mx[2] = {0, cosa, -sina, 0} mx[3] = {0, sina, cosa, 0} local my = mat4() cosa = math.cos(y) sina = math.sin(y) my[1] = {cosa, 0, sina, 0} my[3] = {-sina, 0, cosa, 0} local mz = mat4() cosa = math.cos(z) sina = math.sin(z) mz[1] = {cosa, -sina, 0, 0} mz[2] = {sina, cosa, 0, 0} local m = mx my mz return m end
function mat4:sc(x, y, z) local m = mat4() m[1][1] = x m[2][2] = y m[3][3] = z return m end
function mat4:tr(x, y, z) local m = mat4() m[1][4] = x m[2][4] = y m[3][4] = z return m end
function mat4:p() print(unpack(self[1])) print(unpack(self[2])) print(unpack(self[3])) print(unpack(self[4])) end poly = class:extend()
function poly:new(a,b,c) self[1]=a self[2]=b self[3]=c end
function love.update(dt) if love.keyboard.isDown("up") then rz = rz + dt elseif love.keyboard.isDown("down") then rz = rz - dt end if love.keyboard.isDown("right") then ry = ry + dt elseif love.keyboard.isDown("left") then ry = ry - dt end if love.keyboard.isDown(",") then rx = rx + dt elseif love.keyboard.isDown(".") then rx = rx - dt end local rotate = mat4:rt(rx, ry, rz) for i = 1, 8 do pnew = rotate points end end
function love.draw() love.graphics.setCanvas( canvas ) love.graphics.clear() love.graphics.setLineStyle('rough') for i = 1, 7 do love.graphics.line(25pnew.x + 100, 25pnew.y+75, 25pnew[i + 1].x + 100, 25pnew[i + 1].y+75)
end y = poly(pnew[1],pnew[2],pnew[3]) y:normal() love.graphics.setCanvas() love.graphics.draw(canvas,0,0,0,4,4)
>>507936 T = 0 function love.update(dt) T = T + dt rz = math.sin(T) ry = math.cos(T) rx = math.sin(T+math.pi/4) ... Такое в апдейт добавить, вообще наркомания начинается, можно залипать.
>>507936 >что происходит? Происходит проекция ломаной линии построенной на вершинах куба на плоскость. Плюс проецируется нормаль к плоскости вершин 1-2-3 (красная)
Анончики. Решил попробоваьт love2d. Под него есть какая-нибудь IDE ? Чтобы хоть какой-то дебаг был, проверка синтаксиса и прочая хуйня. А то как-то невесело постоянно править текстовые файлы, а потом запускать их туда-сюда.
>>577132 >А то как-то невесело постоянно править текстовые файлы, а потом запускать их туда-сюда Ну так переходи на нормальный движок Unity3D. Или не ной.
>>577132 notepad++, sublime, atom, zerobrane - для всех есть луа плагины, можно настроить, чтобы из редактора по одной кнопке был запуск проекта. zerobrane поддерживает дебаггинг, хотя мне принтов в нотпаде хватает.
Кто там пробовал 3дэ которое в 11й версии упростили? Кто шейдеры писать пробовал? Вышло у кого?
Тем временем я вспоминаю математику и пилю софтварный рендер.
Крутить хернюшку стрелочками и , . в англ раскладке