为什么浮点数是 "unexpected type"
Why is a float an "unexpected type"
我刚开始使用 OpenGL。我在 Visual Studio C++ 社区(运行 on Windows 10)中安装了 GLEW 和 GLFW 库。然后我按照教程进行操作,能够在 window 上绘制一个矩形。我继续按照教程进行操作,直到到达您要添加的部分:
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();
即使在我添加之后,四边形仍在绘制中。在视频中,导师的矩形对于 window 来说太小了,但在我的机器上一切正常,矩形的大小与添加这些行之前的大小相同(即使我的数组使用小数)。
我开始寻找可以 "invalidate" 这些线条的东西。过了一会儿我不理他们了。
但是在我删除它们并尝试创建另一个四边形之后,编译器说浮点数是函数 glVertexPointer 上的 "unexpected type"。
image
我该如何解决这个问题?
这是源代码:
#include <GL\glew.h>
#include <GLFW\glfw3.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();
};
float
是表示类型的保留字,不能作为参数传递。你需要 GL_FLOAT
来代替。参见 https://www.opengl.org/sdk/docs/man2/xhtml/glVertexPointer.xml
看起来它所抱怨的行是:
glVertexPointer(3, float, 0, vertices);
我想你的意思是:
glVertexPointer(3, GL_FLOAT, 0, vertices);
这里的区别在于float
是一个类型,而GL_FLOAT
是一个值。您不能将类型作为参数传递给函数。第二个参数必须是 GLenum
.
类型
这里有更多信息:glVertexPointer
我刚开始使用 OpenGL。我在 Visual Studio C++ 社区(运行 on Windows 10)中安装了 GLEW 和 GLFW 库。然后我按照教程进行操作,能够在 window 上绘制一个矩形。我继续按照教程进行操作,直到到达您要添加的部分:
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();
即使在我添加之后,四边形仍在绘制中。在视频中,导师的矩形对于 window 来说太小了,但在我的机器上一切正常,矩形的大小与添加这些行之前的大小相同(即使我的数组使用小数)。 我开始寻找可以 "invalidate" 这些线条的东西。过了一会儿我不理他们了。
但是在我删除它们并尝试创建另一个四边形之后,编译器说浮点数是函数 glVertexPointer 上的 "unexpected type"。 image
我该如何解决这个问题? 这是源代码:
#include <GL\glew.h>
#include <GLFW\glfw3.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();
};
float
是表示类型的保留字,不能作为参数传递。你需要 GL_FLOAT
来代替。参见 https://www.opengl.org/sdk/docs/man2/xhtml/glVertexPointer.xml
看起来它所抱怨的行是:
glVertexPointer(3, float, 0, vertices);
我想你的意思是:
glVertexPointer(3, GL_FLOAT, 0, vertices);
这里的区别在于float
是一个类型,而GL_FLOAT
是一个值。您不能将类型作为参数传递给函数。第二个参数必须是 GLenum
.
这里有更多信息:glVertexPointer