VC6 下载
http://blog.csdn.net/bcbobo21cn/article/details/44200205

opengl环境配置
http://blog.csdn.net/bcbobo21cn/article/details/51044614#t4

以下的demo工程

http://pan.baidu.com/s/1pLgmScj

一 3D旋转物体

码码:

//在窗口和全屏模式下切换,按ESC退出。#include <Windows.h> //Windows的头文件
#include <gl/glut.h> //包含OpenGL实用库HGLRC hRC=NULL; //窗口着色描述表句柄
HDC hDC=NULL;//OpenGL渲染描述表句柄
HWND hWnd=NULL; //保存窗口句柄
HINSTANCE hInstance; //保存程序实例bool keys[256];//保存键盘按键的数组
bool active=TRUE;//窗口的活动标志,缺省为TRUE
bool fullscreen=TRUE; //全屏标志缺省,缺省设定成全屏模式GLfloat rtri;//用于三角形的角度
GLfloat rquad;//用于四边形的角度LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);//WndProc的定义//重置OpenGL窗口大小
GLvoid ResizeGLScene(GLsizei width,GLsizei height)
{
if (height == 0) //防止被零除
{
height =1;//将height设为1
}glViewport(0,0,width,height);//重置当前的视口
glMatrixMode(GL_PROJECTION);//旋转投影矩阵
glLoadIdentity();//重置投影矩阵//设置视口的大小
gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);glMatrixMode(GL_MODELVIEW);//选择模型观察矩阵
glLoadIdentity();//重置模型观察矩阵
}int InitGL(GLvoid)//对OpenGL进行设置
{
glShadeModel(GL_SMOOTH);//启用阴影平滑
glClearColor(0.0f,0.0f,0.0f,0.0f);//黑色背景
glClearDepth(1.0f);//设置深度缓存
glEnable(GL_DEPTH_TEST);//启用深度测试
glDepthFunc(GL_LEQUAL);//所作深度测试的类型
glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);//告诉系统对透视进行修正return TRUE;
}//进行绘制
int DrawGLScene(GLvoid)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//清除屏幕和深度缓存
glLoadIdentity();//重置当前的模型观察矩阵
glTranslatef(-1.5f,0.0f,-6.0f);//左移1.5单位,并移入屏幕6.0glRotatef(rtri,0.0f,1.0f,0.0f);//绕Y轴旋转金字塔
glBegin(GL_TRIANGLES); //绘制金字塔各面glColor3f(1.0f,0.0f,0.0f);//设置当前色为红色
glVertex3f(0.0f,1.0f,0.0f);//上顶点(前侧面)
glColor3f(0.0f,1.0f,0.0f);//设置当前色为绿色
glVertex3f(-1.0f,-1.0f,1.0f);//左下(前侧面)
glColor3f(0.0f,0.0f,1.0f);//设置当前色为蓝色
glVertex3f(1.0f,-1.0f,1.0f);//右下(前侧面)glColor3f(1.0f,0.0f,0.0f);//设置当前色为红色
glVertex3f(0.0f,1.0f,0.0f);//上顶点(右侧面)
glColor3f(0.0f,1.0f,0.0f);//设置当前色为绿色
glVertex3f(1.0f,-1.0f,1.0f);//左下(右侧面)
glColor3f(0.0f,0.0f,1.0f);//设置当前色为蓝色
glVertex3f(1.0f,-1.0f,-1.0f);//右下(右侧面)glColor3f(1.0f,0.0f,0.0f);//设置当前色为红色
glVertex3f(0.0f,1.0f,0.0f);//上顶点(后侧面)
glColor3f(0.0f,1.0f,0.0f);//设置当前色为绿色
glVertex3f(1.0f,-1.0f,-1.0f);//左下(后侧面)
glColor3f(0.0f,0.0f,1.0f);//设置当前色为蓝色
glVertex3f(-1.0f,-1.0f,-1.0f);//右下(后侧面)glColor3f(1.0f,0.0f,0.0f);//设置当前色为红色
glVertex3f(0.0f,1.0f,0.0f);//上顶点(左侧面)
glColor3f(0.0f,1.0f,0.0f);//设置当前色为绿色
glVertex3f(-1.0f,-1.0f,-1.0f);//左下(左侧面)
glColor3f(0.0f,0.0f,1.0f);//设置当前色为蓝色
glVertex3f(-1.0f,-1.0f,1.0f);//右下(左侧面)glEnd();//三角形绘制结束glLoadIdentity();//重置模型观察矩阵
glTranslatef(1.5f,0.0f,-7.0f);//先右移再移入屏幕
glRotatef(rquad,1.0f,1.0f,1.0f);//绕XYZ轴旋转立方体glBegin(GL_QUADS); //绘制正方形
glColor3f(0.0f,1.0f,0.0f);//将当前色设置为绿色
//顶面
glVertex3f(1.0f,1.0f,-1.0f);//右上
glVertex3f(-1.0f,1.0f,-1.0f);//左上
glVertex3f(-1.0f,1.0f,1.0f);//左下
glVertex3f(1.0f,1.0f,1.0f);//右下//橙色
glColor3f(1.0f,0.5f,0.0f);//底面
glVertex3f(1.0f,-1.0f,-1.0f);//右上
glVertex3f(-1.0f,-1.0f,-1.0f);//左上
glVertex3f(-1.0f,-1.0f,1.0f);//左下
glVertex3f(1.0f,-1.0f,1.0f);//右下//红色
glColor3f(1.0f,0.0f,0.0f);
//前面
glVertex3f(1.0f,1.0f,1.0f);//右上
glVertex3f(-1.0f,1.0f,1.0f);//左上
glVertex3f(-1.0f,-1.0f,1.0f);//左下
glVertex3f(1.0f,-1.0f,1.0f);//右下//黄色
glColor3f(1.0f,1.0f,0.0f);
//后面
glVertex3f(1.0f,1.0f,-1.0f);//右上
glVertex3f(-1.0f,1.0f,-1.0f);//左上
glVertex3f(-1.0f,-1.0f,-1.0f);//左下
glVertex3f(1.0f,-1.0f,-1.0f);//右下//蓝色
glColor3f(0.0f,0.0f,1.0f);
//左面
glVertex3f(-1.0f,1.0f,1.0f);//右上
glVertex3f(-1.0f,1.0f,-1.0f);//左上
glVertex3f(-1.0f,-1.0f,-1.0f);//左下
glVertex3f(-1.0f,-1.0f,1.0f);//右下//紫罗兰色
glColor3f(1.0f,0.0f,1.0f);
//右面
glVertex3f(1.0f,1.0f,1.0f);//右上
glVertex3f(1.0f,1.0f,-1.0f);//左上
glVertex3f(1.0f,-1.0f,-1.0f);//左下
glVertex3f(1.0f,-1.0f,1.0f);//右下glEnd();//<控制旋转速度>
rtri +=0.02f;   //增加三角形的旋转变量
rquad -=0.015f; //减少四边形的旋转变量return TRUE;
}GLvoid KillGLWindow(GLvoid)//正常销毁窗口
{
if(fullscreen)//是否处于全屏模式
{
ChangeDisplaySettings(NULL,0); //是的话,切换回桌面
ShowCursor(TRUE);//显示鼠标指针
}if(hRC)//是否拥有OpenGL渲染描述表
{
if(!wglMakeCurrent(NULL,NULL)) //能否是否DC和RC描述表
{
MessageBox(NULL,"释放DC或RC失败。","关闭错误",MB_OK | MB_ICONINFORMATION );
}if(!wglDeleteContext(hRC)) //能否删除RC
{
MessageBox(NULL,"释放RC失败。","关闭错误",MB_OK | MB_ICONINFORMATION );
}hRC = NULL;
}if(hDC && !ReleaseDC(hWnd,hDC)) //能否释放DC
{
MessageBox(NULL,"释放DC失败。","关闭错误",MB_OK | MB_ICONINFORMATION );
hDC = NULL;
}if(hWnd && !DestroyWindow(hWnd)) //能否销毁窗口
{
MessageBox(NULL,"释放窗口句柄失败。","关闭错误",MB_OK | MB_ICONINFORMATION );
hWnd = NULL;
}if(!UnregisterClass("OpenGL",hInstance)) //能否注销窗口类
{
MessageBox(NULL,"不能注销窗口类。","关闭错误",MB_OK | MB_ICONINFORMATION );
hInstance = NULL;
}
}BOOL CreateGLWindow(char * title,int width,int height,int bits,bool fullscreenflag)
{
GLuint PixelFormat;//保存查找匹配的结果
WNDCLASS wc;//窗口类结构
DWORD dwExStyle; //扩展窗口风格
DWORD dwStyle;//窗口风格
RECT WindowRect;//取得矩形的左上角和右下角的坐标值
WindowRect.left=(long)0;//将Left设为0
WindowRect.right=(long)width;//将Right设为要求的宽度
WindowRect.top=(long)0;
WindowRect.bottom=(long)height;fullscreen = fullscreenflag;//设置全局全屏标志hInstance         = GetModuleHandle(NULL);//取得窗口的实例
wc.style          = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;//移动时重画,并为窗口取得DC
wc.lpfnWndProc    = WndProc;//WndProc处理消息
wc.cbClsExtra     = 0;//无额外窗口数据Specifies the number of extra bytes to allocate following the window-class structure.
wc.cbWndExtra     = 0; //无额外窗口数据Specifies the number of extra bytes to allocate following the window instance.
wc.hInstance      = hInstance;//设置实例
wc.hIcon          = LoadIcon(NULL,IDI_WINLOGO);//装入缺省图标
wc.hCursor        = LoadCursor(NULL,IDC_ARROW);//装入鼠标指针
wc.hbrBackground  = NULL;         //GL不需要背景
wc.lpszMenuName   = NULL ;         //不需要菜单
wc.lpszClassName  = "OpenGL";     //设定类名字if(!RegisterClass(&wc)) //尝试注册窗口类
{
MessageBox(NULL,"注册窗口失败","错误",MB_OK | MB_ICONEXCLAMATION);
return FALSE;
}if(fullscreen)
{
DEVMODE dmScreenSettings; //设备模式
memset(&dmScreenSettings,0,sizeof(dmScreenSettings));//确保内存清空为零
dmScreenSettings.dmSize=sizeof(dmScreenSettings);//Devmode结构的大小
dmScreenSettings.dmPelsWidth = width;//所选屏幕宽度
dmScreenSettings.dmPelsHeight = height;//所选屏幕高度
dmScreenSettings.dmBitsPerPel = bits; //每像素所选的色彩浓度
dmScreenSettings.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;//尝试设置显示模式并返回结果。注:CDS_FULLSCREEN移去了状态条。
if(ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL)
{
//若模式失败,提供两个选项:退出或在窗口内运行。
if(MessageBox(NULL,"全屏模式在当前显卡上设置失败!\n使用窗口模式?",
"提示",MB_YESNO | MB_ICONEXCLAMATION) == IDYES)
{
fullscreen = FALSE;//选择窗口模式
}
else
{
//弹出一个对话框,告诉用户程序结束
MessageBox(NULL,"程序将被关闭","错误",MB_OK | MB_ICONSTOP);
return FALSE;
}
}
}if(fullscreen)
{
dwExStyle = WS_EX_APPWINDOW; //扩展窗体风格
dwStyle = WS_POPUP; //窗体风格
ShowCursor(FALSE); //隐藏鼠标指针
}
else
{
dwExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;//扩展窗体风格
dwStyle = WS_OVERLAPPEDWINDOW; //窗体风格
}AdjustWindowRectEx(&WindowRect,dwStyle,FALSE,dwExStyle);//调整窗口达到真正要求的大小//窗体自适应各种分辨率以居中方式显示
LONG nX, nY;nX = (::GetSystemMetrics(SM_CXSCREEN) - width) / 2;
nY = (::GetSystemMetrics(SM_CYSCREEN) - height) / 2;if(!(hWnd = CreateWindowEx(dwExStyle, //扩展窗体风格
"OpenGL", //类名字
title,    //窗口标题
WS_CLIPSIBLINGS | WS_CLIPCHILDREN| //必须的窗体风格属性
dwStyle,   //选择的窗体属性
nX,nY,   //窗口位置
WindowRect.right - WindowRect.left, //计算调整好的窗口宽度
WindowRect.bottom - WindowRect.top, //计算调整好的窗体高度
NULL, //无父窗口
NULL, //无菜单
hInstance, //实例
NULL))) //不向WM_CREATE传递任何东西
{
KillGLWindow();//重置显示区
MessageBox(NULL,"不能创建一个窗口设备描述表","错误",MB_OK | MB_ICONEXCLAMATION);
return FALSE;
}static PIXELFORMATDESCRIPTOR pfd = //pdf告诉窗口希望的东西,即窗口使用的像素格式
{
sizeof(PIXELFORMATDESCRIPTOR), //上述格式描述符的大小
1,       //版本号
PFD_DRAW_TO_WINDOW |  //格式支持窗口
PFD_SUPPORT_OPENGL |  //格式支持OpenGL
PFD_DOUBLEBUFFER,  //支持双缓冲
PFD_TYPE_RGBA,     //申请RGBA格式
bits,              //选定色彩深度
0,0,0,0,0,0,       //忽略的色彩位
0,                 //无Alpha缓存
0,                 //忽略Shift Bit
0,                 //无累加缓存
0,0,0,0,           //忽略聚集位
16,                //16位Z-缓存(深度缓存)
0,                 //无蒙板缓存
0,                 //无辅助缓存
PFD_MAIN_PLANE,    //主绘图层
0,                 //Reserved
0,0,0              //忽略层遮罩
};if(!(hDC = GetDC(hWnd))) //是否取得设备描述表
{
KillGLWindow();//重置显示区
MessageBox(NULL,"不能创建一种相匹配的像素格式","错误",MB_OK | MB_ICONEXCLAMATION);
return FALSE;
}if(!(PixelFormat = ChoosePixelFormat(hDC,&pfd))) //Windows是否找到相应的像素格式
{
KillGLWindow();//重置显示区
MessageBox(NULL,"不能设置像素格式","错误",MB_OK | MB_ICONEXCLAMATION);
return FALSE;
}if(!SetPixelFormat(hDC,PixelFormat,&pfd)) //是否能够设置像素格式
{
KillGLWindow();//重置显示区
MessageBox(NULL,"不能设置像素格式","错误",MB_OK | MB_ICONEXCLAMATION);
return FALSE;
}if (!(hRC = wglCreateContext(hDC))) //能否取得着色描述表
{
KillGLWindow();//重置显示区
MessageBox(NULL,"不能创建OpenGL渲染描述表","错误",MB_OK | MB_ICONEXCLAMATION);
return FALSE;
}if(!wglMakeCurrent(hDC,hRC)) //尝试激活着色描述表
{
KillGLWindow();
MessageBox(NULL,"不能激活当前的OpenGL渲染描述表","错误",MB_OK | MB_ICONEXCLAMATION);
return FALSE;
}ShowWindow(hWnd,SW_SHOW);//显示窗口
SetForegroundWindow(hWnd);//提供优先级别
SetFocus(hWnd);//设置键盘的焦点至此窗口
ResizeGLScene(width,height);//设置透视GL屏幕if (!InitGL()) //初始化新建的GL窗口
{
KillGLWindow();
MessageBox(NULL,"Initialization","ERROR",MB_OK | MB_ICONEXCLAMATION);
return FALSE;
}return TRUE;
}//处理所有的窗口消息
LRESULT CALLBACK WndProc(HWND hWnd,//窗口的句柄
UINT uMsg,//窗口的消息
WPARAM wParam,//附加的消息内容
LPARAM lParam) //附加的消息内容
{
switch(uMsg) //检查检查Windows消息
{
case WM_ACTIVATE:  //监视窗口激活消息
{
if(!HIWORD(wParam)) //检查最小化状态
{
active = TRUE; //程序处于激活状态
}
else
{
active = FALSE;//程序不再激活
}return 0;//返回消息循环
}case WM_SYSCOMMAND: //系统中断命令
{
switch(wParam) //检查系统调用
{
case  SC_SCREENSAVE: //屏保运行
case SC_MONITORPOWER: //显示器进入节电模式
return 0; //阻止发生
}
break; //退出
}
case WM_CLOSE: //收到Close消息
{
PostQuitMessage(0);//发出退出消息
return 0;
}
case WM_KEYDOWN: //有键按下
{
keys[wParam] = TRUE;
return 0;
}
case WM_KEYUP: //有键放开
{
keys[wParam] = FALSE;
return 0;
}
case WM_SIZE: //调整OpenGL窗口大小
{
ResizeGLScene(LOWORD(lParam),HIWORD(lParam));//LOWORD=width,HIWORD=height
return 0;
}
}//向DefWindowProc传递所有未处理的消息
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}//Windows程序的入口,调用窗口创建例程,处理窗口消息,并监视人机交互。
int WINAPI WinMain(HINSTANCE hInstance,//当前窗口实例HINSTANCE hPrevInstance, //前一个窗口实例LPSTR lpCmdLine, //命令行参数int nCmdShow) //窗口显示状态
{
MSG msg;//Windows消息结构
BOOL done=FALSE;//用来退出循环的BOOL变量
//提示用户选择运行模式
if (MessageBox(NULL,"你想在全屏模式下运行么?","设置全屏模式",MB_YESNO | MB_ICONQUESTION) == IDNO)
{
fullscreen = FALSE; //设置为窗口模式
}//创建OpenGL窗口
if(!CreateGLWindow("OpenGL 3D 旋转物体",640,480,16,fullscreen))
{
return 0;       //失败退出
}while(!done)
{
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) //是否有消息在等待
{
if(msg.message == WM_QUIT) //收到退出消息
{
done = TRUE;
}
else //处理窗口消息
{
TranslateMessage(&msg);  //翻译消息
DispatchMessage(&msg);   //发送消息
}
}
else //如果没有消息
{
//绘制场景。监视ESC键和来自DrawGLScene()的退出消息
if(active)
{
if(keys[VK_ESCAPE])
{
done = TRUE;
}
else //没有退出,刷新屏幕
{
DrawGLScene();//绘制场景
SwapBuffers(hDC);//交换缓存(双缓存)
}
}
if(keys[VK_F1])
{
keys[VK_F1]=FALSE;
KillGLWindow();
fullscreen = !fullscreen;//切换全屏/窗口模式
//重建OpenGL窗口
if(!CreateGLWindow("3D旋转实例",640,480,16,fullscreen))
{
return 0;
}
}
}
}//关闭程序
KillGLWindow(); //销毁窗口
return (msg.wParam); //退出程序
}

效果:

代码比较长;用notepad++折叠起来看下函数;

二 3D机器人

代码:
#include <gl/glut.h>
#include <stdlib.h>
#include <stdio.h>#define SOLID 1
#define WIRE 2int moveX,moveY;
int spinX = 0;
int spinY = 0;
int des = 0;void init() {//定义光源的颜色和位置GLfloat ambient[] = { 0.5, 0.8, 0.1, 0.1 };  GLfloat diffuse[] = { 1.0, 1.0, 1.0, 1.0 };  GLfloat position[] = { -80.0, 50.0, 25.0, 1.0 };  //选择光照模型GLfloat lmodel_ambient[] = { 0.4, 0.4, 0.4, 1.0 };  GLfloat local_view[] = { 0.0 };  glClearColor(0.0, 0.0, 0.0, 0.0);   glShadeModel(GL_SMOOTH);  //设置环境光glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);  //设置漫射光glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);  //设置光源位置glLightfv(GL_LIGHT0, GL_POSITION, position);  glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);  glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, local_view);  //启动光照glEnable(GL_LIGHTING);  //启用光源glEnable(GL_LIGHT0);
}//画球
void drawBall(double R, double x, double y,double z, int MODE) {glPushMatrix();glTranslated(x,y,z);if (MODE == SOLID) {glutSolidSphere(R,20,20);} else if (MODE ==WIRE) {glutWireSphere(R,20,20);}glPopMatrix();
}//画半球
void drawHalfBall(double R, double x, double y,double z, int MODE) {glPushMatrix();glTranslated(x,y,z);GLdouble eqn[4]={0.0, 1.0, 0.0, 0.0};glClipPlane(GL_CLIP_PLANE0,eqn);glEnable(GL_CLIP_PLANE0);if (MODE == SOLID) {glutSolidSphere(R,20,20);} else if (MODE ==WIRE) {glutWireSphere(R,20,20);}glDisable(GL_CLIP_PLANE0);glPopMatrix();
}//画长方体
void drawSkewed(double l, double w, double h, double x, double y, double z, int MODE) {glPushMatrix();glScaled(l, w, h);glTranslated(x, y, z);if (MODE == SOLID) {glutSolidCube(1);} else if (MODE ==WIRE) {glutWireCube(1);}glPopMatrix();
}void display(void) {//清除缓冲区颜色glClear(GL_COLOR_BUFFER_BIT);//定义白色glColor3f(1.0, 1.0, 1.0); //圆点放坐标中心glLoadIdentity();  //从哪个地方看gluLookAt(-2.0, -1.0, 20.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glPushMatrix();glRotated(spinX, 0, 1, 0);glRotated(spinY, 1, 0, 0);glTranslated(0, 0, des);//头drawBall(2, 0, 1, 0, SOLID);//身体drawSkewed(5, 4.4, 4, 0, -0.75, 0, SOLID);//肩膀drawHalfBall(1, 3.5, -2.1, 0, SOLID);drawHalfBall(1, -3.5, -2.1, 0, SOLID);//胳膊drawSkewed(1, 3, 1, 3.5, -1.3, 0, SOLID);drawSkewed(1, 3, 1, -3.5, -1.3, 0, SOLID);//手drawBall(1, 3.5, -6.4, 0, SOLID);drawBall(1, -3.5, -6.4, 0, SOLID);//腿drawSkewed(1.2, 3, 2, 1, -2.4, 0, SOLID);drawSkewed(1.2, 3, 2, -1, -2.4, 0, SOLID);//脚drawSkewed(1.5, 1, 3, 0.9, -9.2, 0, SOLID);drawSkewed(1.5, 1, 3, -0.9, -9.2, 0, SOLID);glPopMatrix();glutSwapBuffers();
}
//鼠标点击事件
void mouseClick(int btn, int state, int x, int y) {moveX = x;moveY = y;GLfloat ambient[] = { (float)rand() / RAND_MAX, (float)rand() / RAND_MAX, (float)rand() / RAND_MAX, 0.1 };  //设置环境光glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);  //启用光源glEnable(GL_LIGHT0);
}//键盘事件
void keyPressed(unsigned char key, int x, int y) {switch (key) {case 'a':spinX -= 2;break;case 'd':spinX += 2;  break;case 'w':des += 2;break;case 's':des -= 2;break;}glutPostRedisplay();
}
// 鼠标移动事件
void mouseMove(int x, int y) {int dx = x - moveX;int dy = y - moveY;printf("dx;%dx,dy:%dy\n",dx,dy);spinX += dx;spinY += dy;glutPostRedisplay();moveX = x;moveY = y;
}void reshape(int w, int h) {//定义视口大小glViewport(0, 0, (GLsizei) w, (GLsizei) h); //投影显示glMatrixMode(GL_PROJECTION);//坐标原点在屏幕中心glLoadIdentity();//操作模型视景gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0);glMatrixMode(GL_MODELVIEW);
}int main(int argc, char** argv) {//初始化glutInit(&argc, argv);//设置显示模式glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);//初始化窗口大小glutInitWindowSize(500, 500); //定义左上角窗口位置glutInitWindowPosition(100, 100);//创建窗口glutCreateWindow(argv[0]);//初始化init();//显示函数glutDisplayFunc(display);//窗口大小改变时的响应glutReshapeFunc(reshape);//鼠标点击事件,鼠标点击或者松开时调用glutMouseFunc(mouseClick);//鼠标移动事件,鼠标按下并移动时调用glutMotionFunc(mouseMove);//键盘事件glutKeyboardFunc(keyPressed);//循环glutMainLoop();return 0;
}

效果;

折叠其代码来看下函数;

三 绘制立方体

代码:
#include <gl/glut.h>  //引用相关包void display(void)
{glClear(GL_COLOR_BUFFER_BIT);  //清空颜色缓冲区glColor3f(0,1,1);   //重置颜色glLoadIdentity();   //清空矩阵glTranslatef(0,0,-5); //将场景中的物体沿z轴负方向移动5个单位长glRotatef(40,0,1,0);//gluLookAt(0,0,5,0,0,0,0,2,0); //视点变换glScalef(1,2,1);  //模型变换glutWireCube(1.2); //绘制实心立方体和线框立方体glFlush();   //刷新窗口以显示当前绘制图形
}
void init(void)
{glClearColor(0,0,0,0);glShadeModel(GL_FLAT); //选择平面明暗模式或光滑明暗模式
}void reshape(int w,int h)
{glViewport(0,0,(GLsizei)w,(GLsizei)h);   //设置机口glMatrixMode(GL_PROJECTION);  //指定哪一个矩阵是当前矩阵glLoadIdentity();gluPerspective(60,1,1.5,20);   //创建透视投影矩阵(fovy,aspect,zNear,zFar);//glFrustum(-1,1,-1,1,1.5,20.0);  //用透视矩阵乘以当前矩阵(left,Right,bottom,top,near,far);glMatrixMode(GL_MODELVIEW);
}
int main(int argc, char *argv[])
{glutInit(&argc, argv); //固定格式glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);   //缓存模式glutInitWindowSize(400, 400);    //显示框的大小glutInitWindowPosition(400,400); //确定显示框左上角的位置glutCreateWindow("绘制立方体");init();glutDisplayFunc(display);glutReshapeFunc(reshape);glutMainLoop(); //进人GLUT事件处理循环return 0;
}

效果:

上述分别是

glutWireCube(1.2);

glutWireCube(2.0);

的效果;

四 绘制立方体二

代码:

#include<windows.h>
#include<math.h>#ifdef __APPLE__
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#endif#include <stdlib.h>void init(void)
{glClearColor(0.75,0.75,0.75,0.0);glMatrixMode(GL_MODELVIEW);//设置当前矩阵模式为视图模型矩阵glLoadIdentity();
//设置视点的位置,视线的方向和相机的向上方向gluLookAt(0,0,0, 0,0,-1, 0,1,0); //该设置为默认设置glScalef(0.3,1.0,0.5); //产生比例变换,分别设置物体在x,y,z方向上缩放因子,根据需要自己可以设置glRotatef(45,1.0,1.0,1.0);//产生旋转变换,让物体绕(1,1,1)轴旋转45度glMatrixMode(GL_PROJECTION);//设置当前矩阵模式为投影矩阵glFrustum(-4,4,-4,4,0,20);设置场景投影时的可视范围
}//float points[8][3] = {{0,0,0},{0,0.5,0},{0.5,0,0},{0.5,0.5,0},{0,0,0.5},{0,0.5,0.5},{0.5,0,0.5},{0.5,0.5,0.5}};float points[8][3] = {{0,0,0},{0,0.75,0},{0.75,0,0},{0.75,0.75,0},{0,0,0.75},{0,0.75,0.75},{0.75,0,0.75},{0.75,0.75,0.75}};float colors[6][3] = {{0.25,0,0},{0.25,0.25,0.25},{0,0,0.25},{0.5,0.25,0},{0,0.25,0.25},{0.25,0,0.25}};void vertexArray(void)
{glClear(GL_COLOR_BUFFER_BIT);
// glColor 3f(1.0,1.0,0.0);//glPolygonMode(GL_FRONT, GL_LINE);// 设置多边形的显示模式为面填充模式,该设置也是默认设置glFrontFace(GL_CCW); //设置前面的面的模式为逆时针模式, 该设置也是默认设置//glShadeModel(GL_SHADE_MODEL);// 默认就是此参数,可忽略,为了明确说明特意指定void quad(GLint n1,GLint n2,GLint n3,GLint n4,GLint index);quad(6,2,3,7,1);quad(5,1,0,4,2);quad(7,3,1,5,3);quad(4,0,2,6,4);quad(2,0,1,3,5);quad(7,5,4,6,6);
glFlush();
}void quad(GLint n1,GLint n2,GLint n3,GLint n4,GLint index)
{glColor3f(0.0,1.0,0.0);glEnable(GL_POLYGON_OFFSET_FILL);glPolygonOffset(1.0,1.0);glDisable(GL_POLYGON_OFFSET_FILL);glColor3f(colors[index][0],colors[index][1],colors[index][2]);//glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);//glPolygonMode(GL_FRONT, GL_LINE);glPolygonMode(GL_BACK, GL_LINE);//glColor3f(1.0,1.0,0);glBegin(GL_QUADS);glVertex3fv(points[n1]);glVertex3fv(points[n2]);glVertex3fv(points[n3]);glVertex3fv(points[n4]);glEnd();
}int main (int argc, char** argv)
{glutInit (&argc, argv);                         // Initialize GLUT.glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);   // Set display mode.glutInitWindowPosition (50, 100);   // Set top-left display-window position.glutInitWindowSize (600, 500);      // Set display-window width and height.glutCreateWindow ("An Example OpenGL Program"); // Create display window.init();                           // Execute initialization procedure.glutDisplayFunc (vertexArray);       // Send graphics to display window.glutMainLoop ( );// Send graphics to display window.                  // Display everything and wait.return 0;
}

效果:

五 任意两点间画圆柱体

#include <gl/glut.h>
#include <cstdio>
#include <cstdlib>
#include <cmath>
void    init(void);
void    reshape(int w,int h);
void    display(void);  void RenderBone(float x0, float y0, float z0, float x1, float y1, float z1 );
int main(int argc, char** argv)
{  glutInit(&argc, argv);  glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);   glutInitWindowSize (500, 500);  glutInitWindowPosition (100, 100);  glutCreateWindow("Sphere");  init ();  glutReshapeFunc(reshape);  glutDisplayFunc(display);  glutMainLoop();  return 0;
}
void init (void)
{   glClearColor (0.6, 0.6, 0.6, 0.0);  glClearDepth(1);  glShadeModel(GL_SMOOTH);  GLfloat _ambient[]={1.0,1.0,1.0,1.0};  //GLfloat _ambient[]={2.0,2.0,2.0,2.0};  GLfloat _diffuse[]={1.0,1.0,0.0,1.0};  GLfloat _specular[]={1.0,1.0,1.0,1.0};  GLfloat _position[]={300,300,300,0};  glLightfv(GL_LIGHT0,GL_AMBIENT,_ambient);  glLightfv(GL_LIGHT0,GL_DIFFUSE,_diffuse);  glLightfv(GL_LIGHT0,GL_SPECULAR,_specular);  glLightfv(GL_LIGHT0,GL_POSITION,_position);  glEnable(GL_TEXTURE_2D);  glEnable(GL_LIGHTING);  glEnable(GL_LIGHT0);  glEnable(GL_DEPTH_TEST);  glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
}
void reshape(int w, int h)
{  glViewport (0, 0, (GLsizei) w, (GLsizei) h);  glMatrixMode(GL_PROJECTION);  glLoadIdentity();  glOrtho(0.0, 500, 0.0, 500, -500, 500);  glMatrixMode(GL_MODELVIEW);  glLoadIdentity();
}
void display(void)
{  glMatrixMode(GL_MODELVIEW);  glLoadIdentity();  glClear (GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);  glPushMatrix();  {  //RenderBone(100, 100, 100, 200, 300, 500);  RenderBone(200, 200, 200, 300, 400, 600);  } glPopMatrix();  glFlush();  glutPostRedisplay();
}
void RenderBone(float x0, float y0, float z0, float x1, float y1, float z1 )
{  GLdouble  dir_x = x1 - x0;  GLdouble  dir_y = y1 - y0;  GLdouble  dir_z = z1 - z0;  GLdouble  bone_length = sqrt( dir_x*dir_x + dir_y*dir_y + dir_z*dir_z );  static GLUquadricObj *  quad_obj = NULL;  if ( quad_obj == NULL )  quad_obj = gluNewQuadric();  gluQuadricDrawStyle( quad_obj, GLU_FILL );  gluQuadricNormals( quad_obj, GLU_SMOOTH );  glPushMatrix();  // 平移到起始点  glTranslated( x0, y0, z0 );  // 计算长度  double  length;  length = sqrt( dir_x*dir_x + dir_y*dir_y + dir_z*dir_z );  if ( length < 0.0001 ) {   dir_x = 0.0; dir_y = 0.0; dir_z = 1.0;  length = 1.0;  }  dir_x /= length;  dir_y /= length;  dir_z /= length;  GLdouble  up_x, up_y, up_z;  up_x = 0.0;  up_y = 1.0;  up_z = 0.0;  double  side_x, side_y, side_z;  side_x = up_y * dir_z - up_z * dir_y;  side_y = up_z * dir_x - up_x * dir_z;  side_z = up_x * dir_y - up_y * dir_x;  length = sqrt( side_x*side_x + side_y*side_y + side_z*side_z );  if ( length < 0.0001 ) {  side_x = 1.0; side_y = 0.0; side_z = 0.0;  length = 1.0;  }  side_x /= length;  side_y /= length;  side_z /= length;  up_x = dir_y * side_z - dir_z * side_y;  up_y = dir_z * side_x - dir_x * side_z;  up_z = dir_x * side_y - dir_y * side_x;  // 计算变换矩阵  GLdouble  m[16] = { side_x, side_y, side_z, 0.0,  up_x,   up_y,   up_z,   0.0,  dir_x,  dir_y,  dir_z,  0.0,  0.0,    0.0,    0.0,    1.0 };  glMultMatrixd( m );  // 圆柱体参数  GLdouble radius= 25;        // 半径  GLdouble slices = 8.0;      //  段数  GLdouble stack = 3.0;       // 递归次数  gluCylinder( quad_obj, radius, radius, bone_length, slices, stack );   glPopMatrix();
} 

效果:

修改此句以改变半径;

GLdouble radius= 25;        // 半径

六 球体

#include <windows.h>
#include <gl/GL.h>
#include <gl/glu.h>
#include <gl/glut.h>
#include <cstdlib>
const GLfloat lightPosition[] = {10.0,10.0,10.0,0.0};
const GLfloat whiteLight[] = {0.8,0.8,0.8,1.0};
GLfloat matSpecular [] = {0.3,0.3,0.3,1.0};
GLfloat matShininess [] = {20.0};
GLfloat matEmission [] = {0.3,0.3,0.3,1.0};
GLfloat spin = 0;
void init()
{  glClearColor(0.3,0.3,0.3,1.0);  glClearDepth(1.0);  glShadeModel(GL_SMOOTH);  glEnable(GL_LIGHTING);  glEnable(GL_LIGHT0);  glEnable(GL_DEPTH_TEST);  glMatrixMode(GL_MODELVIEW);  glLoadIdentity();  glLightfv(GL_LIGHT0,GL_POSITION,lightPosition);  glLightfv(GL_LIGHT0,GL_DIFFUSE,whiteLight);  glLightfv(GL_LIGHT0,GL_SPECULAR,whiteLight);
}
void display()
{     glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);  glMatrixMode(GL_PROJECTION);  glLoadIdentity();;  glOrtho(-10.0,10.0,-10.0,10.0,-10.0,10.0);  glMatrixMode(GL_MODELVIEW);  glPushMatrix();  glRotatef(spin,0.0,1.0,0.0);  glMaterialfv(GL_FRONT,GL_SPECULAR,matSpecular);  glMaterialfv(GL_FRONT,GL_SHININESS,matShininess);  glMaterialfv(GL_FRONT,GL_EMISSION,matEmission);  //glutSolidSphere(6.0,16,16);  glutSolidSphere(3.0,16,16);  glPopMatrix();  glFlush();
}
void reshape(int w,int h)
{  glViewport(0.0,0.0,(GLsizei) w,(GLsizei) h);
}
void keyboardFunc(unsigned char key,int x,int y)
{  switch(key)  {  case 'a':  spin +=30;  break;  case 'd':  spin -=30;  break;  }  if(spin<360)  spin +=360;  else if(spin>=360)  spin -=360;  glutPostRedisplay();
}
void mouseFunc(int button,int state,int x,int y)
{  if(state==GLUT_DOWN){  switch (button)  {  case GLUT_LEFT_BUTTON:  matEmission[0]+=1.0;  if(matEmission[0]>1.0)  matEmission[0]-=1.1;  break;  case GLUT_MIDDLE_BUTTON:  matEmission[1]+=1.0;  if(matEmission[1]>1.0)  matEmission[1]-=1.1;  break;  case GLUT_RIGHT_BUTTON:  matEmission[2]+=1.0;  if(matEmission[2]>1.0)  matEmission[2]-=1.1;  break;  }  glutPostRedisplay();      }
}
int main(int argc,char *argv[])
{     glutInit(&argc,argv);  glutInitDisplayMode(GLUT_SINGLE|GLUT_RGBA|GLUT_DEPTH);  glutInitWindowSize(450,450);  glutInitWindowPosition(150,150);  glutCreateWindow("rotate sphere");  glutDisplayFunc(display);  glutReshapeFunc(reshape);  glutKeyboardFunc(keyboardFunc);  glutMouseFunc(mouseFunc);  init();  glutMainLoop();  return EXIT_SUCCESS;
} 

效果:

上述分别是

//glutSolidSphere(6.0,16,16);  
glutSolidSphere(3.0,16,16);

的效果;

七 球体,圆圈,茶壶......

#include <gl/glut.h>
#include <math.h>
#include <stdio.h>
//圆周率宏
#define GL_PI 3.1415f
//获取屏幕的宽度
GLint SCREEN_WIDTH=0;
GLint SCREEN_HEIGHT=0;
//设置程序的窗口大小
GLint windowWidth=400;
GLint windowHeight=300;
//绕x轴旋转角度
GLfloat xRotAngle=0.0f;
//绕y轴旋转角度
GLfloat yRotAngle=0.0f;
//受支持的点大小范围
GLfloat sizes[2];
//受支持的点大小增量
GLfloat step;  enum MODELS{  SPHERE=0,  CONE,  CUBE,  TORUS,  DODECAHEDRON,  TEAPOT,  OCTAHEDRON,  TETRAHEDRON,  ICOSAHEDRON
};
GLint iModel=SPHERE;
GLboolean bWire=GL_TRUE;
//菜单回调函数
void processMenu(int value){  switch(value){  case 1:  iModel=SPHERE;  break;  case 2:  iModel=CONE;  break;  case 3:  iModel=CUBE;  break;  case 4:  iModel=TORUS;  break;  case 5:  iModel=DODECAHEDRON;  break;  case 6:  iModel=TEAPOT;  break;  case 7:  iModel=OCTAHEDRON;  break;  case 8:  iModel=TETRAHEDRON;  break;  case 9:  iModel=ICOSAHEDRON;  break;  case 10:  bWire=GL_TRUE;  break;  case 11:  bWire=GL_FALSE;  break;  default:  break;  }  //重新绘制  glutPostRedisplay();
}
//显示回调函数
void renderScreen(void){  //将窗口颜色清理为黑色  glClearColor(0.0f, 0.0f, 0.0f, 0.0f);  //将模板缓冲区值全部清理为1  glClearStencil(1);  //使能模板缓冲区  glEnable(GL_STENCIL_TEST);  //把整个窗口清理为当前清理颜色:黑色。清除深度缓冲区、模板缓冲区  glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);  //将当前Matrix状态入栈  glPushMatrix();  //坐标系绕x轴旋转xRotAngle  glRotatef(xRotAngle,1.0f,0.0f,0.0f);  //坐标系绕y轴旋转yRotAngle  glRotatef(yRotAngle,0.0f,1.0f,0.0f);  //进行平滑处理   glEnable(GL_POINT_SMOOTH);  glHint(GL_POINT_SMOOTH,GL_NICEST);  glEnable(GL_LINE_SMOOTH);  glHint(GL_LINE_SMOOTH,GL_NICEST);  glEnable(GL_POLYGON_SMOOTH);  glHint(GL_POLYGON_SMOOTH,GL_NICEST);  //白色绘制坐标系  glColor3f(1.0f,1.0f,1.0f);  glBegin(GL_LINES);  glVertex3f(-9.0f,0.0f,0.0f);  glVertex3f(9.0f,0.0f,0.0f);  glVertex3f(0.0f,-9.0f,0.0f);  glVertex3f(0.0f,9.0f,0.0f);  glVertex3f(0.0f,0.0f,-9.0f);  glVertex3f(0.0f,0.0f,9.0f);  glEnd();  glPushMatrix();  glTranslatef(9.0f,0.0f,0.0f);  glRotatef(90.0f,0.0f,1.0f,0.0f);  glutSolidCone(0.3,0.6,10,10);  glPopMatrix();  glPushMatrix();  glTranslatef(0.0f,9.0f,0.0f);  glRotatef(-90.0f,1.0f,0.0f,0.0f);  glutSolidCone(0.3,0.6,10,10);  glPopMatrix();  glPushMatrix();  glTranslatef(0.0f,0.0f,9.0f);  glRotatef(90.0f,0.0f,0.0f,1.0f);  glutSolidCone(0.3,0.6,10,10);  glPopMatrix();  //设置绘画颜色为金色  glColor3f(0.0f,1.0f,0.0f);  switch(iModel){  //球  case SPHERE:  if(bWire){  glutWireSphere(8.0f,20,20);  }  else{  glutSolidSphere(8.0f,20,20);  }  break;  //锥体  case CONE:  if(bWire){  glutWireCone(4.0f,8.0f,20,20);  }  else{  glutSolidCone(4.0f,8.0f,20,20);  }  break;  //立体  case CUBE:  if(bWire){  glutWireCube(8.0f);  }  else{  glutSolidCube(8.0f);  }  break;  //甜圈  case TORUS:  if(bWire){  glutWireTorus(3.0f,6.0f,20,20);  }  else{  glutSolidTorus(3.0f,6.0f,20,20);  }  break;  //十六面体,默认半径1.0  case DODECAHEDRON:  glScalef(6.0f,6.0f,6.0f);//x,y,z轴均放大6倍  if(bWire){  glutWireDodecahedron();  }  else{  glutSolidDodecahedron();  }  break;  //茶壶  case TEAPOT:  if(bWire){  glutWireTeapot(8.0f);  }  else{  glutSolidTeapot(8.0f);  }  break;  //八面体,默认半径1.0  case OCTAHEDRON:  glScalef(6.0f,6.0f,6.0f);//x,y,z轴均放大6倍  if(bWire){  glutWireOctahedron();  }  else{  glutSolidOctahedron();  }  break;  //四面体,默认半径1.0  case TETRAHEDRON:  glScalef(6.0f,6.0f,6.0f);//x,y,z轴均放大6倍  if(bWire){  glutWireTetrahedron();  }  else{  glutSolidTetrahedron();  }  break;  //二十面体,默认半径1.0  case ICOSAHEDRON:  glScalef(6.0f,6.0f,6.0f);//x,y,z轴均放大6倍  if(bWire){  glutWireIcosahedron();  }  else{  glutSolidIcosahedron();  }  break;  default:  break;  }  //恢复压入栈的Matrix  glPopMatrix();  //交换两个缓冲区的指针  glutSwapBuffers();
}
//设置Redering State
void setupRederingState(void){  //设置清理颜色为黑色  glClearColor(0.0f,0.0,0.0,1.0f);  //设置绘画颜色为绿色  glColor3f(1.0f,1.0f,0.0f);  //使能深度测试  glEnable(GL_DEPTH_TEST);  //获取受支持的点大小范围  glGetFloatv(GL_POINT_SIZE_RANGE,sizes);  //获取受支持的点大小增量  glGetFloatv(GL_POINT_SIZE_GRANULARITY,&step);  printf("point size range:%f-%f\n",sizes[0],sizes[1]);  printf("point step:%f\n",step);
}
//窗口大小变化回调函数
void changSize(GLint w,GLint h){  //横宽比率  GLfloat ratio;  //设置坐标系为x(-100.0f,100.0f)、y(-100.0f,100.0f)、z(-100.0f,100.0f)  GLfloat coordinatesize=10.0f;  //窗口宽高为零直接返回  if((w==0)||(h==0))  return;  //设置视口和窗口大小一致  glViewport(0,0,w,h);  //对投影矩阵应用随后的矩阵操作  glMatrixMode(GL_PROJECTION);  //重置当前指定的矩阵为单位矩阵   glLoadIdentity();  ratio=(GLfloat)w/(GLfloat)h;  //正交投影  if(w<h)  glOrtho(-coordinatesize,coordinatesize,-coordinatesize/ratio,coordinatesize/ratio,-coordinatesize,coordinatesize);  else  glOrtho(-coordinatesize*ratio,coordinatesize*ratio,-coordinatesize,coordinatesize,-coordinatesize,coordinatesize);  //对模型视图矩阵堆栈应用随后的矩阵操作  glMatrixMode(GL_MODELVIEW);  //重置当前指定的矩阵为单位矩阵   glLoadIdentity();
}  //按键输入处理回调函数
void specialKey(int key,int x,int y){  if(key==GLUT_KEY_UP){  xRotAngle-=5.0f;  }  else if(key==GLUT_KEY_DOWN){  xRotAngle+=5.0f;  }  else if(key==GLUT_KEY_LEFT){  yRotAngle-=5.0f;  }  else if(key==GLUT_KEY_RIGHT){  yRotAngle+=5.0f;  }  //重新绘制  glutPostRedisplay();
}  int main(int argc, char* argv[])
{  int nModelMenu;  int nWireMenu;  int nMainMenu;  //初始化glut   glutInit(&argc,argv);  //使用双缓冲区、深度缓冲区、模板缓冲区  glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL);  //获取系统的宽像素  SCREEN_WIDTH=glutGet(GLUT_SCREEN_WIDTH);  //获取系统的高像素  SCREEN_HEIGHT=glutGet(GLUT_SCREEN_HEIGHT);  //创建窗口,窗口名字为OpenGL Glut Demo  glutCreateWindow("OpenGL Glut Demo");  //设置窗口大小  glutReshapeWindow(windowWidth,windowHeight);  //窗口居中显示  glutPositionWindow((SCREEN_WIDTH-windowWidth)/2,(SCREEN_HEIGHT-windowHeight)/2);  //创建二级菜单  nModelMenu=glutCreateMenu(processMenu);  glutAddMenuEntry("Sphere",1);  glutAddMenuEntry("Cone",2);  glutAddMenuEntry("Cube",3);  glutAddMenuEntry("Torus",4);  glutAddMenuEntry("Dodecahedron",5);  glutAddMenuEntry("Teapot",6);  glutAddMenuEntry("Octahedron",7);  glutAddMenuEntry("Tetrahedron",8);  glutAddMenuEntry("Icosahedron",9);  nWireMenu=glutCreateMenu(processMenu);  glutAddMenuEntry("Wire",10);  glutAddMenuEntry("Solid",11);  nMainMenu=glutCreateMenu(processMenu);  glutAddSubMenu("Model",nModelMenu);  glutAddSubMenu("WireOrSolid",nWireMenu);  //将菜单榜定到鼠标右键上  glutAttachMenu(GLUT_RIGHT_BUTTON);  //窗口大小变化时的处理函数  glutReshapeFunc(changSize);  //设置显示回调函数   glutDisplayFunc(renderScreen);  //设置按键输入处理回调函数  glutSpecialFunc(specialKey);  //设置全局渲染参数  setupRederingState();  glutMainLoop();  return 0;
} 

右键选择mode查看不同3d图形;光标键调整角度;
球体;

调整角度;

甜圈;

这只就是著名的雪山飞壶;

折叠起代码来看下函数;

Glut下提供了一些现成的绘制立体的API,如glutWireSphere绘制球,glutWireCone绘制椎体,glutWireCube绘制立体,glutWireTorus绘制甜圈,glutWireTeapot绘制茶壶,glutWireOctahedron绘制八面体。
Glut提供的多面体API默认半径是1.0f的,使用glScalef对其进行放大。

八 opengl资源链接

http://blog.csdn.net/one_in_one/article/category/960777
http://blog.csdn.net/yearafteryear/article/category/1442065
http://blog.csdn.net/Augusdi/article/category/685679
http://cuiqingcai.com/category/technique/cc

图解opengl 3D 图形绘制实例相关推荐

  1. openGL 3D图形和openGL简介

    基本概念与说明 OpenGL是一个图形API,用来绘制三维物体(也可以是2D物体),OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL三维图形 API 的 ...

  2. 《视觉开发专题》之 OpenGL 3D动画绘制图形学概念的理解

    知识前导 计算机图形学的终极目标--讨好人类视觉系统   最近在啃的书中有一本叫<计算机图形学 原理及实践>,这本书让我深有感触的是其绪论中对计算机构建真实感图像的理解:我们所致力的最终目 ...

  3. OpenGL开发3D图形绘制——球体

  4. OpenGL 基础图形绘制与投影变换

    本文参考<Computer Graphics Using OpenGL>,第一个例子绘制了 1. 参数定义的House 2. a flurry of filled rectangles 3 ...

  5. opengl三维图形绘制_Python matplotlib绘图示例 - 绘制三维图形

    Python matplotlib模块是扩展的MATLAB的一个绘图工具库.它可以绘制各种图形,下面就学习了下Python中的matplotlib模块,如何绘制三维图形. 示例代码一: # codin ...

  6. Python使用VTK三维3D图形绘制入门教程

    安装:pip install vtk 学习一个东西最快的方法是知道基本原理和用途 VTK有啥用 不能做游戏.适合快速开发绘制静态三维模型.所以类似多用途折叠工具刀用处多,但是不能用在特别费劲的场合. ...

  7. python绘制3d动态模型_Python使用VTK三维3D图形绘制入门教程

    安装:pip install vtk 学习一个东西最快的方法是知道基本原理和用途 VTK有啥用 不能做游戏.适合快速开发绘制静态三维模型.所以类似多用途折叠工具刀用处多,但是不能用在特别费劲的场合. ...

  8. OPENGL 简单图形绘制

    直接上代码: #include <stdio.h> #include <GL/glut.h> #include <math.h>void myDisplay() { ...

  9. Python绘制3D图形:Axes3D

    1 3D图形绘制需要(x,y,z)三组值,下面通过numpy和Axes3D函数会议3D图形.其中Axes3D是mpl_toolkits.mplot3d中的一个绘图函数,mpl_toolkits.mpl ...

最新文章

  1. Ubuntu中配置Java环境变量时,出现command not found问题解决记录
  2. 定了!2021年数据中心《能源管理师》考试,全国报名入口!
  3. 《研磨设计模式》chap2 简单工厂simplefactory
  4. 民间75个不传之密 ,医院都不知道的秘密
  5. nyoj914Yougth的最大化(二分搜索 + 贪心)
  6. Qt总结二十一:Qt控件一(QWidget)
  7. 【作业】条件、循环、函数定义、字符串操作练习
  8. PSTN ,PBX ,IP PBX,VoIP
  9. Python中Queue.get()方法阻塞,怎么办?
  10. 前端代码审查利器:vscode插件GitLab Workflow
  11. 个人配置--常用软件保护色设置
  12. 有线猫眼监控_如何安装有线监控摄像头系统
  13. java实现DFA 敏感词检测
  14. Python--Turtle钟表
  15. linux终端查找隐藏文件,如何在Linux服务器中查看或隐藏文件?
  16. img.shape[0]、[1]、[2]到底代表什么(转)
  17. 程序分析与优化 - 6 循环优化
  18. wifi7000米远程连接服务器失败,【电视派控制设备连wifi总失败 怎么办?】PjTime.COM 应用技巧 创维...
  19. OpenSSH之Windows账户访问操作
  20. dxf怎么用cad打开?CAD技巧分享

热门文章

  1. 预处理命令 || 宏定义 || 带参数的宏定义
  2. 计算机组成原理——总线结构
  3. 用javascript自制ctf词频分析工具
  4. 截图如何能截到鼠标?脑洞小方法
  5. C++ leetcode 12. 整数转罗马数字 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
  6. JavaWeb之Servlet学习-----实现文件动态下载功能 手写servlet 手动构建web程序
  7. Python进阶08 异常处理
  8. linux双小于命令,Linux文本比较命令:diff
  9. 去重之后统计条数_BOPET:12的普通包装膜到底去哪了?
  10. angular4 php,Angular4中常用管道实例详解