🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

OPENGL(16)

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

Show 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