游戏开发论坛

 找回密码
 立即注册
搜索
楼主: 轩辕崇正

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

[复制链接]

0

主题

9

帖子

26

积分

注册会员

Rank: 2

积分
26
发表于 2010-1-24 23:52:00 | 显示全部楼层

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

极少回帖 看到前面几楼的帖子 忍不住冒个泡
lz或许是个初学者,可能一些概念没搞清楚
但人家是来寻求帮助的,楼下的几个朋友没必要就抓住这个数落人家,却不提供什么实际的帮助 真是蛋疼

我也是初学者 我想lz看的那份代码里面用的是
DrawPrimitiveUp 取代了 DrawPrimitive吧

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
 楼主| 发表于 2010-1-25 10:46:00 | 显示全部楼层

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

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

极少回帖 看到前面几楼的帖子 忍不住冒个泡
lz或许是个初学者,可能一些概念没搞清楚
但人家是来寻求帮助...


我的问题其实很明朗,就是想问为什么没有顶点缓冲,我的纹理就渲染不出来
我知道,只有纹理坐标在里面,但我仍然看不出关系,我没看见创建的纹理和顶点缓存有过什么“交互”。

而我在其他源码里,看到别人整个引擎都没创建过顶点缓存,所以我才想知道,是否有其他办法,
我又去查了一下,对,果然有DrawPrimitiveUP()函数,然而顶点缓存却是没有的,这正是我想讨论的。
然后在CSDN得知,可以不需创建顶点缓存这一步骤,通过顶点着色器就可实现,
但是我从头到尾都没有说,顶点缓存和固定管线,跟顶点着色器有啥关系吧?这其中有所误解。
何况我根本不知道什么叫固定管线,怎么会去想和其他有什么关系。

另外,我现在已经确认,可以在不创建顶点缓存的情况下,用shader可以渲染纹理,(没人会说纹理的渲染跟顶点缓存没关系吧?)

我的确是新手,但这并不代表我现在才刚开始学D3D,我所看过的书,和走过的路,是你们所不能了解的,也是无法去评价的,所以,说一些别人“没什么基础”“还是去看看一些书”等种种话往往是不符合实际本人的情况,也是没有实际意义的,更解决不了问题,也好像,别人提了个问题,有人就给了一条链接一样的效果。
(如果我说的一些话有“得罪”之处,还请多多包含,我是不得已,因为我想把事情阐述清楚,分析清楚,最到不带一些个人情绪,做到最好。学程序的各位都是追求真善美的吧。)

22

主题

98

帖子

98

积分

注册会员

Rank: 2

积分
98
QQ
发表于 2010-1-25 11:39:00 | 显示全部楼层

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

终极指南那本书里应该有讲过用顶点缓冲跟直接DrawPrimitiveUP的区别吧?外在区别只是效率不同而已。而无论用哪种方式,纹理都保存在Direct3DTexture9里面,固定管线用SetTexture函数指定纹理,渲染的时候根据顶点里保存的纹理坐标查询对应纹理中的颜色。用shader则是给texture变量传值,然后在像素着色器里用tex2D等函数查询对应的sampler,得到最终颜色。所以用不用顶点缓冲跟渲染纹理是没有关系的。

PS:在下可没有看不起楼主的意思哈,大家都是从新手过来的,而且我至今也没有变成高手。。。。

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
 楼主| 发表于 2010-1-25 11:45:00 | 显示全部楼层

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

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

终极指南那本书里应该有讲过用顶点缓冲跟直接DrawPrimitiveUP的区别吧?外在区别只是效率不同而已。而无论用...


如果没有关系,我把顶点缓存的代码全删除了,为何渲染不出来,
这句话讲的就有些夸张了吧。


另外,你讲的似乎有理,然而我还是有些不理解,到底是怎么将某个纹理对象和某个顶点缓存对应起来的。
SetTexture()只不过是指定自己定义的纹理对象,还是看不出和顶点缓存里的数据有啥关系。

22

主题

98

帖子

98

积分

注册会员

Rank: 2

积分
98
QQ
发表于 2010-1-25 12:11:00 | 显示全部楼层

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

比如下面这句代码:
g_pd3dDevice->SetTexture( 0, g_pTexture );
就是告诉D3D你用的第一张纹理的指针是g_pTexture,然后在你渲染顶点的时候比如某个顶点里存的纹理坐标是0.1,0.2,D3D就会查找g_pTexture这张纹理在宽的10%,高的20%这个位置的颜色作为顶点的颜色,顶点之间面的纹理坐标由附近顶点的纹理坐标插值获得。shader处理的也差不多,只不过在shader里纹理坐标是tex2D函数的参数,你可以把原先的纹理坐标传进去,也可以做一些改变,而且最终获得的颜色也可以由你改变,所以灵活得多。

DrawPrimitiveUP肯定是能渲染纹理的,因为我经常用这个。。。你不会只是把创建顶点缓冲的语句删掉了吧?顶点缓冲渲染是用DrawPrimitive,跟DrawPrimitiveUP不一样的。

0

主题

9

帖子

26

积分

注册会员

Rank: 2

积分
26
发表于 2010-1-25 12:12:00 | 显示全部楼层

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

顶点缓存是有的 只不是用dx设备创建 (没有顶点数据怎么渲染,这个跟固定管道和可编程管道没关系的)

而是在外部创建 只是DrawPrimitiveUP传进去而已 我想代码的作者这样做的话 是为了设备丢失的时候处理简单点
因为如果顶点缓存由设备创建 设备丢失的时候要reset

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

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

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

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

顶点缓存是有的 只不是用dx设备创建 (没有顶点数据怎么渲染,这个跟固定管道和可编程管道没关系的)

而是...


原来如此。

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

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

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

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

比如下面这句代码:
g_pd3dDevice->SetTexture( 0, g_pTexture );
就是告诉D3D你用的第一张纹理的指针是...


D3D如何知道某个顶点应该去渲染哪个纹理?也就是该顶点描述的是谁的纹理坐标?

假如定义了2个纹理对象,2个顶点缓存。
他们之间的关系如何配对?

22

主题

98

帖子

98

积分

注册会员

Rank: 2

积分
98
QQ
发表于 2010-1-25 12:57:00 | 显示全部楼层

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

如果你的FVF是设成D3DFVF_TEX1的话,D3D就只读第一张纹理,设成D3DFVF_TEX2的话就读前两张纹理,再把两张纹理的结果颜色混合起来,对应的顶点中也要存储两份纹理坐标,以此类推最多可以到8张。像素着色器中因为是把纹理作为变量处理,所以无所谓先后顺序,想读哪个就用哪个变量。

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
 楼主| 发表于 2010-1-25 14:26:00 | 显示全部楼层

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

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

如果你的FVF是设成D3DFVF_TEX1的话,D3D就只读第一张纹理,设成D3DFVF_TEX2的话就读前两张纹理,再把两张纹...


有些感觉了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-16 01:02

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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