游戏开发论坛

 找回密码
 立即注册
搜索
查看: 11667|回复: 25

纹理数据和顶点缓存究竟有什么关系?如果不使用顶点缓

[复制链接]

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
发表于 2010-1-21 23:16:00 | 显示全部楼层 |阅读模式
大家都知道如何将一个简单的纹理渲染出来吧?
书上大都是使用顶点缓存来存放纹理数据的,
但是我左看又看,都发现这个顶点缓存似乎和我创建的这个纹理没有多大关系,但是一删除这些顶点缓存,运行的时候,就什么也看不见 ,不知道何故。。

另外,吉安娜远征的源码里,从头到尾没有使用过顶点缓存,也奇怪,纹理数据是如何处理并渲染出来的呢? [em24] [em24]

44

主题

248

帖子

274

积分

中级会员

Rank: 3Rank: 3

积分
274
发表于 2010-1-21 23:21:00 | 显示全部楼层

Re:纹理数据和顶点缓存究竟有什么关系?如果不使用顶点

我猜你想说的是纹理坐标吧?
纹理坐标和纹理不是一个概念

86

主题

2251

帖子

2384

积分

金牌会员

Rank: 6Rank: 6

积分
2384
QQ
发表于 2010-1-22 00:13:00 | 显示全部楼层

Re:纹理数据和顶点缓存究竟有什么关系?如果不使用顶点

没看懂你想说啥
纹理坐标一般是顶点数据的一部分
顶点缓冲和索引缓冲(即顶点的索引缓冲)

1

主题

266

帖子

280

积分

中级会员

Rank: 3Rank: 3

积分
280
发表于 2010-1-23 16:12:00 | 显示全部楼层

Re:纹理数据和顶点缓存究竟有什么关系?如果不使用顶点

顶点的数据中一般包含了顶点的纹理坐标,如果连顶点都没有,那么纹理渲染到哪里呢?
另外你确定清楚 吉安娜远征源码 的结构么? 那里面肯定封装了这些。

对了   你说的是3D游戏么?
如果是纯2D,那就不一样了。

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
 楼主| 发表于 2010-1-24 12:01:00 | 显示全部楼层

Re: Re:纹理数据和顶点缓存究竟有什么关系?如果不使用

onemoo: Re:纹理数据和顶点缓存究竟有什么关系?如果不使用顶点缓存呢?

顶点的数据中一般包含了顶点的纹理坐标,如果连顶点都没有,那么纹理渲染到哪里呢?
另外你确定清楚 吉安娜...


他的整个源码里,唯一那句创建顶点缓存和使用SetStreamSource()的函数被注释掉了,这就断定,他没有使用顶点缓存。

源码:
/*
        if(FAILED(m_pD3DDevice->CreateVertexBuffer(72*sizeof(CustomVertex), 0, CUSTOMFVF,
                D3DPOOL_MANAGED, &g_pVB, NULL)))
        {
                return false;
        }
...
*/
//        m_pD3DDevice->SetRenderState(D3DRS_NORMALIZENORMALS, true);
//        m_pD3DDevice->SetStreamSource(0, g_pVB, 0, sizeof(CustomVertex));
//        m_pD3DDevice->SetFVF(CUSTOMFVF);
//        m_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 15);
//        m_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 12);

而后来,我从CSDN论坛里得知,可以不使用顶点缓存,使用顶点着色器,就可以代替固定管道的渲染。

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2010-1-24 16:34:00 | 显示全部楼层

Re:纹理数据和顶点缓存究竟有什么关系?如果不使用顶点

lz找本书好好看看吧
那么多基础概念都不清楚,看源码就是浪费时间

可以不使用顶点缓存,使用顶点着色器,就可以代替固定管道的渲染
-----------------------
用shader或者固定管线与用不用vertex buffer完全没关系

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
 楼主| 发表于 2010-1-24 16:52:00 | 显示全部楼层

Re: Re:纹理数据和顶点缓存究竟有什么关系?如果不使用

clayman: Re:纹理数据和顶点缓存究竟有什么关系?如果不使用顶点缓存呢?

lz找本书好好看看吧
那么多基础概念都不清楚,看源码就是浪费时间

可以不使用顶点缓存,使用顶点着色器...


你的回答很让我费解。然而很多事没那么简单。
1:你能断定,看一本书真的可以让我知道所有东西?我花了一两个月学了《DirectX游戏开发终极指南》然而却没有看到关于顶点着色器的内容。学习这东西是游戏里打怪一样吗?打一定的怪,一定升级,我看一定的书,就一定懂的全部?

2:我本来就是由于提了这个问题,才发现了新的问题,那你要强求别人怎么做?何况学游戏开发又岂是等于学习DX,太多要看的书。这世界哪有那么水到渠成,那么单纯的事?

3:你又能断定我没有一边提问,一边看书么?难道提问就等于,我现在什么事都不干,等着别人给我答案么?学习这东西是一下子就能学完的么?

4:看源码的确有浪费时间的嫌疑,然而,看源码有看源码的技巧,我并不一定要从头看到尾,我并不一定要整天只知看源码,我甚至可以为了一个函数的使用时机,只看那么一眼,然而这都叫看,只要是对自己有帮助的,只要是不影响效率的,都没问题。而你一句简单的“看源码就是浪费时间”,也就太过武断了。

5:很明显,你的回答有些情绪化,这不仅解决不了问题,反而会有相反的效果。

(请原谅我在这地方给你提了些问题,因为其实你能来回贴,我已经很高兴了)

这是我的原贴,现已解决。
http://topic.csdn.net/u/20100121/22/453e91cc-141b-46b7-9b90-f04d592dfafd.html

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2010-1-24 19:56:00 | 显示全部楼层

Re:纹理数据和顶点缓存究竟有什么关系?如果不使用顶点

1.找一本好书系统的学习,能节约你很多时间,在可以找到的资源中,龙书算不错的了,至于“终极指南”这类书,大多没有多少价值

2.编程这种事是急不来的,不系统学习的后果就是“提了这个问题,才发现了新的问题”

3.图形方面的东西,很多图形学的原理,dx的内部机制,看源码是学不到的。你可能知道怎么用,但学不到何时用。就像vertex buffer和非buffer,两者都可以作为顶点数据源,但性能,带宽压力,内部管理都是非常不一样的

4.你把很多基本概念都混淆了,提的问题本身就有些莫名其妙。csdn上回你那些人大部分也不知道自己在说什么,vertex buffer和shader,纹理数据都是完全不同的东西。

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
 楼主| 发表于 2010-1-24 20:23:00 | 显示全部楼层

Re: Re:纹理数据和顶点缓存究竟有什么关系?如果不使用

clayman: Re:纹理数据和顶点缓存究竟有什么关系?如果不使用顶点缓存呢?

1.找一本好书系统的学习,能节约你很多时间,在可以找到的资源中,龙书算不错的了,至于“终极指南”这类书...



这4点,对我来讲,又曲解了。
算了,不争辩了,我知道,这样下去的话,不仅越扯越远,也没个休止了。
有些事情,即便讲明白个种因果,又怎样……

都是学程序的,大家都不糊涂,有些事,只有自己最清楚。何况早已不是什么10几岁的小孩了。

话说我当时看到有人回贴,颇有些意外——早已习惯了没人回贴了。

22

主题

98

帖子

98

积分

注册会员

Rank: 2

积分
98
QQ
发表于 2010-1-24 22:27:00 | 显示全部楼层

Re:纹理数据和顶点缓存究竟有什么关系?如果不使用顶点

终极指南那本书我看过,号称终极指南其实只是本初级读物。。。基本上就是抄了一部分文档,而且代码还有不少错误。

建议楼主还是先了解一下shader。顶点缓冲跟顶点着色器根本是两回事,shader只是用GPU对传入的顶点和像素做一些你想要的运算和改变。而顶点缓冲是一种顶点的储存方式,跟固定管线什么的根本没关系。顶点缓冲里的数据不通过shader渲染那就是固定管线,通过shader渲染那就是着色器渲染。拿烧菜做比方,你可以把顶点缓冲想象成一条生鱼,固定管线是清蒸,shader是红烧。不管怎么烧,鱼只是原料而已。

而且纹理数据也不是存在顶点缓冲里,顶点缓冲只存储每个点的纹理坐标。CSDN上的回答我看了下,确实忽悠了你。。。虽然确实可以用纹理存储一些数据用来在pixel shader里改变像素值,但shader只能用来改变顶点和像素,无法生成顶点和像素。因为shader代码本来就是在顶点被渲染时才调用的。还是前面那个比方,本来就没有鱼,再怎么红烧也烧不出鱼来。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-16 00:29

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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