gpt4 book ai didi

java - JOGL 中的交错数据

转载 作者:行者123 更新时间:2023-12-04 04:42:39 29 4
gpt4 key购买 nike

我找不到有关在 JOGL 中呈现交错顶点数组(不是 VBO)的正确方法的任何信息。具体来说,使用 glVertexAttribPointer() 似乎不允许指定交错数据(FloatBuffer)内的偏移量。在 C、C++ 或 Objective-C 中,我确切地知道如何做到这一点,但在 Java 中似乎没有明确的胜利之路。

我尝试过的唯一看起来可能有效的方法是在使用 glVertexAttribPointer() 之前设置缓冲区的位置,但这没有效果。

为了清楚起见,这里是渲染函数中的代码示例:

gl.glEnableVertexAttribArray( POSITION_ATTRIB );
gl.glEnableVertexAttribArray( NORMAL_ATTRIB );
gl.glVertexAttribPointer( POSITION_ATTRIB, 4, GL.GL_FLOAT, false, 32, vertexBuffer );
// vertexBuffer.position( 4 ); if I try to specify an offset
gl.glVertexAttribPointer( NORMAL_ATTRIB, 4, GL.GL_FLOAT, false, 32, vertexBuffer );
gl.glDrawArrays( GL.GL_TRIANGLES, 0, nummy );
gl.glDisableVertexAttribArray( NORMAL_ATTRIB );
gl.glDisableVertexAttribArray( POSITION_ATTRIB );

我为我拥有的每个属性使用 4 个浮点数。我选择了基于 32 的步幅

每个浮点数 4 个字节 * 每个属性 4 个浮点数 * 每个顶点 2 个属性。

最佳答案

我怀疑设置 FloatBuffer 的位置没有给您想要的行为的原因是因为您通过引用传递了 FloatBuffer。您可能想要创建另一个 FloatBuffer,它基本上只是相同数据的不同 View (例如,包装一个 float [])并将另一个 FloatBuffer 中的位置设置为 4...

例如:

// Somewhere in your class
private float [] verts;


// You can fill this with actual data yourself, I did the hard part :P
verts = new float [] { 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f,
0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f,
0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f,
0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f };
// ^^^^^^^^^ POS ^^^^^^^^ ^^^^^^^ NORMAL ^^^^^^^

//
// When it comes time to supply the vertex pointers, use this:
//
FloatBuffer vtx_base = FloatBuffer.wrap (verts);
FloatBuffer norm_base = FloatBuffer.wrap (verts, 4, verts.length () - 4);

gl.glVertexAttribPointer (POSITION_ATTRIB, 4, GL.GL_FLOAT, false, 32, vtx_base);
gl.glVertexAttribPointer (NORMAL_ATTRIB, 4, GL.GL_FLOAT, false, 32, norm_base);

免责声明:我多年没有使用 Java,所以不要指望它可以开箱即用。基本理论应该是合理的。

不过,我确实想知道您是否真的需要 4D 顶点位置和法线? w 有非常实际的用途,但如果您实际上并不需要它,请节省一些存储空间/带宽并使用 3D。我提出这一点是因为当你使用客户端内存而不是 VBO 时,会有更多的 CPU->GPU 内存传输正在进行,并且每一点大小减少都会有所帮助。

关于java - JOGL 中的交错数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18667789/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com