java - 在 OpenGL 中加载 UDEC3 或 DEC3N 数据类型

标签 java opengl graphics jogl

我正在尝试加载围绕 Direct3D 9 设计的模型格式。几何数据存储在缓冲区中,元素的位置和数据类型存储在 D3DVERTEXELEMENT9 struct 中。 。不过,我在读取 UDEC3 和 DEC3N 数据类型时遇到问题。

现在,根据研究,数据类型 GL_UNSIGNED_INT_10_10_10_2 和 GL_INT_10_10_10_2 似乎与此相对应,但是无论我使用什么配置文件,我都会不断收到“无效枚举”。获取扩展“GL_OES_vertex_type_10_10_10_2”返回 false。然而 GL_INT_2_10_10_10_REV 确实有效并且在 OpenGL wiki 中他们提到使用它来代替 GL_BGRA 作为大小值。遗憾的是 GL_BGRA 会导致访问冲突(尽管大小 4 不会)。

加载这些数据类型的正确方法是什么?

已编辑

设置方法如下:

DX9VertexElement element;

int components = GLHelper.getComponents(element.datatype); //Gets size of DX9 datatype (1, 2,3, etc). Basically a switch that returns based on element.datatype.
int datatype = GLHelper.getDatatype(element.datatype);
int stride = 0;

//Set offset and size of buffer
ByteBuffer origin = mesh.vertBuffer.duplicate();    
if (element.stream == 0)            
{
    origin.position(element.offset);
    stride = mesh.vertexSize;
}
else        
{
    origin.position(mesh.numVerts*mesh.vertexSize + element.offset);
    stride = mesh.auxVertexSize;
}

switch (element.usage){ //Cut out all the other ones to shrink this
    case 4://Tex Coord
        gl.glVertexAttribPointer(shader.getAttribTexCoord(), components, datatype, true, stride, origin);
}

在这种情况下,变量组件将为 GL_BGRA,变量数据类型将为“GL_INT_2_10_10_10_REV”(或无符号版本)。

最佳答案

您实际使用什么平台?

GL_OES_...仅当您运行 OpenGL ES 时才会存在。此外,您提到的扩展不提供该枚举。它提供了类似的东西,称为 GL_UNSIGNED_INT_10_10_10_2_OES (0x8DF6)。然而,这与桌面 OpenGL GL_UNSIGNED_INT_10_10_10_2{_EXT} 中的等效数据类型不同。 (0x8036) - 由 GL_EXT_packed_pixels 提供以及 GL 1.2+ 的核心。

反向格式由 GL_ARB_vertex_type_2_10_10_10_rev 提供以及 GL 3.3+ 和 ES 3.0+ 的核心。扩展规范声明如下:

Dependencies with GL_EXT_vertex_array_bgra

If GL_EXT_vertex_array_bgra is not supported, remove references to GL_BGRA as an allowed parameter for <size> in glVertexAttrib.

如果您得到无效的枚举,可能是因为您混淆了 OpenGL 的两个不同的 API。

关于java - 在 OpenGL 中加载 UDEC3 或 DEC3N 数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29050778/

相关文章:

java - 如何找出哪个线程在java中锁定文件?

java - 正则表达式模式 : split() vs find()

c - GLUT 无法正确检测到超过 2 个按键?

java - 是否可以将 JComponent 及其所有子组件绘制到另一个组件?

java - 如何在java图形上使用 boolean 值使砖 block 消失?

c# - 保留笔的大小?

java - 在LWJGL 3中渲染透视投影矩阵

java - Selenium CSS 选择器语法用于检查类和文本

opengl - 如何使opengl mipmap更清晰?

C++ Opengl,Win内存泄漏