Article View: cn.bbs.comp.program
Article #979OPENGL(18)
From: ����
Date: Tue, 05 May 1998 00:00
Date: Tue, 05 May 1998 00:00
257 lines
11120 bytes
11120 bytes
BBSˮľ�廪վ�þ�����
������: yxy (��˿˿#С��ӥ���߲�����), ����: GAME_Designer
�� ��: OPENGL(18 ����4:00�洩 :)
����վ: BBS ˮľ�廪վ (Fri Feb 20 16:20:40 1998)
OPENGL֡����Ͷ���
��Ϊ���һ�أ����ǽ������Լ���ʱ��Ӱ�Ķ�������û��VOODOO����ҿ���OPENGL
��������������ô��Ϊ�İɣ���Ч����������⽫��20�ι�ˮ����Ŀ�ꡣ
����ǰ�棨�����ǵ����ǵ��ĴΣ���������ü��α任ʵ�ֶ�������ʱ��Ч��
���ڿ��϶��������⣬��ΪƵ������˸����������Ҫ�ġ���Ϊ��ʱ������֮ǰҲ
�ǣ����õ��ǵ�����ģʽ����������ʾ�IJ��ֱ�����ı�Ȼ����ٶ�ƿ����
������˸��һ�����Ķ���������ʵ���϶���ͨ��˫����ʵ�ֵģ�Ӳ��Ҳ�ã���
��Ҳ�ã���ҿ��Բο������õ�������Ϸ���98-2�е�һƪ���¡���ǰ̨��ʾ
����������ʾʱ����̨�����Ѿ����м��㣬������ϰ���������ͨ��濽��һ
������ɣ���ֹ��˸�ij��֡�
һ OPENGL֡�����ʵ��
1 ��ɫ���棨Color Buffer���������ݿ�������ɫ�������RGBA��ݣ�����õ�
OPENGLϵͳ֧������ͼ�����������������档
2 ��Ȼ��棨Depth Buffer�� ����Z-BUFFER�����ڱ�������Z�������ֵ�����
��ı����С�Ĵ��棬����ʵ������
3 ģ�建�棨Stencil Buffer�� ���Ա�����Ļ��ijЩλ��ͼ�β��䣬�������
�ػ档��������Ϥ�Ŀ��ɻ�������Ϸ�ļ�ʻ���ӽǣ�ֻ�е�������ľ���
�仯�������DZ�ȵȲ����仯��
4 �ۼƻ��棨Accumulation Buffer�� ֻ����RGBA��ݣ����ںϳ�ͼ��������ij
�����е�λͼ��������ϳ�һ����ͼ��
�� ֡��������
�Ը߷ֱ���ģʽ�����ǹ������������OPENGLһ����Ѱ��Ӳ��ͬʱ��ɣ�
����������ν��������ǰ��ÿ�α��õ�glClearColor()����Ѿ���İ��ɡ�
�����������ֵ
void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha);
void glClearIndex(GLfloat index);
void glClearDepth(GLclampd depth);
void glClearStencil(GLint s);
void glClerAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha);
Ȼ��������
void glClear(GLbitfield mask);
mask: GL_COLOR_BUFFER_BIT|
GL_DEPTH_BUFFER_BIT|
GL_STENCIL_BUFFER_BIT|
GL_ACCUM_BUFFER_BIT
�� ˫���涯��
��������еı任�������ɺ�̨����ļ��㣬Ȼ������н����ǰ̨���ɡ�
�������ֻ�����������ݣ�
���ȳ�ʼ��ʱ����
auxInitDisplayMode(AUX_DOUBLE|AUX_RGBA);
��AUX_DOUBLE����AUX_SINGLE���ó�˫����ģʽ
Ȼ���ڻ�����ϣ�glFlush();����
auxSwapBuffers();
���л��濽����Easy like sunday morning!!
��Ȼ��ͬϵͳ�£��������Ҳ�?ͬ���Ͼ��Ǹ���⺯��ô��������X-WINDOWS
�¿���ʹ��glxSwapBuffers()����˼��ȫһ��
��˵˵����������ӵĹ��ܣ�
��һ����ɫ�Ļ���Ϊ���壬��һ����ɫ���������ʾ��Դ��λ�á�
С�ϴ���Ļ���˶����ҷ������Կ�����״���Ϲ�Ӱ�ı仯��
������
������/�Ҽ�ʼ/ֹͣ��Դ���˶�
���� ��/��/��/�ң����ƻ�״��� ǰ��/����/��ת
//////////////////////////////////////////////////////////////////
//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 CALLBACK stepDisplay(void);
void CALLBACK startIdleFunc(AUX_EVENTREC *event);
void CALLBACK stopIdleFunc(AUX_EVENTREC *event);
//step�DZ�ʾ��״����ת�IJ���z�ǿ�����ǰ�����IJ���
static GLfloat step=0.0,z=0.0;
//position�ǿ��ƹ�Դ��λ�õIJ���
static GLfloat position[]={-20.0,0.0,-5.0,1.0};
void myinit(void)
{
//��ʼ��ע����˫����ģʽ
auxInitDisplayMode(AUX_DOUBLE|AUX_RGBA);
auxInitPosition(0,0,500,500);
auxInitWindow("sample1");
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
glFrontFace(GL_CW);
glEnable(GL_LIGHTING);
glFrontFace(GL_CW);
// 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*3)
glOrtho(-2.0,2.0,-2.0*(GLfloat)h/(GLfloat)w,
2.0*(GLfloat)h/(GLfloat)w,-10.0,10.0);
else
glOrtho(-2.0*(GLfloat)h/(GLfloat)w,
2.0*(GLfloat)h/(GLfloat)w,-2.0,2.0,-10.0,10.0);
*/
//����������Ӿ������н��ԶС��Ч��
glFrustum(-6.0,6.0,-6.0,6.0,3.0,20.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void CALLBACK display(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
//�����ڵ�ǰλ�����ù�Դ
glPushMatrix();
GLfloat light_ambient[]={0.3,0.5,0.3};
GLfloat light_diffuse[]={1.0,1.0,1.0};
GLfloat light_specular[]={0.8,0.8,0.0};
glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient);
glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse);
glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular);
glLightfv(GL_LIGHT0,GL_POSITION,position);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
//�ڹ�Դ�Ա��ƻ�ɫ������С��־��Դλ��
//С���Դλ����position[]����
glTranslatef(position[0],position[1],position[2]-1.0);
GLfloat mat_ambient[]={1.0,0.0,0.0,1.0};
GLfloat mat_diffuse[]={1.0,1.0,0.0,1.0};
GLfloat mat_specular[]={1.0,1.0,0.0,1.0};
GLfloat mat_shininess[]={50.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);
auxSolidSphere(0.5);
glPopMatrix();
//�ڵ�ǰλ�û�����ɫ��״���λ����step z��ͬ����
glPushMatrix();
glTranslatef(0.0,0.0,-8.0+z);
glRotatef(135.0+step,0.0,1.0,0.0);
GLfloat mat2_ambient[]={0.0,0.0,1.0,1.0};
GLfloat mat2_diffuse[]={0.2,0.0,0.99,1.0};
GLfloat mat2_specular[]={1.0,1.0,0.0,1.0};
GLfloat mat2_shininess[]={50.0};
glMaterialfv(GL_FRONT,GL_AMBIENT,mat2_ambient);
glMaterialfv(GL_FRONT,GL_DIFFUSE,mat2_diffuse);
glMaterialfv(GL_FRONT,GL_SPECULAR,mat2_specular);
glMaterialfv(GL_FRONT,GL_SHININESS,mat2_shininess);
auxSolidTorus(2.0,3.5);
glPopMatrix();
glFlush();
//������ϣ����潻��
auxSwapBuffers();
}
void CALLBACK Up(void)
{
//���̡��ϡ��Ĵ���
z=z+0.05;
}
void CALLBACK Down(void)
{
//���̡��¡��Ĵ���
z=z-0.05;
}
void CALLBACK Left(void)
{
//���̡��Ĵ���
step=step+2.0;
}
void CALLBACK Right(void)
{
//���̡��ҡ��Ĵ���
step=step-2.0;
}
void CALLBACK stepDisplay(void)
{
//ϵͳ��ʱ�ĵ��ù��
position[0]=position[0]+0.5;
if(position[0]>20.0) position[0]=-20.0;
display();
}
void CALLBACK startFunc(AUX_EVENTREC *event)
{
//������Ĵ���
auxIdleFunc(stepDisplay);
}
void CALLBACK stopIdleFunc(AUX_EVENTREC *event)
{
//����Ҽ�Ĵ���
auxIdleFunc(0);
}
void main(void)
{
myinit();
auxReshapeFunc(reshape);
auxIdleFunc(stepDisplay);
auxMouseFunc(AUX_LEFTBUTTON,AUX_MOUSEDOWN,startFunc);
auxMouseFunc(AUX_RIGHTBUTTON,AUX_MOUSEDOWN,stopIdleFunc);
auxKeyFunc(AUX_UP,Up);
auxKeyFunc(AUX_DOWN,Down);
auxKeyFunc(AUX_LEFT,Left);
auxKeyFunc(AUX_RIGHT,Right);
auxMainLoop(display);
}
//end of sample
////////////////////////////////////////////////////////////////////
�����õ�����CALLBACK����ֱ��?ͬ��Ϣ
�Ƚ�ǰ����ʾ�Ķ���Ч����˸���������Ը����֣���������������������
˫����ĵط��ijɵ����棺����AUX_SINGLE��ȥ��auxSwapBuffers()��������˸
�Ķ�ô�����������ڱ���Ļ�ͼ���ܵ���β����ֻ�ܹ��Լ����������֡�
д��������ڴ���OPENGL������ʵ�ֵ�������ġ�������ʶ�������롣
�����ʲô�������һ��ᾡ�����䣬���Ҳ�������ɲ��䡣
--
�� ��Դ:��BBS ˮľ�廪վ bbs.net.tsinghua.edu.cn��[FROM: 166.111.74.90]
BBSˮľ�廪վ�þ�����
�� ��Դ: �й�ƴ�BBSվ [bbs.ustc.edu.cn]
Technical Details
Message-ID:
<980505.yWbXx$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,911dbc171f2f4555,start X-Google-Attributes: gidfc86e,public From: Ambi_A@bbs.ustc.edu.cn (����) Subject: OPENGL(18) Date: 1998/05/05 Message-ID: <980505.yWbXx$PBBS@bbs.ustc.edu.cn> X-Deja-AN: 350448901 Organization: �й�ƴ�BBSվ Newsgroups: cn.bbs.comp.program