首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >具有多块纹理的绘制模型

具有多块纹理的绘制模型
EN

Game Development用户
提问于 2017-04-17 12:37:11
回答 2查看 1.2K关注 0票数 1

见编辑:

我将如何绘制一个具有多个贴图纹理的模型?我有一些想法,但都有缺点,这里有一些(顺便说一下,这是一个opengl游戏):

-Use是一个巨大的纹理,但这是以纹理昂贵为代价的。

-Render不同的对象为每个纹理对象(例如:一个模型可以是一个房子的砖,另一个可以在屋顶,每一个有自己的瓷砖纹理),但这将变得非常混乱,非常迅速。

这是一个(惊人的)图像,以帮助演示我正在努力做的事情。

红色区域上重复的"R“可能代表着重复的砖块纹理,而绿色的表示屋顶,也许是屋顶瓦。另外,我还添加了一个窗口纹理。

我的问题是,大多数游戏是如何处理这个问题的?我似乎不能把我的头包围在我如何能把它放在一个纹理,但我看到许多其他游戏做我想做的事情。

编辑:

这应该提供一个更好的视觉演示。我想要一个大的网格(在演示中不是很大)使用一个纹理地图集。(请记住,不是地图集中的所有纹理都是相同大小的!)

让我们说这是我的对象,它使用地图集上的每一个纹理,但不是相同数量的重复(砖块重复3次,当笑脸重复9次左右)

大多数游戏是如何实现这样的目标的?而不用重复纹理的大文件。

例如(从BOTW),我想他们不只是重复这个纹理在地图集上,考虑到这将是多么大(和昂贵)。

EN

回答 2

Game Development用户

回答已采纳

发布于 2017-04-18 17:28:02

我似乎找到了最好的答案,它可能是懒惰,但如果你有时间,我会尝试做@DMGregory建议,因为它可能更有效。

因此,我最终做的是使用与OBJ一起导出的材料文件,这让我可以定义什么时候面部应该使用不同的纹理。所以我会渲染一个纹理,然后交换纹理,用这个纹理渲染其余的脸,再这样做,直到整个模型被渲染。当然,这意味着很多额外的平局呼叫,但对我来说,这似乎是最简单的选择。

票数 0
EN

Game Development用户

发布于 2017-04-17 20:17:54

我对OpenGL不太熟悉,所以我将在这里给出一个粗略的草图,并将它作为一个社区wiki,以防更了解该技术的人想要用精确的代码提示来更新它。

首先,如果您的目标是OpenGL 3.0或更高版本,则可以使用阵列纹理。这些允许您将同一分辨率的多个贴图纹理打包到一个采样器中。您的工作流程如下所示:

  1. 在建模工具中,用3通道纹理坐标(通常称为UVW)建立并导出模型。U&V将是你习惯的正常的2D纹理坐标,可以覆盖你想要的纹理空间的任何部分,甚至重叠UV网的其他部分。第三个组件,W,将是一个物质索引--例如,被认为是“砖块”的部分可能有W坐标为0,“鹅卵石”可能是W= 1,而“瓦”可能是W= 2。或者,您可以设置一个导入器,从模型中读取一个材料或亚网格索引,并使用它构造这些W坐标,如果这样做比编写它们更方便的话。
  2. 将纹理按与您指定的W坐标相同的顺序加载到纹理数组中。0=砖,1=鹅卵石,2=瓦,等等)
  3. 在您的着色器中,使用sampler2DArray来引用这个纹理,并将上面创建的三维纹理坐标传递给它。它将使用纹理坐标的第三个通道从数组中选择正确的材料“页面”,并对其进行示例。

如果您需要将不支持Array纹理的设备作为目标,那么您可以使用纹理地图集来完成这方面的工作,只需稍微大惊小怪:

  • 与其将纹理存储为数组中的页面,不如将它们并排放置在一个大的2D纹理中,就像瓷砖一样。
  • 在您的着色器,您将使用第三个纹理坐标,以选择一个偏移到这个网格的瓷砖。
  • 在像素/片段着色器中,您将使用frac或fmod函数将纹理坐标封装到0.1范围(有效地执行重复纹理采样模式通常在硬件中所做的操作),并将此范围缩放到地图集中单个瓷砖的大小。
  • 结合这个瓷砖偏移和包装内的坐标瓷砖,你将得到你的最终样本位置在地图集内。
  • 您可能需要使您的瓷砖稍微小一些,以允许它们之间的一些填充,以确保相邻的瓷砖不会在较小的mip水平一起流血。
票数 1
EN
页面原文内容由Game Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://gamedev.stackexchange.com/questions/140012

复制
相关文章
OpenGL ES 绘制纹理
在OpenGL ES中绘制一张图片需要使用到纹理(texture),绘制纹理步骤如下:
老孟Flutter
2020/09/11
1.1K0
Android OpenGLES 绘制图片纹理
把shader代码写入raw里面 vertex_shader.glsl attribute vec4 av_Position;//顶点位置 attribute vec2 af_Position;//纹理位置 varying vec2 v_texPo;//纹理位置 与fragment_shader交互 void main() { v_texPo = af_Position; gl_Position = av_Position; } fragment_shader.glsl precisio
曾大稳
2018/09/11
1.1K0
Android OpenGLES 绘制图片纹理
roughnet绘制带有纹理填充的网络图
R语言数据分析指南
2023/08/18
1550
roughnet绘制带有纹理填充的网络图
Android OpenGLES绘制yuv420纹理
因为OpenGLES需要用rgb来加载显示,这里就需要将yuv转rgb,这里放在OpenGL里面转换,OpenGL里面使用GPU,提高性能。
曾大稳
2018/09/11
2.3K0
OpenGLES绘制立体多边形加纹理
前面写了OpenGLES的入门篇,一些朋友觉得还不错,找到我问了一些知识,这次我有针对性的写下这篇文章,也为我OpenGLES进阶篇做个开始。 我已认证微信,感兴趣朋友可进我个人主页,点击微信小图标加
清墨
2018/05/07
1.8K0
OpenGLES绘制立体多边形加纹理
Nebula3绘制2D纹理
上次已经绘制过基本图元了, 这次只不过要贴张图而已..... 本来我想用Graphics的Model渲染流程来做, 不过这一层太高级了, 都是什么场景管理资源映射之类的 做低级的事情, 就要用低级的A
逍遥剑客
2018/05/23
4350
多GPU,具有Tensorflow的多进程
Tensorflow是实验深度学习算法的绝佳工具。但是要利用深度学习的力量,需要利用计算能力和良好的工程技术。最终需要使用多个GPU,甚至可能需要多个流程才能实现目标。建议先阅读TensorFlow关于GPU 的官方教程。
代码医生工作室
2019/07/22
2.2K0
多GPU,具有Tensorflow的多进程
具有在线外参校准的多激光雷达系统的里程计和地图绘制系统
文章:Robust Odometry and Mapping for Multi-LiDAR Systems with Online Extrinsic Calibration
点云PCL博主
2022/02/10
5590
具有在线外参校准的多激光雷达系统的里程计和地图绘制系统
【Unity3D】纹理贴图 ( 纹理 Texture 简介 | 为 3D 模型设置纹理贴图 )
上一篇博客 【Unity3D】材质 Material ( 材质简介 | 创建材质 | 设置材质属性 | 对 3D 物体应用材质 | 资源拖动到 Inspector 检查器中的 Material 属性中 ) 使用了材质来对物体表面进行渲染 , 只能进行纯色渲染 , 实际的物体很少有纯色的 , 大部分的 3D 物体渲染都需要使用图片进行渲染 , 这里引入 纹理 Texture ;
韩曙亮
2023/03/30
2.8K0
【Unity3D】纹理贴图 ( 纹理 Texture 简介 | 为 3D 模型设置纹理贴图 )
【WebGL】一次drawcall中绘制多个不同纹理的图形
Demo: http://kenkozheng.github.io/WebGL/multi-texture-in-one-drawcall/index.html
用户1258909
2020/07/27
1.8K0
matlab绘制纹理图并用图案填充或斑点填充区域
带填充纹理的堆叠图是通过在原始堆叠图的基础上添加不同的纹理得到的,可以很好地解决由于颜色区分不够而导致的对象识别困难问题。由于Matlab中未收录提供填充纹理选项,因此给出一个自行开发的代码来实现该功能,
用户9925864
2023/12/06
6230
matlab绘制纹理图并用图案填充或斑点填充区域
使用 Win2D 绘制带图片纹理的圆(或椭圆)
发布于 2018-11-11 21:50 更新于 2018-11-28 08:25
walterlv
2020/02/10
7180
Swift多叉树绘制
主要涉及一个遍历层级,以及遍历计算坐标 上码 结点 class NaryTreeNode { var parent: NaryTreeNode? var title: String?
玖柒的小窝
2021/12/07
3580
为3D模型添加纹理贴图
本篇文章介绍纹理(Texture Map,也译作纹理映射)的使用,将描述如何使用Three.js给3D对象添加贴图, 贴图是通过将图像应用到对象的一个或多个面,来为3D对象添加细节的一种方法。
程序你好
2021/07/23
2.2K0
为3D模型添加纹理贴图
Linux多块物理磁盘做LVM
最近刚刚跳槽,新单位同事问了我个问题,突然把我问懵了,因为好久没有接触底层磁盘了,于是做了以下的实验。
Bob hadoop
2021/02/27
5K0
Linux多块物理磁盘做LVM
RAL2022 | SO-SLAM:具有尺度比例和对称纹理约束的语义物体 SLAM
作者:Ziwei Liao, Yutong Hu, Jiadong Zhang, Xianyu Qi, Xiaoyu Zhang, Wei Wang*
3D视觉工坊
2022/06/28
8660
RAL2022 | SO-SLAM:具有尺度比例和对称纹理约束的语义物体 SLAM
Python+OpenGL进行立方体多纹理映射
Python扩展库pyopengl完美地封装了OpenGL,从而使得可以使用Python编写计算机图形学程序。如果使用pip在线安装不成功的话,可以下载whl文件然后本地安装。 本文代码使用Python+OpenGL对立方体进行贴图,并且每个面的纹理不相同。之前发过一个类似的,不过那个是6个面的纹理一样,见Python实现立方体纹理映射 import sys from OpenGL.GL import * from OpenGL.GLUT import * from OpenGL.GLU import *
Python小屋屋主
2018/04/16
2.4K0
Python+OpenGL进行立方体多纹理映射
Shader-基础纹理-渐变纹理
一种基于冷暖色调的着色技术,通过渐变纹理控制漫反射光照。核心部分来说用过使用halfLambert构建一个纹理坐标,用这个纹理坐标来对渐变纹理进行采样。
祝你万事顺利
2019/05/28
1.1K0
Shader-基础纹理-遮罩纹理
遮罩纹理(mask texture)控制光照的强度,获得更加细腻的效果,通过遮罩纹理控制光照。在制作地形材质的时候混合多张图片,遮罩纹理控制如何混合这些纹理。 通过采样得到的纹素值与某种表面属性相乘,来更加精准的控制模型表面的各种属性。 在代码中添加了BumpMap来进行凹凸纹理效果,通过SpecularMask实现控制高光的光照
祝你万事顺利
2019/05/28
1.2K0
Unity3D学习笔记2——绘制一个带纹理的面
上一篇文章《Unity3D学习笔记1——绘制一个三角形》中介绍了Unity3D的HelloWorld——绘制一个简单的三角形。不过这个三角形太简单了,连材质都没有。那么这里就将三角形扩展为一个矩形的面,并且为这个面贴上纹理。
charlee44
2021/07/13
1.1K0

相似问题

如何在模型上绘制纹理

10

具有材质和/或纹理的网格渲染模型

10

戈多:如何使用_draw绘制一个角度的纹理

10

多幅纹理

10

多纹理地形?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文