为什么浮点数是"unexpected type"

Why is a float an "unexpected type"

本文关键字:unexpected type 浮点数 为什么      更新时间:2023-10-16

我从OpenGL开始。我在Visual Studio C++社区(在Windows 10上运行)中安装了GLEW和GLFW库。然后我学习了一个教程,能够在窗户上画一个矩形。我继续遵循教程,直到我到达了你要添加的部分:

glViewport(0.0f, 0.0f, SCREEN_WIDTH, SCREEN_HEIGHT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, SCREEN_WIDTH, 0, SCREEN_HEIGHT, 0, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();               

即使在我添加了这些之后,四边形仍然在绘制中。在视频中,导师的矩形对于窗口来说太小了,但在我的机器上一切都很好,矩形的大小与添加这些行之前的大小相同(尽管我的数组使用了小数)。我开始寻找能使这些线条"失效"的东西。过了一会儿我就不理他们了。

但在我删除了它们并试图创建另一个quad之后,编译器说float是函数glVertexPointer上的"意外类型"。图像

我该如何解决这个问题?这是源代码:

#include <GLglew.h>
#include <GLFWglfw3.h>
#include <iostream>
#include <math.h>
#define SCREEN_WIDTH 640
#define SCREEN_HEIGHT 480

int main(void) {
GLFWwindow *window;

if (!glfwInit()) {
    return -1;
};

window = glfwCreateWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "OGL", NULL, NULL);
if (!window) {
    glfwTerminate();
    return -1;
};
glfwMakeContextCurrent(window);
float vertices[] = {
    -0.5, 0.5, 0.0,
    0.5, 0.5, 0.0,
    -0.5, -0.5, 0.0,
    0.5, -0.5, 0.0
};
while (!glfwWindowShouldClose(window)) {
    glClear(GL_COLOR_BUFFER_BIT);
    glEnableClientState(GL_VERTEX_ARRAY);
    glVertexPointer(3, float, 0, vertices);
    glDrawArrays(GL_QUADS, 0, 4);
    glDisableClientState(GL_VERTEX_ARRAY);

    glfwSwapBuffers(window);
    glfwPollEvents();
}
glfwTerminate();
};

看起来它抱怨的行是:

glVertexPointer(3, float, 0, vertices);

我想你的意思是:

glVertexPointer(3, GL_FLOAT, 0, vertices);

这里的区别在于float是一种类型,而GL_FLOAT是一个值。不能将类型作为参数传递给函数。第二个参数必须是GLenum类型。

更多信息请点击此处:glVertexPointer

float是一个表示类型的保留字,不能作为参数传递。您需要GL_FLOAT。看见https://www.opengl.org/sdk/docs/man2/xhtml/glVertexPointer.xml