simple 3D to 2D projection

Show off your games, demos and other (playable) creations.
Post Reply
adge
Citizen
Posts: 54
Joined: Mon Dec 14, 2015 8:50 pm

simple 3D to 2D projection

Post by adge » Mon May 02, 2016 1:59 pm

Hey there!

I started a litte project to learn the basics of 3d. Right now you can load 3 different models with keys '1', '2', '3' pyramid, sphere and cube.
You can scale them up with the arrow keys 'up' and 'down'. Klick and drag rotates the object.

Right now there is no camera view matrix or something like that. Its just an object at the center that can be rotated around it's origin.
I wrote a little script that creates two tables nodes and edges out of .obj files. However it still has some flaws so I recommend to always triangulate your faces. Otherwise the text in .obj could be interpreted the wrong way.

I'm open for some tips and improvements. I would like to implement "simple" lighting. Maybe the using matrices would also make more sense for the whole transforming stuff. I know how they work but not how to implement them.

I don't know if thats the way 3d is normally done. This way just made sense to me.

Recommendations or tips are welcome.

Script to serialize .obj Points and Faces to Points and Edges stored in two tables.

Code: Select all

readFrom = "object.obj"
writeTo = "object.lua"

fo = io.open(writeTo, "w")

PATTERN = '^v (%S+) (%S+) (%S+)$'
PATTERN2= '^f (%S+)//(%S+) (%S+)//(%S+) (%S+)//(%S+) (%S+)//(%S+)'
PATTERN3 = '%d?%d?%d//%d%d?%d?'
PATTERN4 = '^f (%S+)//(%S+) (%S+)//(%S+) (%S+)//(%S+)'

i = 1
for line in io.lines(readFrom) do
  if line:match(PATTERN) then
    line = line:gsub(PATTERN,'Node'..i..' = { x=%1, y=%2, z=%3}')
    print(line)
    fo:write(line,'\n')
    i = i + 1
  end
end

fo:write("nodes = {")
for n=1, i-1, 1 do
	 if n < i-1 then
	 	fo:write("Node"..n..", ")
	 else
	 	fo:write("Node"..n.."}\n\n")
	 end
end

--read Edges
e = 1
for line in io.lines(readFrom) do
	if line:match(PATTERN2) then
		f = e + 1
		g = f + 1
		h = g + 1
		line = line:gsub(PATTERN2,'Edge'..e..' = { %1, %3}\n Edge'..f..' = {%3, %5}\n Edge'..g..' = { %5, %7}\n Edge'..h..' = {%7, %1}\n')
		fo:write(line)
		e = e + 4
	end
end

for line in io.lines(readFrom) do
	if line:match(PATTERN4) then
		f = e + 1
		g = f + 1
		line = line:gsub(PATTERN4,'Edge'..e..' = { %1, %3}\n Edge'..f..' = {%3, %5}\n Edge'..g..' = { %5, %1}\n')
		fo:write(line)
		e = e + 3
	end
end

fo:write("edges = {")
for n=1, e-1, 1 do
	 if n < e-1 then
	 	fo:write("Edge"..n..", ")
	 else
	 	fo:write("Edge"..n.."}\n\n")
	 end
end

fo:close()
This really needs some optimizing but it works for now.

I don't know why but I alway have to zip the .love to be able to attach it to the post.
Attachments
3Dprojection.love.zip
(4.01 KiB) Downloaded 135 times

User avatar
qubodup
Inner party member
Posts: 775
Joined: Sat Jun 21, 2008 9:21 pm
Location: Berlin, Germany
Contact:

Re: simple 3D to 2D projection

Post by qubodup » Mon May 02, 2016 6:21 pm

Image
That's nice. But it's funny how you .zip a .love which is a .zip already :)
Image
lg.newImage("cat.png") -- made possible by lg = love.graphics
-- Don't force fullscreen (it frustrates those who want to try your game real quick) -- Develop for 1280x720 (so people can make HD videos)

adge
Citizen
Posts: 54
Joined: Mon Dec 14, 2015 8:50 pm

Re: simple 3D to 2D projection

Post by adge » Mon May 02, 2016 7:55 pm

Yeah my puter won't let me upload the .love file :D. I really don't know why. Maybe it's a mac thing.

User avatar
Jasoco
Inner party member
Posts: 3641
Joined: Mon Jun 22, 2009 9:35 am
Location: Pennsylvania, USA
Contact:

Re: simple 3D to 2D projection

Post by Jasoco » Tue May 03, 2016 10:46 pm

adge wrote:Yeah my puter won't let me upload the .love file :D. I really don't know why. Maybe it's a mac thing.
Nope. Wouldn't be a Mac thing. What browser are you using?

adge
Citizen
Posts: 54
Joined: Mon Dec 14, 2015 8:50 pm

Re: simple 3D to 2D projection

Post by adge » Fri May 06, 2016 3:40 pm

Safari :-)

User avatar
Jasoco
Inner party member
Posts: 3641
Joined: Mon Jun 22, 2009 9:35 am
Location: Pennsylvania, USA
Contact:

Re: simple 3D to 2D projection

Post by Jasoco » Fri May 06, 2016 5:38 pm

Problem isn't here there either. You shouldn't be having trouble uploading a .love from anywhere.

Post Reply

Who is online

Users browsing this forum: DwayneDev and 3 guests