物体应该自己画吗?(几何体和纹理的混合)
Should objects draw themselves? (Mixture of geometry and textures)
我知道以前已经问过很多次类似的问题。但是,这是一个不同的情况。
我正在使用 SDL2 编写C++游戏。目前,所有对象都会自行绘制。他们这样做是因为他们的画法都略有不同。
例如,按钮包含一个矩形,用SDL_RenderFillRect();
按钮还包含文本,这些文本是使用 SDL_RenderCopy()
绘制的,该文本将SDL_TTF生成的纹理作为参数。
此外,MapView 小部件(基本上是一个可以加载瓦片地图的网格(使用包含水平和垂直SDL_RenderDrawLine()
调用的"for"循环将网格绘制出来。
最后,瓷砖本身存储为纹理,使用 SDL_RenderCopy()
绘制。
我知道通常最好不要让对象自己绘制。但是,由于对象的绘制方式差异很大,我不确定另一种方法!
我认为可以为每个对象提供一个 GetTexture(( 函数,使用纹理的对象可以简单地"返回纹理",而几何对象可以生成纹理。对于我的 MapView 对象来说,这变得很复杂,因为当用户在游戏世界中导航时,网格会不断更新(偏移值会更改,网格会在移动时重新绘制(。
像许多这种类型的问题一样,答案是:这取决于你的程序。
如果您只是使用 SDL 以相同的方式绘制它,那么没有理由不这样做。另一种选择可能是为每个对象设置一个特定的渲染类,但这会使工作量加倍。将所有渲染代码放在单个类或函数中也可以正常工作,但它很快就会变得庞大而复杂。
这是一个基于代码复杂性以及将来想要用它做什么的判断调用,我的建议是选择最简单的解决方案。只要您考虑了潜在的缺点,您就可以做出明智的决定。
相关文章:
- 无法将结构注册为增强几何体3D点
- OpenInventor从9.8升级到10.4.2后,GLSL纹理返回零
- SFML纹理像播放器
- OpenGL大的3D纹理(>2GB)非常慢
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 着色器纹理值与创建纹理时写入的值不同
- OpenGL将纹理四边形渲染为(0,0)
- 宽度为奇数的16位纹理为片状
- 使用 CUDA 和纹理进行图像减法
- 提升几何体:C++并集多个多边形
- 提升几何体:assertion_failed错误C++
- 如何从 Skia 路径几何体中获取网格?
- 在不使用统一的情况下将纹理传递给 GLSL 着色器?
- 将使用太多的纹理插值器 - 带旋转的着色器
- dx11 渲染到纹理仅显示透明颜色
- OpenGL 4.3 错误地将第 4 个纹理坐标映射到与第 3 个纹理坐标相同的位置
- 如何使用 DXGI 格式DXGI_FORMAT_R1_UNORM创建 2D 纹理?
- 纹理单位重叠?渲染了错误的纹理
- 纹理未应用于 2D 几何体
- 物体应该自己画吗?(几何体和纹理的混合)