Project1

标题: 我的一个基于Ruby的3D游戏引擎,是否该放弃? [打印本页]

作者: zyxwvu    时间: 2011-8-21 01:32
标题: 我的一个基于Ruby的3D游戏引擎,是否该放弃?
本帖最后由 zyxwvu 于 2011-8-21 02:01 编辑

我很早以前写过一款基于Ruby的3D游戏引擎,主要功能:显示2D文字,2D图片,3D模型(只有*.x),以及3D辅助线,纹理和材质以及雾化效果,以及Shader(HLSL,Pixel Shader,Vertex Shader),以及一些HTTP相关的操作,基于.net 3.5实现的,但总感觉没有前途:
1、基于.net本来就很鸡肋了,还基于.net 3.5,.net很拖后退
2、微软大力推崇XNA,Managed DX已经太落伍了,只能到DX9,而XNA根本无法开发引擎
3、只支持*.x模型,没有提供地形系统,没有提供骨骼,没有跨平台性能
4、由于本人只是初中生,粒子系统,力学系统对于我来说难以实现
5、程序的架构对后期的维护也是很大的鸡肋
那到底是否该放弃呢?可是又觉得很强大。但是放弃后再想重读源码就很难了(架构问题)

演示代码:
  1. def closingHandler() # 必须定义:窗口关闭处理器
  2.    Hi.ViewPort.Finalize() # 必须释放显存和内存
  3. end

  4. $keyPressed = 0
  5. $viewZoom = 0
  6. $viewMove = 0

  7. def keyboardHandler(keyfunc, keyascii) # 必须定义:键盘处理器
  8.    if keyfunc == "up"
  9.       $keyPressed = keyascii
  10.       if keyascii == 27 # ESC
  11.          Hi.BasicCalls.ExitRunning()
  12.       end
  13.    elsif keyfunc == "down"
  14.       if keyascii == 38 # 向上键
  15.          $viewZoom = $viewZoom + 5
  16.       elsif keyascii == 40 # 向下键
  17.          $viewZoom = $viewZoom - 5
  18.       elsif keyascii == 37 # 向左键
  19.          $viewMove = $viewMove + 5
  20.       elsif keyascii == 39 # 向右键
  21.          $viewMove = $viewMove - 5
  22.       end
  23.    end
  24. end

  25. def renderSence() # 渲染过程
  26.    Hi.ViewPort.ClearScreen(Hi.WebColor("lightblue"))
  27.    #修改查看用矩阵
  28.    Hi.ViewPort.SetViewMatrix(Hi.Vector3D(100 + $viewMove, 150 + $viewZoom, 100 - $viewMove), Hi.Vector3D(0, 0, 0))
  29.    Hi.ViewPort.DrawAxisLine(100) #画出辅助坐标 [arg:长度]
  30.    Hi.ViewPort.DrawText2D("Hello, World!", 10, 10)
  31.    if $keyPressed == 0
  32.       Hi.ViewPort.DrawText2D("You didn't press any key.", 10, 30)
  33.    else
  34.       Hi.ViewPort.DrawText2D("You pressed the #" + $keyPressed.to_s + " key.", 10, 30)
  35.    end
  36. end

  37. Hi.AppTitle = "测试用游戏" # 定义程序名称
  38. Hi.ViewPort.SetTitle("Hello, World! Game by Zyxwvu") # 设置视口标题
  39. # 初始化 Direct3D [ret:是否成功?]
  40. # [arg:使用GPU?,抗锯齿?,全屏?(不推荐),高,宽]
  41. Hi.ViewPort.Init3D(true, true, false, 800, 600)
  42. Hi.BasicCalls.MsgBox("Direct3D 初始化成功!")
  43. # 使用默认投影矩阵(等我会了高等数学就不默认了)
  44. Hi.ViewPort.DefaultProjection(10000)
  45. Hi.ViewPort.SetAmbientColor(Hi.WebColor("white"))
  46. Hi.ViewPort.StartRenderer("renderSence()")
  47. Hi.BasicCalls.EnterRunning() # 进入运行状态
复制代码
代码效果:


另外,本人还有一款基于Lua的3D引擎,C++编写,可是因为学习鸭梨太大,加上对C++ Direct3D API了解偏少,所以开发也十分缓慢,不过架构还比较完美,放弃后还可以重读源码
作者: IamI    时间: 2011-8-21 07:33
既然是 NET MDX 要 Ruby 用来作甚,外挂解释器么?
计算主要还是矩阵计算,进高中以后就会学到。
程序架构老问题了,尝试多用接口,继承,属性,严格封装来实现功能。
作者: s625595429    时间: 2011-8-21 08:11
千万不要放弃啊 很强大的说 我曾经也是 业余的游戏制作者 很希望业余制作人也能用3D引擎制作游戏 这样我3D模型 贴图 也能为咋 业余游戏制作者 作出贡献哈 加油 支持你 哦耶~~~:victory:
作者: zyxwvu    时间: 2011-8-21 09:37
s625595429 发表于 2011-8-21 08:11
千万不要放弃啊 很强大的说 我曾经也是 业余的游戏制作者 很希望业余制作人也能用3D引擎制作游戏 这样我3D ...

可是我现在要模型都很难了,实在不想装Panda,3ds每个版本都有对应插件啊
作者: 匿名    时间: 2011-8-21 09:59
PANDA是个好东西,可以随时捏熊猫(大雾)
此外,PYTHON本身美
作者: s625595429    时间: 2011-8-21 10:18
s625595429 发表于 2011-8-21 08:11
千万不要放弃啊 很强大的说 我曾经也是 业余的游戏制作者 很希望业余制作人也能用3D引擎制作游戏 这样我3D ...

是需要模型么? 我可以提供
作者: 编程白痴    时间: 2011-8-21 10:53
代码,我有用不能理解的东西:'(
作者: yangff    时间: 2011-8-21 13:18
本帖最后由 yangff 于 2011-8-21 13:20 编辑

XNA可以做,嵌入一个IronRuby即可
直接开IronRuby然后require "Microsoft.XNA巴拉巴拉……“
作者: 文军诺    时间: 2011-8-21 13:22
我小学刚毕业,那些数学没学过呃。看来还要好好学习啊!
作者: 藏书妹    时间: 2011-8-21 13:55
提示: 作者被禁止或删除 内容自动屏蔽
作者: yangff    时间: 2011-8-21 15:21
http://blogs.msdn.com/b/johanl/a ... k-och-ironruby.aspx
我就不解释什么了=v=
作者: plummy    时间: 2011-8-21 15:24
个人对3D引擎不感兴趣,是因为......不会用
作者: zyxwvu    时间: 2011-8-21 19:51
没你那么简单。。。我的不是XNA,是MDX,而且XNA Ruby require "Microsoft.XNA“无法引入Content
作者: sdgn    时间: 2014-2-17 13:46
老實說`
在下認為要搞3d的話還是轉戰unity吧... 最近滿熱門的




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1