[英]How to use a 4x4 matrix as a vertex attribute in GLSL?
我正在嘗試使用以下代碼將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;
// ...
但是我在屏幕上看到的只是垃圾。
您可以在着色器使用布局中嘗試類似的操作
layout(location=x) in mat4 <name>;
x不會等於glGetAttribLocation
,您必須自己維護它。它等於調用glVertexAttribPointer
次數。 例
layout(location=0) in vec4 in_Position;
layout(location=1) in vec4 in_Color;
layout(location=2) in vec4 in_Normal;
glVertexAttribPointer(0, xxxxxxxx);
glVertexAttribPointer(1, xxxxxx);
glVertexAttribPointer(2, xxxxxx);
因此,由於未知原因,我的答案被刪除了。
我再次開始,這次我將采用不同的格式。
我遇到的問題與曾經存在的問題完全一樣,東西會被弄得一團糟。 至少那是描述。
對我來說固定的是打電話
glDrawElementsInstancedBaseVertex(GL_TRIANGLES,
d->drawCount,
GL_UNSIGNED_INT,
0,
p_objects.size(),
0);
畫我的東西,僅此而已。
然而!
如果您的物品未正確繪制,則此問題可能不是唯一的問題。 您需要獲得糾正的全部東西的清單是巨大的。 因此,我將在此處放置一個鏈接,其中提供了有關如何繪制大量內容的出色教程。 另外,您可以獲取源代碼並自己嘗試。
http://ogldev.atspace.co.uk/www/tutorial33/tutorial33.html
此處的來源: http : //ogldev.atspace.co.uk/ogldev-source.zip
再次拒絕我投票並刪除我的答案,它的內容完全沒有改變。
禁止我進入網站,您的損失。
首先,您需要為矩陣創建VBO( glGenBuffers
),然后將其綁定( glBindBuffer
)為當前,然后使用
glVertexAttribPointer(mtxBoneID + 0, 4, GL_FLOAT, GL_FALSE, 0, 0);
glVertexAttribPointer(mtxBoneID + 1, 4, GL_FLOAT, GL_FALSE, 0, 4);
glVertexAttribPointer(mtxBoneID + 2, 4, GL_FLOAT, GL_FALSE, 0, 8);
glVertexAttribPointer(mtxBoneID + 3, 4, GL_FLOAT, GL_FALSE, 0, 12);
而不是您的glVertexAttribPointer
調用。
看來您的膠印已關閉。 它應該是
((Vec4*)matrices) + sizeOf(Vec4)*i
代替
((Vec4*)matrices) + i
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.