在学习tGitHub tinyRender时,最后一个chapter用到了openngl,把代码直接拷贝到vs2015中,发现很多红色波浪线,报错,主要是opengl环境配置的问题。
折腾了一个小时,最后才发现用VS自带的NuGet程序包很容易搞定!在菜单中的项目下能找到NuGet,如下图所示。
源代码里面include了下面两个头文件
#include <GL/glu.h>
#include <GL/glut.h>
其中glut.h画红色波浪线,因此在NuGet中搜索glut.h,如下图所示,安装前两个文件,后来发现安装后面的freeglut也行,但是include的文件名需要改一下。
安装完成后,需要把#include <GL/glu.h>去掉,只需要包含glut.h就够了,否则glClear等函数会报错:未定义标识符!
源代码如下:
//#include <GL/glu.h>
#include <GL/glut.h>
//#include <GL\freeglut.h>
#include <vector>
#include <cmath>
const int SCREEN_WIDTH = 1024;
const int SCREEN_HEIGHT = 1024;
const float camera[] = { .6,0,1 };
const float light0_position[4] = { 1,1,1,0 };
void render_scene(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt(camera[0], camera[1], camera[2], 0, 0, 0, 0, 1, 0);
glColor3f(.8, 0., 0.);
glutSolidTeapot(.7);
glutSwapBuffers();
}
void process_keys(unsigned char key, int x, int y) {
if (27 == key) {
exit(0);
}
}
void change_size(int w, int h) {
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glViewport(0, 0, w, h);
glOrtho(-1, 1, -1, 1, -1, 8);
glMatrixMode(GL_MODELVIEW);
}
int main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowPosition(100, 100);
glutInitWindowSize(SCREEN_WIDTH, SCREEN_HEIGHT);
glutCreateWindow("GLSL tutorial");
glClearColor(0.0, 0.0, 1.0, 1.0);
glutDisplayFunc(render_scene);
glutReshapeFunc(change_size);
glutKeyboardFunc(process_keys);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glLightfv(GL_LIGHT0, GL_POSITION, light0_position);
glutMainLoop();
return 0;
}
运行结果如下: