Mik*_*old 3 opengl textures texturing
我正在尝试为我正在使用OpenGL制作的游戏画一辆车.car对象存储在带有.mtl文件的.obj文件中.
这款车有500多个顶点,100多个面,需要超过50种不同的纹理,使用我自己的顶点和片段着色器.我通过使用缓冲区对象来解决这个问题,缓冲区对象立即发送有关我的对象的所有信息.我的问题是尝试将不同的纹理应用于同一对象的不同表面.
我发现这个问题的答案是将纹理绑定到某个纹理编号(即GL_TEXTURE0,GL_TEXTURE1等等),并将Sampler2D传递给引用它的片段着色器.但是,我可以用这种方式存储50多个纹理吗?据我所知,它归于GL_TEXTURE32.
另外,我如何告诉着色器仅将纹理应用于汽车对象的某个面?
您不能以这种方式渲染模型,一次绑定所有纹理.片段着色器,即使对于高端GL 4.1级硬件,也只能访问16个纹理.也就是说,它只能有16个采样器.
总纹理数量更高,因为其他着色器阶段也可以使用纹理.
处理它的正确方法是执行以下操作之一:
#3是唯一不需要更改数据的解决方案.但要注意:如果你经常渲染这款车(比如每帧数千次),状态变化开销可能是性能问题.#1和#2的某种组合是通常优选的方法.
顺便说一句,如果你的模型只有几百个面,但有50个纹理,那么很可能在建模过程中出现了可怕的错误.
| 归档时间: |
|
| 查看次数: |
2899 次 |
| 最近记录: |