博文

关于OpenGL中颜色指定问题(2008-03-22 19:17:00)

摘要:还记得在MFC中绘制时,需要指定pen和brush。 到了OpenGL的恒定着色中,发现有个颜色指定函数glColor*,可以定义顶点的颜色,可是当绘制一些多边形的时候,需要指定很多顶点,如果我为每个顶点指定一个颜色,那么最后的多边形到底显示什么颜色呢?很有趣的一个问题。 上机尝试一下,就可以知道答案了。 原来,最后图元显示的颜色,跟“最后”一个顶点的颜色设置有关。 举例来说: glBegin(GL_TRIANGLES); glColor3f (1.0, 1.0, 1.0); // 指定白色             (1) glVertex2f ( 10, 10);  //  第一个顶点 glColor3f (1.0, 0.0, 0.0); // 指定红色               (2) glVertex2f ( 40, 40);  //  第二个顶点 glColor3f (0.0, 1.0, 0.0); // 指定绿色                 (3) glVertex2f ( 40, 20);  //  第三个顶点 glEnd();   此时会发现,三角形显示为绿色,因为最后一个顶点设置为绿色。 若将第(3)句删掉,则显示为红色;若将第(2)句删掉,显示为白色。......

阅读全文(3492) | 评论:1

(OPENGL编程指南第四版)OPENGL范例程序3.6(2008-03-19 12:45:00)

摘要:// 范例P98.cpp : Defines the entry point for the console application.// #include "stdafx.h"#include <gl/glut.h> static float year=0,day=0; void display(){ glClear(GL_COLOR_BUFFER_BIT);     //清除所有像素 glColor3f(1.0,1.0,1.0);       //设置画笔白色 /*在缓存中绘制4对顶点坐标的矩形*/  glPushMatrix(); glutWireSphere(1.0,20,16);      //绘制太阳 glRotatef((GLfloat)year,0,1,0);     //绕y轴旋转表示确定公转位置 glTranslatef(2,0,0);       //平移到公转轨道 glRotatef((GLfloat)day,0,1,0);     //绕y轴表示自转 glutWireSphere(0.2,10,8); glPopMatrix(); glutSwapBuffers();          //立即显示出来} void init(){ glClearColor(0.0,0.0,0.0,0.0);     //用黑色清除背景 glShadeModel(GL_FLAT);}void reshape(int w,int h){ glViewport(0,0,(GLsizei)w,(GLsize......

阅读全文(2553) | 评论:0

(OPENGL编程指南第四版)OPENGL范例程序3.5(2008-03-19 12:14:00)

摘要:// 范例P96.cpp : Defines the entry point for the console application.// #include "stdafx.h"#include <gl/glut.h> void display(){ glClear(GL_COLOR_BUFFER_BIT);     //清除所有像素 glColor3f(1.0,1.0,1.0);       //设置画笔白色 /*在缓存中绘制4对顶点坐标的矩形*/ GLdouble eqn[4]={0.0,1.0,0.0,0.0}; GLdouble eqn2[4]={1.0,0.0,0.0,0.0}; GLdouble eqn3[4]={0.0,0.0,1.0,0}; glPushMatrix(); glTranslatef(0.0,0.0,-5.0);      //模型变换  /*裁掉下半部分(y坐标小于0的部分)*/ glClipPlane(GL_CLIP_PLANE0,eqn);     glEnable(GL_CLIP_PLANE0);     /*裁掉左半部分(x坐标小于0的部分)*/ glClipPlane(GL_CLIP_PLANE1,eqn2); glEnable(GL_CLIP_PLANE1);  glRotatef(90.0,1.0,0.0,0.0); glutWireSphere(1.0,20,16); glPopMatrix();  glFlush();          //立即显示出来} void init(){ glClearColor(0.0,0.0,0.0,0.0);  ......

阅读全文(2776) | 评论:0

(OPENGL编程指南第四版)OPENGL范例程序2.5(2008-03-02 22:58:00)

摘要:// 范例P37.cpp : Defines the entry point for the console application.// #include <gl/glut.h> #define drawOneLine(x1,y1,x2,y2) glBegin(GL_LINES); \ glVertex2f((x1),(y1));glVertex2f((x2),(y2));glEnd(); void display(){ glClear(GL_COLOR_BUFFER_BIT);     //清除所有像素 glColor3f(1.0,1.0,1.0);       //设置画笔白色  /*在第1行,三条线段不同点画模式*/ glEnable(GL_LINE_STIPPLE); glLineStipple(1,0x0101); drawOneLine(50,125,150,125); glLineStipple(1,0x00ff); drawOneLine(150,125,250,125); glLineStipple(1,0x1c47); drawOneLine(250,125,350,125);  /*在第2行,三条宽线使用不同的点画模式*/ glLineWidth(5); glLineStipple(1,0x0101); drawOneLine(50,100,150,100); glLineStipple(1,0x00ff); drawOneLine(150,100,250,100); glLineStipple(1,0x1c47); drawOneLine(250,100,350,100); glLineWidth(1);  /*在第3行,6条使用“短划线/点/短划线”模式的线段组成一个相连的线带*/ glLineStipple(1,0x1c47); glBegin(GL_L......

阅读全文(3046) | 评论:0

推荐OPENGL源代码大全网站(2008-02-24 20:27:00)

摘要:http://www.openglsource.com/download/download.htm 好多好东东啊,快来淘淘!!!......

阅读全文(2474) | 评论:0

(OPENGL编程指南第四版)OPENGL范例程序1.2(2008-02-24 20:25:00)

摘要:// 范例P12.cpp : Defines the entry point for the console application.// #include "stdafx.h"#include <gl/glut.h> void display(){ glClear(GL_COLOR_BUFFER_BIT);        //清除所有像素 glColor3f(1.0,1.0,1.0);       //设置画笔白色 /*在缓存中绘制4对顶点坐标的矩形*/ glBegin(GL_POLYGON);  glVertex3f(0.25,0.25,0);  glVertex3f(0.75,0.25,0);  glVertex3f(0.75,0.75,0);  glVertex3f(0.25,0.75,0); glEnd(); glFlush();          //立即显示出来} void init(){ glClearColor(0.0,0.0,0.0,0.0);     //用黑色清除背景 /*初始化视景体*/ glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0,1.0,0.0,1.0,-1.0,1.0);} int main(int argc,char ** argv){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(250,250);     //初始化窗口大小 glutInitWindo......

阅读全文(2113) | 评论:0

安装GLUT(2008-02-24 14:56:00)

摘要:windows下安装opengl的glut库(转)     GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。 无法从以上地址下载的话请使用下面的连接: http://upload.programfan.com/upfile/200607311626279.zip   Windows环境下安装GLUT的步骤: 1、将下载的压缩包解开,将得到5个文件 2、在“我的电脑”中搜索“gl.h”,并找到其所在文件夹(如果是VisualStudio2005,则应该是其安装目录下面的“VC\PlatformSDK\include\gl文件夹”如果是VC6.0,应该是其安装目录下“VC98\Include\GL")。把解压得到的glut.h放到这个文件夹。 3、把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹(如果是VisualStudio2005,则应该是其安装目录下面的“VC\lib”文件夹,如果是VC6.0,应该是安装目录下“VC98\Lib")。  4、把解压得到的glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内。(典型的位置为:C:\Windows\System32) ......

阅读全文(3397) | 评论:1

OpenGL动手须知(2008-02-22 21:21:00)

摘要:OpenGL本身就是一个图形库,它的组件有两种,一种是SGI公司提供的,一个微软提供的。两者的开始库大体上没什么区别,都是三大部分: (1)函数的说明文件:gl.h   glu.h  glut.h 和glaux.h (2)静态链接库文件:glu32.lib  glut32.lib glaux.lib 和 opengl32.lib (3)动态链接库文件:glu.dll  glu32.dll  glut.dll  glut32.dll  和opengl32.dll 若直接从C++编写程序,一般需要包含以下头文件: #include <GL/gl.h>#include <GL/glu.h> #include <GL/glaux.h> 这些文件在VC的安装目录下\Include\GL中 除此以外,如果是Windows系统,还需要在这之前包含头文件 #include <windows.h> 否则编译不通过。 但此时执行不通过。可以采用静态链接的方法: 选择Visual C++ 6.0主菜单-----工程-------设置,切换到“连接”选项卡下,在“对象/库”模块中输入OpenGL32.lib glu32.lib,就可以运行程序了。 如果是利用MFC,头文件中不需要包含windows.h。其他同上......

阅读全文(3076) | 评论:0