博文

关于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)句删掉,显示为白色。......

阅读全文(2829) | 评论: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......

阅读全文(2293) | 评论: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();         ......

阅读全文(2549) | 评论: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......

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

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

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

阅读全文(2249) | 评论: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_R......

阅读全文(1902) | 评论: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)
......

阅读全文(3100) | 评论: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。其他同上......

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