当前位置: 首页 > 知识库问答 >
问题:

LWJGL, openGL多纹理

孙经艺
2023-03-14

假设我有一个金字塔…我知道如何绘制它,我知道如何为整个金字塔设置纹理,但如何为每面墙设置不同的纹理?

我通过在GL11.glBegin(GL11.GL_TRIANGLES)之前添加这个GL11.glBindTexture(GL11.GL_TEXTURE_2D,texture.getTextureID ());来设置纹理;

我试图通过添加<code>GL11.glBindTexture(GL11.GL_TEXTURE_2D,TEXTURE.getTextureID())来绑定纹理 后,但GL11.glBindTexture(GL11.GL_TEXTURE_2D,TEXTURE.getTextureID()) GL11.glBegin(GL11.GL_TRIANGLES)之间,则代码>不起作用GL11.glEnd()

编辑

我把每面墙都分开画了,效果很好,但我不喜欢这种方式……这看起来很棘手……这是我想要的好方法吗?


共有2个答案

闻人杰
2023-03-14

我不认为在GL中有一种直截了当的方法可以做到这一点。您可能希望将纹理组合成一个大图像,然后使用纹理坐标选择正确的子图像。

即使你让它为有限数量的纹理工作,例如通过切换纹理单元并在另一个上使用白色像素(或使用高级GLSL材料),它可能无法扩展到性能:http://origin-developer.nvidia.com/docs/IO/8230/BatchBatchBatch.pdf

邵捷
2023-03-14

我认为最好的方法是你所做的,把它们分开画出来。您通常希望每个“批次”都是指单个材料。

如果你真的想,你可以把这四种纹理打包成一张纸,让每面墙用独特的纹理线挑出其中的一部分,但这可能是不必要的复杂性,除非你的性能受到太多批次的影响。

 类似资料:
  • 我试图用lwjgl创建一个简单的OpenGL程序,但目前我还停留在创建纹理渲染上。 我得到的错误是一个分段错误: 机器信息: 有问题的JVM线程堆栈: 最后是我处理纹理创建的代码: 我创建的图像类工作得很好,我使用的示例图像是2 x 2像素,并且具有12字节长度的内部缓冲区,因此segvault不应该由太短的缓冲区引起。

  • 我正在尝试在OpenGL/LWJGL中制作一个简单的按钮, 我可以正确地渲染我的2D四边形,但是当我实现纹理时,整个四边形只有大约3/4的部分得到了纹理,就像这样:https://dl.dropboxusercontent.com/u/60223805/glerror1.png 如果我删除纹理坐标,我得到这个:https://dl.dropboxusercontent.com/u/60223805

  • 使用LWJGL的OpenGL版本1.1和2D纹理,我发现自己卡住了... 出于某种原因,LWJGL引擎不会在2D图层上渲染加载的纹理...相反,我得到了一个白色正方形... 我假设我很有可能在代码的某个地方遗漏了什么..以下是与此类事件相关的全部代码.. 加载OpenGL环境: 进入2D绘图模式(用于绘制纯色正方形的功能-通过glcolor函数进行测试,然后通过glvertex调用尺寸): 加载映

  • 我正在绘制一个纹理四边形,但使用的纹理是以前绑定的纹理,即使我试图绑定一个新纹理。 在GuiHandler中创建纹理。Java语言 渲染代码 有人知道为什么使用先前绑定的纹理而不是正确的纹理吗?P、 我正在使用LWJGL

  • 我刚刚开始学习LWJGL / OpenGL来创建3D游戏,所以我从小处着手,尝试制作一条线(2D)的简单显示。窗口加载正常,大小合适,但显示器上没有绘制任何内容。有一个空白屏幕,我似乎对代码所做的任何更改都不会影响在屏幕上绘制的内容。这可能是因为我对如何正确执行此操作缺乏了解,或者这可能是我的代码/计算机中的问题。我尝试在我的初始化代码中添加和删除各种东西,如glEnable(GL_TEXTURE

  • 我正在用OpenGL3.3开发一个3D程序。到目前为止,我设法渲染了许多立方体和一些球体。我需要纹理所有的立方体的脸与一个共同的纹理,除了一个脸应该有一个不同的纹理。我尝试了一个单一的纹理,一切都很好,但当我试图添加另一个纹理时,程序的行为似乎是随机的。 我的问题: 有没有一种合适的方式将多个纹理传递给着色器? 我应该如何跟踪人脸以呈现正确的纹理? 搜索我发现两次定义顶点可能很有用,但我不知道为什