c++ - 如何在 GLSL 中使用 4x4 矩阵作为顶点属性?

标签 c++ opengl glsl vertex-shader

我正在尝试使用 4x4 矩阵作为顶点属性,使用以下代码:

Mat4 matrices[numVerts];

int mtxBoneID = glGetAttribLocation(hProgram, "aMtxBone");

glEnableVertexAttribArray(mtxBoneID + 0);
glEnableVertexAttribArray(mtxBoneID + 1);
glEnableVertexAttribArray(mtxBoneID + 2);
glEnableVertexAttribArray(mtxBoneID + 3);
glVertexAttribPointer(mtxBoneID + 0, 4, GL_FLOAT, GL_FALSE, sizeof(Mat4), ((Vec4*)matrices) + 0);
glVertexAttribPointer(mtxBoneID + 1, 4, GL_FLOAT, GL_FALSE, sizeof(Mat4), ((Vec4*)matrices) + 1);
glVertexAttribPointer(mtxBoneID + 2, 4, GL_FLOAT, GL_FALSE, sizeof(Mat4), ((Vec4*)matrices) + 2);
glVertexAttribPointer(mtxBoneID + 3, 4, GL_FLOAT, GL_FALSE, sizeof(Mat4), ((Vec4*)matrices) + 3);

// shader:
// ...
attribute mat4 aMtxBone;
// ...

但我在屏幕上看到的都是垃圾。

最佳答案

因此,由于不明原因,我的回答被删除了。

我又来了,这次我将采用不同的格式。

我遇到了与问题完全相同的问题,东西会被画得一团糟。至少这是描述。

为我解决问题的是调用

glDrawElementsInstancedBaseVertex(GL_TRIANGLES,
                                    d->drawCount,
                                    GL_UNSIGNED_INT,
                                    0,
                                    p_objects.size(),
                                    0);

为了画我的东西,仅此而已。

然而!

如果您的内容绘制不正确,这可能不是您遇到的唯一问题。你需要纠正它的整个 list 是巨大的。所以我要在这里放一个链接,其中有一个关于如何绘制很多东西的很棒的教程。另外,您可以获取源代码并自行尝试。

http://ogldev.atspace.co.uk/www/tutorial33/tutorial33.html

来源:http://ogldev.atspace.co.uk/ogldev-source.zip

再次给我投反对票并删除我的答案,它的内容与原来的完全没有变化。

禁止我访问网站,这是你的损失。

关于c++ - 如何在 GLSL 中使用 4x4 矩阵作为顶点属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12792448/

相关文章:

c++ - 我应该如何进行深度独立混合?

java - 使用 LWJGL 链接和编译 OpenGL 3.3 和 2.1 的着色器

c++ - OpenGL 4.3 上的 ETC2 纹理压缩的视频内存

c++ - C/C++ 中整数类型别名的标准保证?例如。 : Is "unsigned" always equal to "unsigned int"?

c++ - 为什么这段代码会泄露?

c++ - 这段代码是未定义的,为什么会运行?我怎么让它崩溃?

glsl - WebGL 片段着色器可以有多大?

c++ - 使用 'pointer' 和结构调用 DLL (C++ -> VB.NET)

python - Pyopengl - 从 VBO 绘制的几条线但是索引颜色 VBO 不起作用

c++ - 对数深度缓冲区 OpenGL