NeHe OpenGL lession 2

#include <GLUT/GLUT.h>
#include <OpenGL/OpenGL.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h> // Header file for sleeping

/* ASCII code for the escape key. */
#define  ESCAPE 27

/* The number of our GLUT window */
int window;

/* A general OpenGL initialization function. Sets all of the initial parameters. */
/* We call this right after our OpenGL window is created. */
void initGL(int width, int height)
{
	glClearColor(0.0f, 0.0f, 0.0f, 0.0f);	// This will clear the background oclor to black
	glClearDepth(1.0); 			// Enable clearing of the depth buffer
	glDepthFunc(GL_LESS); 		// The type depth test to do
	glEnable(GL_DEPTH_TEST); 	// Enables depth testing
	glShadeModel(GL_SMOOTH); 	// Enables smooth color shading

	glMatrixMode(GL_PROJECTION);
	glLoadIdentity(); 			// Reset the projection matrix

	// Calculate the aspect ratio of the window
	gluPerspective(45.0f, (GLfloat)width/ (GLfloat)height, 0.1f, 100.0f);

	glMatrixMode(GL_MODELVIEW);
}

/* The function called when our window is resized (which shouldn't happend,
   because we're fullscreen) */
void resizeGLScene(int width, int height)
{
	if (height == 0) // Prevent A devide by zero if the window is too small
		height = 1;

	glViewport(0, 0, width, height); // Reset teh current viewport and perspective transformation

	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();

	gluPerspective(45.0f, (GLfloat)width / (GLfloat)height, 0.1f, 100.0f);
	glMatrixMode(GL_MODELVIEW);
}

/* The main drawing function. */
void drawGLScene()
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear the screen and the depth.
	glLoadIdentity(); 		// Reset the view

	glTranslatef(-1.5f, 0.0f, -6.0f); 	// Move left 1.5 units and into the screen 6.0

	// Draw a triangle
	glBegin(GL_POLYGON);
		glVertex3f( 0.0f,  1.0f, 0.0f); // Top
		glVertex3f( 1.0f, -1.0f, 0.0f); // Bottom Right
		glVertex3f(-1.0f, -1.0f, 0.0f); // Bottom Left
	glEnd();		// We're doen with the polygon

	glTranslatef(3.0f, 0.0f, 0.0f); // Move Right 3 units (将下面的四边形往右移动)

	// Draw a square (quadrilateral)
	glBegin(GL_QUADS);						// Start drawing a polygon (4 sided)
		glVertex3f(-1.0f,  1.0f, 0.0f);		// top left
		glVertex3f( 1.0f,  1.0f, 0.0f);		// top right
		glVertex3f( 1.0f, -1.0f, 0.0f);		// bottom right
		glVertex3f(-1.0f, -1.0f, 0.0f); 	// Bottom left
	glEnd();								// done with the polygon

	// swap buffers to display, since we're doouble buffered.
	glutSwapBuffers();
}

/* the function claled whever a key is pressed. */
void keyPressed(unsigned char key, int x, int y)
{
	/* avoid thrashing this procedure */
	/* If escape is pressed. kill everything. */
	if (key == ESCAPE) {
		/* shut down our window */
		glutDestroyWindow(window);

		/* exit teh program ... normal termination. */
		exit(0);
	}
}

int main(int argc, char **argv)
{
	glutInit(&argc, argv); 

	/* Select type of Display mode:
		Double buffer
		RGBA color
		Alpha components supported
		Depth buffer */
	glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH);

	/* get a 640 x 480 window */
	glutInitWindowSize(640, 480);

	/* the window starts at the upper left corner of teh screen */
	glutInitWindowPosition(0, 0);

	/* Open a window */
	window = glutCreateWindow("Jeff Molefee's GL Code Tutorial .. NeHe '99");

	/* Register the function to do all our OpenGL drwing. */
	glutDisplayFunc(&drawGLScene);

	/* GO fullscreen. This is the soonest we could possibly go fullscreen. */
	// glutFullScreen();

	/* Even if there are no events, redraw our gl scene. */
	glutIdleFunc(&drawGLScene);

	/* Register the function called when our window is resized. */
	glutReshapeFunc(&resizeGLScene);

	/* Register teh function claled when the keyboard is pressed. */
	glutKeyboardFunc(&keyPressed);

	/* Initialzie our window */
	initGL(640, 480);

	/* Start event processing engine */
	glutMainLoop();

	return 0;
}
</pre><pre name="code" class="cpp">Mac OS X 运行命令:

<span style="background-color: rgb(51, 51, 255);"> clang -o lession lession2.c -Wno-deprecated -framework OpenGL -framework GLUT</span><pre name="code" class="cpp"> ./lession
				
时间: 2024-08-26 20:23:54

NeHe OpenGL lession 2的相关文章

neHe OpenGL lession 5

lession 5 3D // lession 5 3D #include <OpenGL/OpenGL.h> #include <GLUT/GLUT.h> #include <stdio.h> #include <stdlib.h> #include <stdio.h> float rtri; // angle for the triangel float rquad; // angle for the quad void initGL(voi

neHe OpenGL lession 3

#include <GLUT/GLUT.h> #include <OpenGL/OpenGL.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> /* ASCII code for the escape key. */ #define ESCAPE 27 /* The number of our GLUT window */ int window; /* A general

neHe OpenGL lession 6

加载纹理 // lession6 // Mac OS X / Linux // linux <GL/glut.h> <GL/gl.h> <GL/glu.h> #include <OpenGL/OpenGL.h> #include <GLUT/GLUT.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> /* ascii code for t

NeHe OpenGL lession 4

// lession4.c #include <OpenGL/OpenGL.h> #include <GLUT/GLUT.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> /* ASCII code for teh escape key. */ #define ESCAPE 27 /* The number of our GLUT window */ int window;

NeHe OpenGL lesson 7

HeHe OpenGL 第七节,纹理部分,光照初步.由于Mac 上面没有Page键,所以用G . H键替换 // NeHe OpenGL lession 7 // Texture Filters, Lighting & keyboard Control // /** * Linux * #include <GL/glut.h> * #include <GL/gl.h> * #include <GL/glu.h> */ #include <GLUT/GLUT

NeHe OpenGL教程 第三十八课:资源文件

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第三十八课:资源文件 从资源文件中载入图像: 如何把图像数据保存到*.exe程序中,使用Windows的资源文件吧,它既简单又实用. 欢迎来到NeHe教程第38课.离上节课的写作已经有些时日了,加上写了一整天的code,也许笔头已经

NeHe OpenGL教程 第四十七课:CG顶点脚本

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第四十七课:CG顶点脚本 CG 顶点脚本 nVidio的面向GPU的C语言,如果你相信它就好好学学吧,同样这里也只是个入门.记住,类似的语言还有微软的HLSL,OpenGL的GLSL,ATI的shaderMonker.不要选错哦:)

NeHe OpenGL教程 第二十三课:球面映射

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第二十三课:球面映射 球面映射: 这一个将教会你如何把环境纹理包裹在你的3D模型上,让它看起来象反射了周围的场景一样. 球体环境映射是一个创建快速金属反射效果的方法,但它并不像真实世界里那么精确!我们从18课的代码开始来创建这个教程

NeHe OpenGL教程 第三十五课:播放AVI

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第三十五课:播放AVI 在OpenGL中播放AVI: 在OpenGL中如何播放AVI呢?利用Windows的API把每一帧作为纹理绑定到OpenGL中,虽然很慢,但它的效果不错.你可以试试. 首先我得说我非常喜欢这一章节.Jonat