Article View: cn.bbs.comp.program
Article #977OPENGL(16)
From: ����
Date: Tue, 05 May 1998 00:00
Date: Tue, 05 May 1998 00:00
431 lines
15446 bytes
15446 bytes
BBSˮľ�廪վ�þ�����
������: yxy (��˿˿#С��ӥ���߲�����), ����: GAME_Designer
�� ��: OPENGL(16)
����վ: BBS ˮľ�廪վ (Thu Feb 19 09:57:32 1998)
OPENGL��������
1 �ں�
ǰ���δ�Ӵ���������������壬��Ϊ���Ǵ�δ���ù��ںϴ���
��ν�ںϾ��Ǽ�����RGBAģʽ�£�ԴɫΪ(Rs,Gs,Bs,As)��Ŀ��ɫΪ
(Rd,Gd,Bd,Ad),Դ����Ϊ��Sr,Sg,Sb,Sa����Ŀ������Ϊ��Dr,Dg,Db,Da��
���ںϵ�����Ч��Ϊ����Rs*Sr+Rd*Dr,Gs*Sg+Gd*Dg,Bs*Sb+Bd*Db,As*Sa+Ad*Da��
Ȼ���ٹ�һ����ʽͦ���ӣ�������ϸ��������ƽ�����ںϵ��Ƕ���һ�¡�
�ؼ��������趨�ں�����(Sr,Sg,Sb,Sa)(Dr,Dg,Db,Da)��ʵ�ֲ�ͬ���ں�Ч��
���ú���
void glBlendFunc(GLenum sfactor,GLenum dfactor);
���������������ȡ����ֵ��
ȡֵ ������� ������ں�����
GL_ZERO Դ��Ŀ�� (0,0,0,0)
GL_ONE Դ��Ŀ�� (1,1,1,1)
GL_DST_COLOR Դ (Rd,Gd,Bd,Ad)
GL_SRC_COLOR Ŀ�� (Rs,Gs,Bs,As)
GL_ONE_MINUS_DST_COLOR Դ (1,1,1,1)-(Rd,Gd,Bd,Ad)
GL_ONE_MINUS_SRC_COLOR Ŀ�� (1,1,1,1)-(Rs,Gs,Bs,As)
GL_SRC_ALPHA Դ��Ŀ�� (As,As,As,As)
GL_ONE_MINUS_SRC_ALPHA Դ��Ŀ�� (1,1,1,1)-(As,As,As,As)
GL_DST_ALPHA Դ��Ŀ�� (Ad,Ad,Ad,Ad)
GL_ONE_MINUS_DST_ALPHA Դ��Ŀ�� (1,1,1,1)-(Ad,Ad,Ad,Ad)
GL_SRC_ALPHA_SATURATE Դ (f,f,f,1)-min(As,1-Ad)
��Ҫ����glEnable(GL_BLEND) glDisable(gl_blend)�����á��ر��ںϴ��?
////////////////////////////////////////////////
//sample.cpp
#include "glos.h"
#include <GL/gl.h>
#include <GL/glaux.h>
#include "windows.h"
void myinit(void);
void CALLBACK display(void);
void CALLBACK reshape(GLsizei w,GLsizei h);
void myinit(void)
{
auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);
auxInitPosition(0,0,500,500);
auxInitWindow("sample1");
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
//�����ں�Ч������
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
// glDepthFunc(GL_LESS);
// glEnable(GL_DEPTH_TEST);
glShadeModel(GL_FLAT);
}
void CALLBACK reshape(GLsizei w,GLsizei h)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(w<=h)
gluOrtho2D(0.0,1.0,0.0,1.0*(GLfloat)h/(GLfloat)w);
else
gluOrtho2D(0.0,1.0*(GLfloat)w/(GLfloat)h,0.0,1.0);
glMatrixMode(GL_MODELVIEW);
}
void CALLBACK display(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
//�����ͬ��ɫ�����ȵķ����غϣ���ɫ�ںϵ�Ч��
glColor4f(1.0,0.0,0.0,0.7);
glRectf(0.25,0.4,0.75,0.9);
glColor4f(0.0,1.0,0.0,1.0);
glRectf(0.1,0.1,0.6,0.6);
glColor4f(0.0,0.0,1.0,0.3);
glRectf(0.4,0.1,0.9,0.6);
glFlush();
}
void main(void)
{
myinit();
auxReshapeFunc(reshape);
auxMainLoop(display);
}
//end of sample
/////////////////////////////////////////////////////////
��������Ե��ڲ����С�����һ�¸�����ĺ��塣
2 ������Anti-aliasing
���ڼ��������ɢ�����ͼ�Σ����ͼ�α�Ȼ����ʵ������ڲ�࣬���ֲ��
����Ϊ��ֱ��⻬����ľ�ݡ�����ʧȥԭ��ɫ����״��ϸС�����ڻ����
��ʧ�ȡ�ͳͳ��������������Լ��������������������һ�£����ǰ�ԭ
���߽�ĵط���ݲ����õͱ��Ͷȵĵ㲹�ϣ�����Ȳ�Ӱ�������������ֻ��
�Ϻõ�ƽ��Ч������ǰ�ṩ����ʾ�����ú���
void glHint(GLenum target,GLenum hint);
����hint�����ǣ�GL_FASTEST �������Ч��ѡ��
GL_NICEST ������������ѡ��
GL_DONT_CARE û��ѡ��
target ����
GL_POINT_SMOOTH_HINT ָ���㡢
GL_LINE_SMOOTH_HINT �ߡ�
GL_POLYGON_SMOOTH_HINT ����εIJ�������
GL_FOG_HINT ָ���?�����ǰ�ÿ�����ؽ��У�GL_NICEST��
���ǰ�ÿ��������У�GL_FASTEST��
GL_PERSPECTIVE_CORRECTION_HINT ָ����ɫ�����ֵ������
����GL_PERSPECTIVE_CORRECTION_HINT���Ծ������Բ�ֵ�����Ĺ۲����
��Ȼ����Ҫ�Ĺ�������glEnable()����ɵġ�
�ȸ��һ���㡢�߷���������ӡ���Ҫ˵������������������RGBAģʽ�½��У�
��������glEnable()������ΪGL_POINT_SMOOTH GL_LINE_SMOOTH��
GL_POLYGON_SMOOTH�����÷�������RGBAģʽ�����÷�������������ںϴ��?
������õ��ں����ӷֱ��ǣ�GL_SRC_ALPHA��Դ����GL_ONE_MINUS_SRC_ALPHA
��GL_ONE��Ŀ�ģ���
///////////////////////////////////////////////////////////////////////
//sample.cpp
#include "glos.h"
#include <GL/gl.h>
#include <GL/glaux.h>
#include "windows.h"
void myinit(void);
void CALLBACK display(void);
void CALLBACK reshape(GLsizei w,GLsizei h);
void myinit(void)
{
auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);
auxInitPosition(0,0,500,500);
auxInitWindow("sample1");
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
//�������������ݶ���һ��4�䣬���������ȡ���������䣨1��4��
//����Ժ�����ıȽ�һ�·������ͼ�������ĸĽ�
glEnable(GL_LINE_SMOOTH);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
glHint(GL_LINE_SMOOTH_HINT,GL_DONT_CARE);
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);
glShadeModel(GL_FLAT);
}
void CALLBACK reshape(GLsizei w,GLsizei h)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(w<=h)
glOrtho(-5.0,5.0,-5.0*(GLfloat)h/(GLfloat)w,
5.0*(GLfloat)h/(GLfloat)w,-5.0,5.0);
else
glOrtho(-5.0*(GLfloat)h/(GLfloat)w,
5.0*(GLfloat)h/(GLfloat)w,-5.0,5.0,-5.0,5.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void CALLBACK display(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glLineWidth(5.0);
glColor4f(1.0,1.0,0.0,0.7);
glPushMatrix();
glRotatef(45.0,1.0,1.0,0.0);
auxWireOctahedron(2.0);
glPopMatrix();
glFlush();
}
void main(void)
{
myinit();
auxReshapeFunc(reshape);
auxMainLoop(display);
}
//end of sample
///////////////////////////////////////////////////////////////////
�ٸ��һ������η����������
///////////////////////////////////////////////////////////////////
//sample.cpp
#include "glos.h"
#include <GL/gl.h>
#include <GL/glaux.h>
#include "windows.h"
void myinit(void);
void CALLBACK display(void);
void CALLBACK reshape(GLsizei w,GLsizei h);
void myinit(void)
{
auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);
auxInitPosition(0,0,500,500);
auxInitWindow("sample1");
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
GLfloat mat_ambient[]={0.5,0.5,0.0,1.0};
GLfloat mat_diffuse[]={1.0,0.8,0.1,1.0};
GLfloat position[]={1.0,0.0,1.0,0.0};
glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient);
glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);
glLightfv(GL_LIGHT0,GL_POSITION,position);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glCullFace(GL_BACK);
glEnable(GL_CULL_FACE);
//���ö���η�����
glEnable(GL_POLYGON_SMOOTH);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE);
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);
glShadeModel(GL_FLAT);
}
void CALLBACK reshape(GLsizei w,GLsizei h)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(w<=h)
glOrtho(-5.0,5.0,-5.0*(GLfloat)h/(GLfloat)w,
5.0*(GLfloat)h/(GLfloat)w,-5.0,5.0);
else
glOrtho(-5.0*(GLfloat)h/(GLfloat)w,
5.0*(GLfloat)h/(GLfloat)w,-5.0,5.0,-5.0,5.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void CALLBACK display(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glLineWidth(5.0);
glColor4f(1.0,1.0,0.0,0.7);
glPushMatrix();
glRotatef(45.0,1.0,1.0,0.0);
auxSolidIcosahedron(2.0);
glPopMatrix();
glFlush();
}
void main(void)
{
myinit();
auxReshapeFunc(reshape);
auxMainLoop(display);
}
//end of sample
////////////////////////////////////////////////////////////////////
�Ƚϲ��÷������Ľ��������Կ��������ֱ�߽߱����ݵõ���ƽ����
3 �?
����������?���?��������ʹ��������ʵ�����Ҵ����ټ�����������
F22����Ҳ�������?��Զ��ֱ��Ӱ����Ϸ���ٶȰɡ�һ����?ģ���ǿ���
������ʵ����ɫ���?��ɫ���ںϡ������?��Ũ���ж������ѧģ��������
�������Ա仯��ָ��仯��ָ��ƽ���仯�ȡ������?Ҳ�ܼ�ֻҪ��ѭ����
���裺
һ �����? glEnable(GL_FOG);
�� �����? glFog*()
void glFog{if}[v](GLenum,TYPE param);
��GLenum��GL_FOG MODEʱ��param������GL_EXP��ָ��
GL_EXP2��ָ��ƽ����
GL_LINEAR�����ԣ�
��GLenum��GL_FOG_DENSITY GL_FOG_START GL_FOG_ENDʱ��param�ֱ�ָ����ͬ
�?��ѧģ���²�ͬ���㹫ʽ�IJ�����������Բ��������ֲᡣ
��GLenumʱGL_FOG_COLORʱ��param��ָ����ɫ������ָ��
�� ��Ҫʱ������glHint(GL_FOG_HINT,XX)ָ���?Ч��
���������ӣ�
///////////////////////////////////////////////////////////////////
//sample.cpp
#include "glos.h"
#include <GL/gl.h>
#include <GL/glaux.h>
#include "windows.h"
void myinit(void);
void CALLBACK display(void);
void CALLBACK reshape(GLsizei w,GLsizei h);
void myinit(void)
{
auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);
auxInitPosition(0,0,500,500);
auxInitWindow("sample1");
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
GLfloat mat_ambient[]={0.0,0.1,0.8,1.0};
GLfloat mat_diffuse[]={0.0,0.3,0.6,1.0};
GLfloat mat_specular[]={1.0,0.0,1.0,1.0};
GLfloat mat_shininess[]={15.0};
GLfloat position[]={5.0,5.0,5.0,0.0};
GLfloat fogColor[4]={0.6,0.6,0.0,1.0};
glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient);
glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);
glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);
glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);
glLightfv(GL_LIGHT0,GL_POSITION,position);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glFrontFace(GL_CW);
// glEnable(GL_POLYGON_SMOOTH);
// glEnable(GL_BLEND);
// glBlendFunc(GL_SRC_ALPHA,GL_ONE);
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);
//�����?����
glEnable(GL_FOG);
{
//�������Ա仯���?Ч��
glFogi(GL_FOG_MODE,GL_LINEAR);
//ָ���?��ɫ����ɫ��
glFogfv(GL_FOG_COLOR,fogColor);
//ָ�������Ա仯ʱ���㹫ʽ�IJ���
glFogf(GL_FOG_START,3.0);
glFogf(GL_FOG_END,15.0);
//�涨�?Ч�������
glHint(GL_FOG_HINT,GL_DONT_CARE);
}
// glShadeModel(GL_FLAT);
}
void CALLBACK reshape(GLsizei w,GLsizei h)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(w<=h*3)
glOrtho(-6.0,6.0,-2.0*(GLfloat)h*3/(GLfloat)w,
2.0*(GLfloat)h*3/(GLfloat)w,0.0,10.0);
else
glOrtho(-6.0*(GLfloat)h/(GLfloat)w,
6.0*(GLfloat)h/(GLfloat)w,-2.0,2.0,0.0,10.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void CALLBACK display(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
//�ڲ�ͬԶ��Z������ͬ���С����ɫ�Ļ�����ʾ�?��Ч��
glPushMatrix();
glTranslatef(-3.0,-1.5,-3.0);
auxSolidTorus(0.6,1.5);
glPopMatrix();
glPushMatrix();
glTranslatef(-0.5,-0.5,-6.0);
auxSolidTorus(0.6,1.5);
glPopMatrix();
glPushMatrix();
glTranslatef(2.0,0.5,-8.0);
auxSolidTorus(0.6,1.5);
glPopMatrix();
glFlush();
}
void main(void)
{
myinit();
auxReshapeFunc(reshape);
auxMainLoop(display);
}
//end of sample
////////////////////////////////////////////////////////////////////
--
�� ��Դ:��BBS ˮľ�廪վ bbs.net.tsinghua.edu.cn��[FROM: 166.111.74.90]
BBSˮľ�廪վ�þ�����
�� ��Դ: �й�ƴ�BBSվ [bbs.ustc.edu.cn]
Technical Details
Message-ID:
<980505.yWbX0$PBBS@bbs.ustc.edu.cn>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailShow Full Headers
Complete Article Headers
X-Google-Language: Chinese,GB X-Google-Thread: fc86e,7aca6cc44e4857e1,start X-Google-Attributes: gidfc86e,public From: Ambi_A@bbs.ustc.edu.cn (����) Subject: OPENGL(16) Date: 1998/05/05 Message-ID: <980505.yWbX0$PBBS@bbs.ustc.edu.cn> X-Deja-AN: 350443998 Organization: �й�ƴ�BBSվ Newsgroups: cn.bbs.comp.program