我正在为大学做一些OpenGL / C工作(我在WebGL方面有经验)。下面的代码主要基于gltut教程(不能在OSX上运行 - 需要OGL 3.3)和NeHe教程。我的问题是,无论如何,唯一绘制的是初始窗口填充任何一种颜色(更改while循环中的颜色,因此循环正常运行)。然而,三角形和四边形根本不出现。我在过去的5个小时里一直在对它进行故障排除,而且当我开始时我就没有了。任何帮助将不胜感激!
使用:OpenGL3.2,最新的GLFW(2.7.7)
使用编译: gcc main.c -I / usr / local / include -I / opt / X11 / include -L / usr / local / lib -I / opt / X11 / lib -w -framework OpenGL -framework Cocoa -framework IOKit -lglfw -o test
以下评论中的代码有效。
答案 0 :(得分:2)
您似乎没有初始化您的矩阵 - 无论是投影还是模型视图。
即使默认矩阵是偶然的,对你的目的来说是合理的,你也会继续应用翻译,这很快就会导致事情出现在屏幕外。
答案 1 :(得分:0)
下面的固定代码(3.2 OGL上下文位被注释,因为它们不起作用 - 如上所述的空白屏幕):
//c-libs
#include <stdlib.h>
//opengl
#include <OpenGL/gl3.h>
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
//glfw
#define GLFW_INCLUDE_GL3 /* don't drag in legacy GL headers. */
#define GLFW_NO_GLU /* don't drag in the old GLU lib - unless you must. */
#include <GL/glfw.h>
int init() {
//init glfw
if( !glfwInit() )
return -1;
//DOES NOT WORK
//set to version 3.2 & use core profile
//glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3);
//glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2);
//glfwOpenWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
//glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
/* Create a windowed mode window and its OpenGL context */
if (!glfwOpenWindow(1000, 500, 5, 6, 5, 0, 0, 0, GLFW_WINDOW))
return -1;
glfwSetWindowTitle( "My Amazing Super Fantastic Window" );
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
float aspect_ratio = ((float)1000) / 500;
glFrustum(.5, -.5, -.5 * aspect_ratio, .5 * aspect_ratio, 1, 50);
glMatrixMode(GL_MODELVIEW);
return 1;
}
int main(int argc, char *argv[])
{
if( !init() )
return -1;
/* Loop until the user closes the window */
int running = GL_TRUE;
while (1)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// reset view matrix
glLoadIdentity();
// move view back a bit
glTranslatef(0, 0, -30);
// by repeatedly rotating the view matrix during drawing, the
// squares end up in a circle
int i = 0, squares = 15;
float red = 1, blue = 1, green = 1;
for (; i < squares; ++i){
glRotatef(360.0/squares, 0, 0, 1);
glBegin(GL_QUADS); {
glColor3f(red, green, blue);
glVertex2i(1, 11);
glColor3f(red * .8, green * .8, blue * .8);
glVertex2i(-1, 11);
glColor3f(red * .5, green * .5, blue * .5);
glVertex2i(-1, 9);
glColor3f(red * .8, green * .8, blue * .8);
glVertex2i(1, 9);
} glEnd();
}
/* Swap front and back buffers and process events */
glfwSwapBuffers();
}
return 0;
}
答案 2 :(得分:0)
我遇到了同样的问题。我必须在我的VBO之前创建一个VAO,现在它可以在OS X上运行。
GLuint vertex_array;
glGenVertexArrays(1, &vertex_array);
glBindVertexArray(vertex_array);