游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2391|回复: 5

最近基本完成了一个OpenGL框架的游戏,把它转到D3D时有点

[复制链接]

39

主题

102

帖子

102

积分

注册会员

Rank: 2

积分
102
发表于 2005-10-1 09:19:00 | 显示全部楼层 |阅读模式
以前一直用OpenGL的,很少用D3D,现在D3D10大有一统江湖之势,所以想把自己做的一个OpenGL的3DRPG游戏改成D3D的,我本来认为问题不大,但发现最大的难度恰恰在最基本的绘制图元的函数上。


我发现D3D的渲染图元函数灵活性好象不大好,要绘制一组图元(primitive)之前,必须要把所有顶点的信息提前定义到一个顶点缓冲区中,然后才是DrawPrimitive()绘制图元。如果要绘制的图形是简单一些的图形还好,比如常看到的D3D教学用的画立方体等。



但困惑的难题就是,在渲染过程中,如果顶点的位置是不断变化的怎么办?比如Doom3的md5骨骼动画,顶点是经过每一帧骨骼转动后计算出来的,每一次顶点都不固定。难道不断的在渲染时调用Lock()和UnLock()拷贝顶点到顶点缓冲,然后再渲染出来,加锁和解锁是需要相当的时间的,这样动画岂不是停顿的很厉害?


第二个例子:纹理坐标也是必须提前拷贝到顶点缓冲的,但是比如一个天空的纹理,要想用纹理坐标值改变的方法绘制天空上浮动的云,是不是要不断的变换顶点缓冲区中的顶点坐标数值?



OpenGL中有顶点数组,就类似于D3D的顶点缓冲。但是OpenGL中有最简单基础的绘图函数

glBegan(GL_TRIANGLESTRIP)
glVertex3f(float x , float y ,float z)
glVertex3f(float x , float y ,float z)
glVertex3f(float x , float y ,float z)
glVertex3f(float x , float y ,float z)
glEnd()

只要输入四个顶点的坐标就能绘制出一个三角形带来,这样遇到不断变化的顶点时更改里面的顶点坐标值就可以了,不用先拷贝一个数组中的数据到顶点缓冲区,还要加锁解锁的。


不知道D3D有没有类似于glVertex这样直接用顶点数值绘图的函数?

难道在D3D中渲染图形必须要遵循  

1 定义数组 2. 将数组中的数据加锁后拷贝到顶点缓冲,然后解锁 3.用DrawPrimitive或是索引缓冲绘制


请高人指教,小弟改造好后会把代码和大家共享的。



6

主题

55

帖子

55

积分

注册会员

Rank: 2

积分
55
发表于 2005-10-1 10:59:00 | 显示全部楼层

Re:最近基本完成了一个OpenGL框架的游戏,把它转到D3D时有

就算是用opengl也不会用glVertex来画吧
一般都用glDrawElements的啊

5

主题

49

帖子

49

积分

注册会员

Rank: 2

积分
49
QQ
发表于 2005-10-1 12:35:00 | 显示全部楼层

Re:最近基本完成了一个OpenGL框架的游戏,把它转到D3D时有

动态生成模型就要用到glVertex咯。

以前用过一段时间D3D 8.1,没有直接画图的函数。

要先新建一个Vertex序列(数组),填入顶点数据。然后用DrawPrimitiveUp()直接绘制Vertex序列(数组)。

补充一句:DrawPrimitiveUp()不需要建立VertexBuffer。

补充两句:楼主为什么想转移到DX10?个人感觉还是OpenGL用起来舒服自在呐~DX9以后确实增加了不少功能,像静态画面处理(Glow,Blur....)、HLSL之类,不过除非专业制作(要对图形学要比较深刻的了解),否则很少(很难)用上。作为个人开发者,我觉得还是多完善引擎比较实在。(个人观点,觉得不爽请无视…… -_-|||)

补充最后一句:OpenGL也可以通过扩展实现这些功能。

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
发表于 2005-10-2 10:03:00 | 显示全部楼层

Re:最近基本完成了一个OpenGL框架的游戏,把它转到D3D时有

glVertex,只在一种情况下才会用: 那就是你觉得用glDrawElement/Array等函数实在是麻烦,而且对性能不那么重要的时候。
否则,一定要用VBO + glDrawElement 系列函数。

18

主题

631

帖子

660

积分

高级会员

Rank: 4

积分
660
发表于 2005-10-2 10:41:00 | 显示全部楼层

Re:最近基本完成了一个OpenGL框架的游戏,把它转到D3D时有

顶,等牛人的解释。

5

主题

49

帖子

49

积分

注册会员

Rank: 2

积分
49
QQ
发表于 2005-10-2 12:52:00 | 显示全部楼层

Re: 最近基本完成了一个OpenGL框架的游戏,把它转到D3D时有

楼上把我在3楼的帖子华丽地无视掉了……  [em6]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-28 01:34

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表