赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 783 |
最后登录 | 2012-3-4 |
在线时间 | 17 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 17 小时
- 注册时间
- 2011-8-19
- 帖子
- 27
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 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、程序的架构对后期的维护也是很大的鸡肋
那到底是否该放弃呢?可是又觉得很强大。但是放弃后再想重读源码就很难了(架构问题)
演示代码:- def closingHandler() # 必须定义:窗口关闭处理器
- Hi.ViewPort.Finalize() # 必须释放显存和内存
- end
- $keyPressed = 0
- $viewZoom = 0
- $viewMove = 0
- def keyboardHandler(keyfunc, keyascii) # 必须定义:键盘处理器
- if keyfunc == "up"
- $keyPressed = keyascii
- if keyascii == 27 # ESC
- Hi.BasicCalls.ExitRunning()
- end
- elsif keyfunc == "down"
- if keyascii == 38 # 向上键
- $viewZoom = $viewZoom + 5
- elsif keyascii == 40 # 向下键
- $viewZoom = $viewZoom - 5
- elsif keyascii == 37 # 向左键
- $viewMove = $viewMove + 5
- elsif keyascii == 39 # 向右键
- $viewMove = $viewMove - 5
- end
- end
- end
- def renderSence() # 渲染过程
- Hi.ViewPort.ClearScreen(Hi.WebColor("lightblue"))
- #修改查看用矩阵
- Hi.ViewPort.SetViewMatrix(Hi.Vector3D(100 + $viewMove, 150 + $viewZoom, 100 - $viewMove), Hi.Vector3D(0, 0, 0))
- Hi.ViewPort.DrawAxisLine(100) #画出辅助坐标 [arg:长度]
- Hi.ViewPort.DrawText2D("Hello, World!", 10, 10)
- if $keyPressed == 0
- Hi.ViewPort.DrawText2D("You didn't press any key.", 10, 30)
- else
- Hi.ViewPort.DrawText2D("You pressed the #" + $keyPressed.to_s + " key.", 10, 30)
- end
- end
- Hi.AppTitle = "测试用游戏" # 定义程序名称
- Hi.ViewPort.SetTitle("Hello, World! Game by Zyxwvu") # 设置视口标题
- # 初始化 Direct3D [ret:是否成功?]
- # [arg:使用GPU?,抗锯齿?,全屏?(不推荐),高,宽]
- Hi.ViewPort.Init3D(true, true, false, 800, 600)
- Hi.BasicCalls.MsgBox("Direct3D 初始化成功!")
- # 使用默认投影矩阵(等我会了高等数学就不默认了)
- Hi.ViewPort.DefaultProjection(10000)
- Hi.ViewPort.SetAmbientColor(Hi.WebColor("white"))
- Hi.ViewPort.StartRenderer("renderSence()")
- Hi.BasicCalls.EnterRunning() # 进入运行状态
复制代码 代码效果:
另外,本人还有一款基于Lua的3D引擎,C++编写,可是因为学习鸭梨太大,加上对C++ Direct3D API了解偏少,所以开发也十分缓慢,不过架构还比较完美,放弃后还可以重读源码 |
|