首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >glVertexAttribPointer:正在绘制的法线而不是顶点

glVertexAttribPointer:正在绘制的法线而不是顶点
EN

Stack Overflow用户
提问于 2014-02-21 22:19:53
回答 1查看 1.3K关注 0票数 1

我有一个顶点数据类型,包括位置(3),纹理(2)和顶点法线(3)。我正在使用顶点着色机将这些信息传递给glVertexAttribPointer (参见这里)。

不幸的是,不管我加载了什么模型,它给了我死亡之星-基本上是一个顶点的球体,只有当我切换到线框渲染时才能看到。

我试着从我的模块中删除一些顶点,最终得到了一颗部分构建的死亡之星。在这一点上,很明显,它在绘制法线,就好像它们是顶点一样。我根本不知道这些顶点是被绘制出来的。

我用画两个额外的三角形证实了我的假设--一个用来表示顶点应该在哪里,另一个用来表示法线。我还将它们缩放了1.1,这样它们就可以与对象本身区分开来。是的,它绝对是绘制法线而不是顶点。

有人知道为什么吗?我尝试过改变着色器中属性的顺序,但这并没有帮助(奇怪的是)。

以下是完整的最低工作示例连同两个测试对象(complete,n20r4_d5.obj;和very,test11.obj)一起使用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-21 22:25:37

您使用的是OpenGL 2.1,因此必须使用glGetAttribLocation()提取属性索引。您不能只希望GLSL编译器在0上放置顶点,在2上放置文本和弦

代码语言:javascript
复制
void render(Shader* shader_program = NULL) 
{
    if (shader_program) 
        shader_program->bind();

    GLint position_loc = glGetAttribLocation( shader_program->id(), "position" );
    GLint tex_loc = glGetAttribLocation( shader_program->id(), "tex" );
    GLint normal_loc = glGetAttribLocation( shader_program->id(), "normal" );

    glEnableVertexAttribArray( position_loc );
    glEnableVertexAttribArray( normal_loc );
    glEnableVertexAttribArray( tex_loc );

    for (size_t i = 0; i < entries.size(); ++i) 
    {
        glBindBuffer(GL_ARRAY_BUFFER, entries[i].vb);

        // I think this tells it where to look for the vertex information we've loaded.
        glVertexAttribPointer(position_loc, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), 0);
        glVertexAttribPointer(normal_loc, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (const GLvoid*)12); // starts at 12 because 3 floats for position before 2 floats for normal
        glVertexAttribPointer(tex_loc, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (const GLvoid*)20); // makes room for 5 floats
        ...

你也可以告诉OpenGL在链接你的着色器之前把它们(glBindAttribLocation())放在哪里,但是你设置东西的方式会让它变得有点混乱。

在OpenGL 3.1+中,您可以强制编译器通过限定符将属性放在特定的索引上。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21946372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档