博文
关于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)句删掉,显示为白色。......
(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......
(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(); ......
(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......
推荐OPENGL源代码大全网站(2008-02-24 20:27:00)
摘要:http://www.openglsource.com/download/download.htm
好多好东东啊,快来淘淘!!!......
(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......
安装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)
......
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。其他同上......