🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: cn.bbs.comp.program
Article #979

OPENGL(18)

#979
From: ����
Date: Tue, 05 May 1998 00:00
257 lines
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-mail

Show 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