UPDATE - 4/24/09Alright 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*Layer 1 in RMXPSpoiler for Hiden: Layer 2 in RMXPSpoiler for Hiden: Layer 3 in RMXPSpoiler for Hiden: Full map in 3DSpoiler for Hiden: Now, the RGSS code running the demo: (No explanatory comments this time, guys )Spoiler for Hiden: Code: [Select] 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 FPSCTRL + F4 to quitLink: Download Now![size=150]Don't Forget:[/size]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:Third Release (RGSS Controls the 3D)Spoiler for Hiden: 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)Code: [Select] #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.dropSecond Release (First look at game logic)Spoiler for Hiden: 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 DemoKEYS:Arrow keys to walkMouse to lookF to print current FPS (Please tell me what you get)Ctrl+F4 to quit (not alt, note that alt is disabled while running this)First Release (3D rendering)Spoiler for Hiden: 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
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
#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