UPDATE - 5/5/09
Ok, here's a small update. This is a quick little example of lighting. As you can see, there are some problems I have to work out with the lighting on tiles.
Demo: Link
Don't Forget:
I still need help with art and with moral support!
Please contact me if you are a 3D artist.
If you want to offer moral support, keep posting!
Old Releases:
Do I have it now? Good. That is exactly what it looks like: a 3D program running from RMXP. (I will explain why there are two windows, the little one and the big one*)
Don't believe me? Try it yourself:
RMXP in 3D Demo
Ok, here's a small update. This is a quick little example of lighting. As you can see, there are some problems I have to work out with the lighting on tiles.
Demo: Link
Don't Forget:
I still need help with art and with moral support!
Please contact me if you are a 3D artist.
If you want to offer moral support, keep posting!
Old Releases:
Alright guys, big goings-on. I can now successfully make 3D maps using the 2D map editor! Now, this time around it is pretty simple-- all tiles are simply cubes and the id of the tile determines which texture the cube gets. This, however, proves the validity of using RMXP to make 3D games.
Now, not only is drawing these 2D maps in 3D with my tool possible, it is also, so far, much much faster than drawing the maps in 2D using RGSS Graphics Module. In fact, during my testing I get 250+ frames per second.
Alright, so enough talk. Let's get to the awesome: *BIG Image Warning*
Now, the RGSS code running the demo: (No explanatory comments this time, guys :p)
And, of course, there's a demo to be had!
Keys:
Arrow Keys to move (for now. I will change it later so you can use WASD)
F to show FPS
CTRL + F4 to quit
Link: Download Now!
Now, not only is drawing these 2D maps in 3D with my tool possible, it is also, so far, much much faster than drawing the maps in 2D using RGSS Graphics Module. In fact, during my testing I get 250+ frames per second.
Alright, so enough talk. Let's get to the awesome: *BIG Image Warning*
Now, the RGSS code running the demo: (No explanatory comments this time, guys :p)
Code:
DF_GameWindow.set_dimensions(0,0,0,0)
device = DF3DDevice.new(Video::EDT_DIRECT3D9, [800,600], 32, false)
smgr = device.scene_manager
driver = device.video_driver
camera = smgr.add_camera_scene_node_FPS
camera.set_position(-100,300,-100)
camera.set_target(0,0,0)
$data_tilesets = load_data("Data/Tilesets.rxdata")
$data_common_events = load_data("Data/CommonEvents.rxdata")
$game_map = Game_Map.new
$game_map.setup(1)
for i in 0...20
for j in 0...15
for k in 0...3
if $game_map.data[i,j,k] != 0
node = smgr.add_cube_scene_node(64)
node.set_position(i * 64, k * 64, j * 64)
node.set_material_flag(Video::EMF_LIGHTING, false)
texture_name = ($game_map.data[i,j,k] - 383).to_s + ".png"
node.set_material_texture(0, driver.get_texture(texture_name))
end
end
end
end
lasttime = Time.now
while device.run
DF_Input.update
if DF_Input.trigger?(DF_Input::KEY_F)
p driver.get_fps
end
time = Time.now
if time - lasttime > 5
Graphics.update
lasttime = Time.now
end
driver.begin_scene(true, true, [255, 160, 160, 255])
smgr.draw_all
driver.end_scene
end
device.drop
And, of course, there's a demo to be had!
Keys:
Arrow Keys to move (for now. I will change it later so you can use WASD)
F to show FPS
CTRL + F4 to quit
Link: Download Now!
Alright guys, now it's time to show you something really cool. I don't have a demo, but instead I have a screen shot and some real RGSS code to do with it.
And here is the magical RGSS code that does it. (Normally, you would put this in a scene, but you guys know how to make scenes so I didn't bother)
And here is the magical RGSS code that does it. (Normally, you would put this in a scene, but you guys know how to make scenes so I didn't bother)
Code:
#First, let's move the 2D window out of the way:
DF_GameWindow.set_dimensions(0,0,0,0)
#next, let's create out device. The parameters are:
#Driver type, screen size (in an array), bits per pixel, and fullscreen
#This device is the central point of the 3D engine. Absolutely everything
#can be accessed through this device.
device = DF3DDevice.new(Video::EDT_DIRECT3D9, [800,600], 32, false)
#Now, let's get our scene manager. The scene manager does stuff like adding nodes
#and cameras
smgr = device.scene_manager
#Now, let's get our driver. The driver handles actually rendering.
driver = device.video_driver
#Let's get our mesh! (Note that you should probably add error handling here.
#smgr.get_mesh will return nil if it can't find the file so make sure you
#always check that the mesh was actually created. I didn't do any error handling
#but a simple check for nil would suffice)
mesh = smgr.get_mesh("sydney.md2")
#Let's create an animated scene node from the mesh. Again, normally you
#want to check for errors.
node = smgr.add_animated_mesh_scene_node(mesh)
#now, let's add a camera to the scene node! Camera are how you view everything
#in the scene. Note that it is possible to have more than one camera and
#you can switch between them, or even have them render to different parts
#of the screen.
camera = smgr.add_camera_scene_node
#move our camera, since both the camera and scene node are at the same, default
#position right now. (Which is (0,0,0)) Note that the parameters here are x, y, z.
#when your camera is at (0,0,0) and has no rotation, x is sideways, y is up,
#and z is forwards/backwards
camera.set_position(100,100,100)
#Rememeber how I said that the default position is 0,0,0? Well, since we never moved
#our node, it is at 0,0,0 right now. So, Let's tell the camera to look there:
camera.set_target(0,0,0)
lasttime = Time.now
while device.run #check if our device is still running
#begin rendering the scene. I will not explain what these parameters are yet
#it's not important right now, and it's kind of complicated XD
driver.begin_scene(true, true, [255, 160, 160, 255])
smgr.draw_all #draw all of the scene nodes
driver.end_scene #finish rendering the scene
#this junk is just so Graphics doesn't whine.
time = Time.now
if time - lasttime > 5
Graphics.update
end
end
#Now, alway always always remember to drop your device when you are done.
#The device is something you should only drop at the end of your game, after
#the device no longer runs.
device.drop
Hey guys! I just finished a new demo! This one allows you to actually walk around, so you guys can see that this is actually practical for making a game, and not just taking screenshots. You can also choose which renderer to use. Note that the 2 software renderers are very slow, and D3D8 does not work at all. OpenGL or D3D9 are your best bet.
I will post the RGSS code tomorrow, so you can see what it is like, but I am out of time.
Alright, first a screenshot. ON this screenshot I only took a picture of the 3D window, since you guys know it is actually RMXP (vgvgf can vouch for me, since he actually decrypted the project and looked XD)
And the new demo can be downlaoded here:
3D RMXP Walking Demo
KEYS:
Arrow keys to walk
Mouse to look
F to print current FPS (Please tell me what you get)
Ctrl+F4 to quit (not alt, note that alt is disabled while running this)
I will post the RGSS code tomorrow, so you can see what it is like, but I am out of time.
Alright, first a screenshot. ON this screenshot I only took a picture of the 3D window, since you guys know it is actually RMXP (vgvgf can vouch for me, since he actually decrypted the project and looked XD)
And the new demo can be downlaoded here:
3D RMXP Walking Demo
KEYS:
Arrow keys to walk
Mouse to look
F to print current FPS (Please tell me what you get)
Ctrl+F4 to quit (not alt, note that alt is disabled while running this)
Do I have it now? Good. That is exactly what it looks like: a 3D program running from RMXP. (I will explain why there are two windows, the little one and the big one*)
Don't believe me? Try it yourself:
RMXP in 3D Demo