当前位置: 首页 > 知识库问答 >
问题:

如何结合OpenGL使用GLM?

太叔涵亮
2023-03-14

我试图用GLM来渲染一个对象,但是我得到了这个:

编辑:忘记提到我试图渲染的对象是一个简单的环面。

我做了很多调查,注意到glgetUniformLocation(程序,“MVP”)返回-1。文档说,如果着色器中没有使用统一变量,即使声明了它,它也会返回-1。正如你在下面看到的,它已经被声明并且正在顶点着色器中使用。我检查了程序以确保它是有效的,诸如此类。

glBindVertexArray(vao);
glDrawElements(GL_TRIANGLES, elementCount, GL_UNSIGNED_INT, NULL);
void GameObject::render() {
    GLuint program = material->shader->program;
    glUseProgram(program);
    glm::mat4 mvp = Game::camera->mvpMatrix(this->position);

    GLuint mvpLoc = glGetUniformLocation(program, "mvp");
    printf("MVP Location: %d\n", mvpLoc); // prints -1
    glUniformMatrix4fv(mvpLoc, 1, GL_FALSE, &mvp[0][0]);
    for (unsigned int i = 0; i < meshes.size(); i++) {
        meshes.at(i)->render(); // renders element array for each mesh in the GameObject
    }
}

顶点着色器(简单的未点亮的红色):

#version 330 core
layout(location = 0) in vec3 position;
uniform mat4 mvp;

out vec3 vertColor;

void main(void) {
    gl_Position = mvp * vec4(position, 1);
    vertColor = vec3(1, 0, 0);
}

片段着色器:

#version 330 core
in vec3 vertColor;
out vec3 color;

void main(void) {
    color = vertColor;
}

共有1个答案

罗诚
2023-03-14

问题1

你自己已经回答了这个问题。GlgetUniformLocation(program,name)获取着色程序程序中统一“MVP”的位置,如果没有声明统一(或者没有使用:如果不使用它,就不会编译它),则返回-1。您的着色器确实声明并使用mvp,这强烈表明编译程序有问题。你确定你在程序中使用这个着色器吗?

问题2

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL);
 类似资料:
  • 在本文档中,你将学习如何使用Cyber​​duck对MinIO进行基本操作。Cyber​​duck是适用于MacOS和Windows的FTP和SFTP,WebDAV,OpenStack Swift和Amazon S3的开源客户端。它是在GPL许可证v2.0下发布的。 1. 前提条件 Cyberduck安装并运行。因为MinIO与Amazon S3兼容,所以你可以从这里下载一个通用的HTTP S3

  • 在本文中,你将学习如何使用Mountain Duck(中文名是山鸭,不是山鸡)在MinIO上进行基本操作。Mountain Duck可让你将服务器和云存储装载为Mac上的Finder.app和Windows上的文件资源管理器中的本地磁盘。它是在GPL许可证v2.0下发布的。 1. 前提条件 Mountain Duck已经安装并运行。 由于MinIO与Amazon S3兼容,请从这里下载一个通用的H

  • 问题内容: 我想编写一个非常简单的Java 3D编辑器(用于实验)。我了解JavaFX的基本用法,并且了解足够的OpenGL知识。但是我所有的OpenGL经验都是来自使用C / C ++。 我可以在JavaFx应用程序中制作“画布”并在其上映射OpenGL视口吗? 问题答案: 在内部,JavaFX可以将OpenGL用作渲染管道,因此需要在两者之间进行一些集成以避免冲突。 JavaFX中的OpenG

  • 问题内容: 我正在尝试开发一个JMS 独立应用程序 来读写MQSeries上的Queue。我的老板要求我使用 纯Java JMS (而不是ibm.mq lib)来执行此操作。 这是建立jms连接所需的信息: 您知道该怎么做?还是您有任何链接教我做到这一点。 问题答案: 这里的问题是“我的老板要求我使用纯Java JMS(不是ibm.mq lib)来做到这一点”的要求。JMS是一个规范,每个实现都必

  • 问题内容: 我正在尝试使用node.js制作Samsung Smart TV应用程序。 在我的项目中,我想使我的应用程序与服务器PC通信。 根据许多网站,我可以使用“ jsonp”来做到这一点。 这是我发现的客户端代码。 而且,这是我发现的服务器端代码。 这些代码在我的PC(服务器PC)上正常工作,但是当我在其他计算机上打开客户端页面时,它不起作用。 控制台只给我这个日志: 我想使用jsonp处理

  • 我想用Netty ChannelHandler用Gzip压缩和解压,我试了一段时间,但总是有点困难。我的代码如下: 有什么问题吗?