我正在尝试构建-0.5 代码在这里:
https://github.com/abhimittal664/opengl 我不确定,但这是否可以归因于MVP矩阵?我尝试对它们进行实验,但没有用。 请注意,是否有某种方法可以调试着色器文件中的问题?我正在英特尔集成显卡上使用Visual Studio 2017。看起来Visual Studio图形调试器仅适用于DirectX。目前,我只是想通过输出具有不同颜色的点来进行调试以获取视觉提示。 谢谢 编辑1:
y = x函数位于顶点着色器中。顶点缓冲区只有x个值,y,z = 0。
答案 0 :(得分:1)
从指向您的代码的链接中提取:
//Vertex buffer definition
struct vertex {
glm::vec3 position;
glm::vec3 color;
};
和
void populate_vertex_buffer(vertex* vertices, int n_vertices) {
...
for (int x = 0; x < n_vertices; x++) {
count = -0.5f + (1.f / n_vertices)*(float)x;
vertices[x].position = glm::vec3((-0.5f + (1.f / n_vertices)*(float)x), 0, 0);
vertices[x].color = glm::vec3(0.0, 0.0, 0.0);
...
所以缓冲区中的数据是XYZRGBXYZRGBXYZRGB ...... Y,Z,R,G,B全部为0)
您告诉驱动程序如何读取此缓冲区:
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
...
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL);
glEnableVertexAttribArray(0);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)offsetof(vertex, color));
请注意第二个glVertexAttribPointer
。它表明第二个属性(VS中的vc
)从位置offsetof(vertex, color)
开始,然后每种颜色都与上一个相邻(第五个参数= 0)。这对于像XYZXYZXYZ ...... RGBRGBRGBRGB ...这样的缓冲区数据很有用。
我认为阅读说明会
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6*sizeof(float), NULL);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6*sizeof(float), 3*sizeof(float);
其中6
来自两个相同属性之间的六个值XYZRGB。