🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

OPENGL(7)

#968
From: ����
Date: Tue, 05 May 1998 00:00
367 lines
15781 bytes
BBSˮľ�廪վ�þ�����
������: yxy (��˿˿#���ߵ�С��ӥ), ����: GAME_Designer 
��  ��: OPENGL(7) 
����վ: BBS ˮľ�廪վ (Mon Jan 19 11:20:59 1998) 
 
������һ�Σ���ؽ����ʣ� 
OPENGLͨ����϶�R��G��B�Ľ��Ʒ����������ƶ��������ɫ�� 
Ҳ��Ϊ�����������䡢���淴��ɷ֡����Ǿ������϶Ի����⡢�������� 
���淴���ķ���̶ȡ������ϵ��������Դ���Խ�Ͼ��ǹ۲��������ʾ 
Ч�������ɫ�����򣬴󲿷��Ǻ�ɫ���ڹ�Դ�γɵĸ߹⴦������ֹ�Դ 
��������ɫ����EASY������ô�� 
 
���ʵĶ��壺 
void glMaterial{if}[v](GLenum face,GLenum pname,TYPE param); 
���� 
face:������GL_FRONT��GL_BACK��GL_FRONT_AND_BACK,�������ǰ����Ӧ�� 
���������һ�������ϡ� 
pname˵���ض��������ԣ���������һ�ι�Դ�Ķ��壩�� 
 
pname                     ȱʡֵ             ˵�� 
 
GL_AMBIENT                0.2,0.2,0.2,1.0    ���ʵĻ�������� 
GL_DIFFUSE                0.8,0.8,0.8,1.0    ���ʵ�������� 
GL_AMBIENT_AND_DIFFUSE                       ���ʵĻ���������������ɫ 
GL_SPECULAR               0.0,0.0.0.0,1.0    ���ʾ��淴��� 
GL_SHINESS                0.0                ����ָ����նȣ� 
GL_EMISSION               0.0,0.0,0.0,1.0    ���ʵķ�����ɫ 
GL_COLOR_INDEXES          0,1,1              ���ʵĻ����⡢�������;��� 
                                             �������ɫ 
�뿴������ʵļ����ӣ� 
//////////////////////////////////////////////////////////////////////// 
//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); 
//      glShadeModel(GL_FLAT); 
 
//���ȶ���һ�����ʣ����巽���dz�����ǰ�潲���Ĺ�Դ���塣 
        GLfloat mat_ambient[]={0.8,0.8,0.8,1.0}; 
//���� ��ɫ ������������ 
        GLfloat mat_diffuse[]={0.8,0.0,0.8,1.0}; 
//���� ����ɫ �ľ��淴������ 
        GLfloat mat_specular[]={1.0,0.0,1.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); 
 
//�������Ǽ򻯹�Դ������ʾ���ʵ�Ч�� 
//��������ָֻ����Դλ�ã�����Ĭ�ϣ���ɫ��Դ�� 
//��Ҳ���Լ����Դ�Ķ��壬������Դ�Ͳ��ʵĺϳɵ�Ч�� 
//������Ϊ�����ܹ��ϳɣ����ܲ������ʵ����ж�Ķ��Ч����Ҳ���� 
//3D���������˵��������ڡ� 
        GLfloat light_position[]={1.0,1.0,1.0,0.0}; 
        glLightfv(GL_LIGHT0,GL_POSITION,light_position); 
//      GLfloat light_diffuse[]={0.0,0.0,1.0,1.0}; 
//      glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse); 
 
//����Դ����Ӧ�� 
        glEnable(GL_LIGHTING); 
        glEnable(GL_LIGHT0); 
 
//��ɫ���� 
//*******��ʵ˵���֣�����Ǵ����� Z-BUFFER ѽ************// 
        glDepthFunc(GL_LESS); 
        glEnable(GL_DEPTH_TEST); 
} 
 
void CALLBACK reshape(GLsizei w,GLsizei h) 
{ 
glViewport(0,0,w,h); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
if(w<=h) 
 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); 
 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
} 
 
void draw(void) 
{ 
auxSolidSphere(1.0); 
} 
 
void CALLBACK display(void) 
{ 
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); 
 
glLoadIdentity(); 
draw(); 
glFlush(); 
} 
void main(void) 
{ 
    myinit(); 
     
    auxReshapeFunc(reshape); 
    auxMainLoop(display); 
} 
//end of sample 
//////////////////////////////////////////////////// 
 
ͨ�����ϵ����ӣ����ǻῴ�����ʶ����ʵ�ֺ͹�Դ��Ч����һ��ģ� 
�������ճ��ĸо���������ʸ�ӷ�����ǵ�ϰ�ߡ����Դʹ�ð׹⡣ 
�������ǿ�������һ����ɫ������߹ⲿ�ֳ�������ɫ�� 
 
��Ϊ�Ƚϣ��������Ǹ��һ��12����ɫ������ӣ���ҿ��Կ������� 
��Դ������Ӧ�õ�Ч����һ��Ƚϡ� 
�������֮ǰ�������������� 
void glPushMatrix(); 
void glPopMatrix(); 
��ǰ���Ѿ��������м���ͶӰ�任���Ǿ�����˵Ľ�������ϣ�� 
����һ����ʼ���㣬��Ҫ�õ���������Ҫ���������ջ�;����ջ�� 
�����������⣬Ϊ�������Ͻǻ�һ�������ȱ��浱ǰ����glPushMatrix() 
����ջ����Ȼ������ƽ�Ƶ����Ͻǣ�Ȼ�����auxSolidSphere(1.0)���� 
һ���뾶1.0������ʱ�ٵ���glPopMatrix()�������ջ�������ֻص�ԭʼ��� 
�㣬��ʱ����������Ͻ��֡� 
�������ܳ�����ʵ���ϣ����IJ���ͳͳ���ظ���12����Ĺ���������Ҳ�Ƚ� 
����⡣ 
////////////////////////////////////////////////////////////////// 
//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.1,0.1,0.0); 
        glClear(GL_COLOR_BUFFER_BIT); 
//      glShadeModel(GL_FLAT); 
 
//���ȶ����Դ 
        GLfloat light_ambient[]={0.0,0.0,0.0,1.0}; 
        GLfloat light_diffuse[]={1.0,1.0,1.0,1.0}; 
        GLfloat light_specular[]={1.0,1.0,1.0,1.0}; 
        GLfloat light_position[]={0.0,3.0,2.0,0.0}; 
        GLfloat Imodel_ambient[]={0.4,0.4,0.4,1.0}; 
 
//Ӧ�ù�Դ 
        glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient); 
        glLightfv(GL_LIGHT0,GL_POSITION,light_position); 
        glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse); 
 
        glEnable(GL_LIGHTING); 
        glEnable(GL_LIGHT0); 
 
//��ʼ��Z BUFFER 
        glDepthFunc(GL_LESS); 
        glEnable(GL_DEPTH_TEST); 
} 
 
void CALLBACK reshape(GLsizei w,GLsizei h) 
{ 
glViewport(0,0,w,h); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
if(w<=h) 
 glOrtho(-6.0,6.0,-6.0*(GLfloat)h/(GLfloat)w, 
         6.0*(GLfloat)h/(GLfloat)w,-10.0,10.0); 
else 
  glOrtho(-6.0*(GLfloat)h/(GLfloat)w, 
         6.0*(GLfloat)h/(GLfloat)w,-6.0,6.0,-10.0,10.0); 
 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
} 
 
void draw(void) 
{ 
auxSolidSphere(1.0); 
} 
 
void CALLBACK display(void) 
{ 
   glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); 
 
//����������ݿ� 
        GLfloat no_mat[]={0.0,0.0,0.0,1.0}; 
        GLfloat mat_ambient[]={0.7,0.7,0.7,1.0}; 
        GLfloat mat_ambient_color[]={0.8,0.8,0.2,1.0}; 
        GLfloat mat_diffuse[]={0.1,0.5,0.8,1.0}; 
        GLfloat mat_specular[]={1.0,1.0,1.0,1.0}; 
        GLfloat no_shininess[]={0.0}; 
        GLfloat low_shininess[]={5.0}; 
        GLfloat high_shininess[]={100.0}; 
        GLfloat mat_emission[]={0.3,0.2,0.2,0.0}; 
////////////////////////////////////////////////////////// 
//1-1 ����������⣬�޻�����;���� 
        glPushMatrix(); 
        glTranslatef(-3.75,3.0,0.0); 
        glMaterialfv(GL_FRONT,GL_AMBIENT,no_mat); 
        glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse); 
        glMaterialfv(GL_FRONT,GL_SPECULAR,no_mat); 
        glMaterialfv(GL_FRONT,GL_SHININESS,no_shininess); 
        glMaterialfv(GL_FRONT,GL_EMISSION,no_mat); 
        draw(); 
        glPopMatrix(); 
 
//1-2 ��������⣬�����е͸߹⣬�޻�����   
        glPushMatrix(); 
        glTranslatef(-1.25,3.0,0.0); 
        glMaterialfv(GL_FRONT,GL_AMBIENT,no_mat); 
        glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse); 
        glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular); 
        glMaterialfv(GL_FRONT,GL_SHININESS,low_shininess); 
        glMaterialfv(GL_FRONT,GL_EMISSION,no_mat); 
        draw(); 
        glPopMatrix(); 
 
//1-3 ���������;���⣬�����ĸ߹⣬�޻����� 
        glPushMatrix(); 
        glTranslatef(1.25,3.0,0.0); 
        glMaterialfv(GL_FRONT,GL_AMBIENT,no_mat); 
        glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse); 
        glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular); 
        glMaterialfv(GL_FRONT,GL_SHININESS,high_shininess); 
        glMaterialfv(GL_FRONT,GL_EMISSION,no_mat); 
        draw(); 
        glPopMatrix(); 
 
//1-4 ���������ͷ���⣬�޻�����;��淴��� 
        glPushMatrix(); 
        glTranslatef(3.75,3.0,0.0); 
        glMaterialfv(GL_FRONT,GL_AMBIENT,no_mat); 
        glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse); 
        glMaterialfv(GL_FRONT,GL_SPECULAR,no_mat); 
        glMaterialfv(GL_FRONT,GL_SHININESS,no_shininess); 
        glMaterialfv(GL_FRONT,GL_EMISSION,mat_emission); 
        draw(); 
        glPopMatrix(); 
////////////////////////////////////////////////////////////// 
//2-1 ���������ͻ����⣬�޾��淴��� 
        glPushMatrix(); 
        glTranslatef(-3.75,0.0,0.0); 
        glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient); 
        glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse); 
        glMaterialfv(GL_FRONT,GL_SPECULAR,no_mat); 
        glMaterialfv(GL_FRONT,GL_SHININESS,no_shininess); 
        glMaterialfv(GL_FRONT,GL_EMISSION,no_mat); 
        draw(); 
        glPopMatrix(); 
 
//2-2 ��������⡢������;���⣬�����е͸߹� 
        glPushMatrix(); 
        glTranslatef(-1.25,0.0,0.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,low_shininess); 
        glMaterialfv(GL_FRONT,GL_EMISSION,no_mat); 
        draw(); 
        glPopMatrix(); 
 
//2-3 ��������⻷����;���⣬�����к����ĸ߹� 
        glPushMatrix(); 
        glTranslatef(1.25,0.0,0.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,high_shininess); 
        glMaterialfv(GL_FRONT,GL_EMISSION,no_mat); 
        draw(); 
        glPopMatrix(); 
 
//2-4��������⡢������ͷ���⣬�޾���� 
        glPushMatrix(); 
        glTranslatef(3.75,0.0,0.0); 
        glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient); 
        glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse); 
        glMaterialfv(GL_FRONT,GL_SPECULAR,no_mat); 
        glMaterialfv(GL_FRONT,GL_SHININESS,no_shininess); 
        glMaterialfv(GL_FRONT,GL_EMISSION,mat_emission); 
        draw(); 
        glPopMatrix(); 
/////////////////////////////////////////////////////////////// 
//3-1 ��������������ɫ�Ļ����⣬�޾���� 
        glPushMatrix(); 
        glTranslatef(-3.75,-3.0,0.0); 
        glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient_color); 
        glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse); 
        glMaterialfv(GL_FRONT,GL_SPECULAR,no_mat); 
        glMaterialfv(GL_FRONT,GL_SHININESS,no_shininess); 
        glMaterialfv(GL_FRONT,GL_EMISSION,no_mat); 
        draw(); 
        glPopMatrix(); 
 
//3-2��������������ɫ�Ļ������Լ�����⣬���е͸߹� 
        glPushMatrix(); 
        glTranslatef(-1.25,-3.0,0.0); 
        glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient_color); 
        glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse); 
        glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular); 
        glMaterialfv(GL_FRONT,GL_SHININESS,low_shininess); 
        glMaterialfv(GL_FRONT,GL_EMISSION,no_mat); 
        draw(); 
        glPopMatrix(); 
 
//3-3 ��������������ɫ�Ļ������Լ�����⣬���к����ĸ߹� 
        glPushMatrix(); 
        glTranslatef(1.25,-3.0,0.0); 
        glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient_color); 
        glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse); 
        glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular); 
        glMaterialfv(GL_FRONT,GL_SHININESS,high_shininess); 
        glMaterialfv(GL_FRONT,GL_EMISSION,no_mat); 
        draw(); 
        glPopMatrix(); 
 
//3-4 ��������������ɫ�Ļ������Լ�����⣬�޾���� 
        glPushMatrix(); 
        glTranslatef(3.75,-3.0,0.0); 
        glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient_color); 
        glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse); 
        glMaterialfv(GL_FRONT,GL_SPECULAR,no_mat); 
        glMaterialfv(GL_FRONT,GL_SHININESS,no_shininess); 
        glMaterialfv(GL_FRONT,GL_EMISSION,mat_emission); 
        draw(); 
        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.yWbSj$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,9cce33a1215517a3,start
X-Google-Attributes: gidfc86e,public
From: Ambi_A@bbs.ustc.edu.cn (����)
Subject: OPENGL(7)
Date: 1998/05/05
Message-ID: <980505.yWbSj$PBBS@bbs.ustc.edu.cn>
X-Deja-AN: 350416394
Organization: �й�ƴ�BBSվ
Newsgroups: cn.bbs.comp.program