- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个由顶点数组绘制的 3D 立方体 -
public void init(GLAutoDrawable drawable) {
...
float[] cubeVertices = {...}; // vertex coordinates (x,y,z)
FloatBuffer tmpVerticesBuf = BufferUtil
.newFloatBuffer(cubeVertices.length);
for (int i = 0; i < cubeVertices.length; i++) {
tmpVerticesBuf.put(cubeVertices[i]);
}
tmpVerticesBuf.rewind();
gl.glEnableClientState(GL.GL_VERTEX_ARRAY);
gl.glVertexPointer(3, GL.GL_FLOAT, 0, tmpVerticesBuf);
}
public void display(GLAutoDrawable drawable) {
...
gl.glDrawArrays(GL.GL_QUADS, 0, 24);
...
}
现在我想在这个立方体的面上设置一个纹理图片,使其与所有立方体的面具有相同的纹理。到目前为止我在 init()
-
public void init(GLAutoDrawable drawable) {
...
try {
// retrieve the image .
BufferedImage image = ImageIO.read(getClass().getClassLoader()
.getResource("floor.jpg"));
DataBufferByte dbb = (DataBufferByte) image.getRaster()
.getDataBuffer();
byte[] data = dbb.getData();
ByteBuffer pixels = BufferUtil.newByteBuffer(data.length);
pixels.put(data);
pixels.flip();
} catch (GLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
m_textutureIntBuf = IntBuffer.allocate(1); // m_textutureIntBuf type IntBuffer
gl.glGenTextures(1, m_textutureIntBuf);
gl.glBindTexture(GL.GL_TEXTURE_2D, m_textutureIntBuf.get(0));
gl.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_RGB, 256, 256, 0, GL.GL_RGB,
GL.GL_UNSIGNED_BYTE, m_pixels);
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER,
GL.GL_LINEAR);
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER,
GL.GL_NEAREST);
gl.glEnable(GL.GL_TEXTURE_2D);
}
我现在必须对 gl.glTexCoordPointer()
gl.glEnableClientState()
做什么才能获得我之前提到的有关纹理的内容?
最佳答案
那么您还需要为纹理坐标
创建一个数组。
在“...数据...”处,您需要添加 U、V 坐标。所有顶点都有一个 U、V 坐标。因此,tex_coord_size
基本上是 2 * vertices_count
。
int tex_coord_size = x; // Whatever size you want according to your `Vertices`
FloatBuffer tex_coord_data = BufferTools.createFloatBuffer(tex_coord_size);
tex_coord_data.put(new float[] { ... DATA ... });
tex_coord_data.flip();
int vbo_tex_coord_handle = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vbo_tex_coord_handle );
glBufferData(GL_ARRAY_BUFFER, tex_coord_data, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
然后为了渲染,您需要将, 添加到当前的渲染中。
glBindBuffer(GL_ARRAY_BUFFER, vbo_tex_coord_handle);
glTexCoordPointer(tex_coord_size, GL_FLOAT, 0, 0l);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
调用 glDrawArrays 后,当然还需要调用 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
。
关于java - 如何在 glDrawArrays() 绘制的形状上设置纹理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18192004/
我正在处理一个个人 Java OpenGL (JOGL) 项目,我正在使用一些具有独立绘制函数和顶点的自定义对象。 public class Cube extends PhysicalObject {
我正在尝试渲染巨大的点云 (~150M),但 OpenGL 只渲染其中的一部分 (~52M)。渲染较小的数据集(glMapBufferRange,这可能会解决 4GB 的限制。 要考虑的另一件事是使用
我正在尝试渲染一个可以扩展到其他对象的四面体。 使用静态数组可以很好地绘制四面体。 但是当我将 OFF 文件读入动态数组时,什么也没有出现。编译时没有出现错误。 GLfloat *tetra_vert
我尝试使用 glDrawArray 和 GL_TRIANGLE_STRIP 渲染纹理网格,但绘制时存在伪影,但在屏幕上分布不均匀。 Screenshot of the problem. 这是我使用的代
伪代码: void draw() { Vertex* vertices = scene.GetVertexArray(); glEnableClientState(...);
我有一个未声明顶点属性的顶点着色器。它根据 UBO、gl_VertexId 和 gl_InstanceID 计算所有需要的值。 我know必须绑定(bind)非零 VAO 才能渲染。 那么,在当前 V
我正在关注一些初学者 OpenGL 教程,并且对这段代码有点困惑: glBindBuffer(GL_ARRAY_BUFFER, vertexBufferObject); //Bind GL_ARRAY
我正在尝试在 glDrawArray 上修改程序。如果我只使用glVertex3f一切都很好,如果我使用glDrawArrays`作为相同的顶点值,除了图形之外,我还会得到一些随机线。 与glDraw
我在 python3 中有这段代码,它不能在 Windows 机器上运行,但可以在 Linux 机器上运行。我绘制了一个绿色屏幕和一个红色三角形,但红色三角形仅在我退出时出现。 import pyga
我正在尝试遵循 [this][1] 简单教程,但在到达“glDrawArrays”时出现以下错误: openGLTest.exe 中 0x03D7598E (nvoglv32.dll) 处的未处理异常
我正在使用以下代码在某些指定坐标处绘制一条绿线 GLfloat colors[] = {0,1,0,1, 0,1,0,0.5}; CGPoint v[] = {{p1.x, p1.y},
我使用 vector 来存储顶点和法线数据 vector vertex; vector normal; 例如: normal.push_back(-1); normal.push_back(0); n
我正在尝试做一个简单的 Pong 游戏,但我遇到了一些问题。本质上,我有一个由四个点组成的数组,x 和 y 值表示一个硬编码的球,我需要让那个球正确显示。当我尝试使用 glDrawArray 时,我一
我最近发现 glDrawArrays 在每一帧上分配和释放大量内存。我怀疑它与 openGL 探查器报告的“Shaders compiled outside initialization”问题有关。这
当我尝试使用 glDrawArrays 绘制圆时,它显示四分之一 circle 由代码生成的 VBO 是正确的。顺便说一句,没有 0,0,0 这样的坐标。它似乎只绘制正顶点,但如果我将顶点乘以 -1
我在 openGL 的固定流水线上花了很多时间,最近开始学习可编程流水线。我认识我的画家,着色器类不是问题,因为它们使用固定功能管道的东西。我似乎无法让 glDrawArrays 为我的生活工作。 我
在循环遍历我想在 3D 引擎中渲染的所有对象时,尝试调用时出现错误 glDrawArrays(mesh->primitiveType, 0, mesh->vertexCount); 因为它试图从位置
好的,所以我仍在努力让它发挥作用。我的代码的重要部分是: def __init__(self, vertices, normals, triangles): self.bufferVertic
在通过 lwjgl 学习如何使用 OpenGL 3.2 时,我遵循了 here 上的教程.我一直在方法调用 glDrawArrays 上收到无效操作错误。如果我从教程中复制源代码,甚至会发生此错误。
我有一堆要绘制的多边形数据。我提取了那个绘图代码,现在它看起来像这样 for (int Index = 0; Index < Count; Index++) { glDrawArrays(GL
我是一名优秀的程序员,十分优秀!