Article View: cn.bbs.comp.program
Article #976OPENGL(15)
From: ����
Date: Tue, 05 May 1998 00:00
Date: Tue, 05 May 1998 00:00
299 lines
11074 bytes
11074 bytes
BBSˮľ�廪վ�þ�����
������: yxy (��˿˿#С��ӥ���߲�����), ����: GAME_Designer
�� ��: OPENGL(15)
����վ: BBS ˮľ�廪վ (Tue Feb 17 21:40:18 1998)
Ϊʲô3D��ͼ�����ܲ���������Ч����Ϊ����3D��ͼ����������һЩ
��ʵ���ѵ�ʵ�ֵ���ʵ�ĸ��ܡ��ر���һЩ����Ĺ�ӰЧ��
��ʵ��Դǰ���Ѿ����ĺ�ȫ���ˣ�ֻ��ȱ��һЩר�ŵ����ӡ�������������
����һ����ʶ�����ǽ��������п���һ���ط��Ĺ�Դ�Բ�ͬ���巢����ͬ�Ĺ�
������ʵ�����ټ�İɣ�
1.˫����գ�
void glLightModeli(LIGHT_MODEL_TWO_SIDE,GL_TRUE);
���ռ���ͨ���ǶԶ���ν��еġ�һ�����ù��յ��������Ƕ�����Ķ���Σ���
�����DZ��棬���������һ�����屻���Դ�ĸ����ֻ�Ӱ��ɼ��ԣ���ô
�б�Ҫ�Զ����˫�涼���м��㣬��������溯��Ĺ��ܣ�ȡ����һ����ֻ���
����������ΪGL_FALSE��
2.�۹�Դ
����۹�Դ�ĺ�����������glLightfv()����Ҫ�趨�IJ����������Դλ�á���Դ
��ɢ��Ǻ�Դ�۹ⷽ��
����ʵ�ֿ��Կ��������ӣ�
//////////////////////////////////////////////////////////
//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 initlights(void)
{
//��������������Ե���ֵ
GLfloat mat_ambient[]={0.2,0.2,0.2,1.0};
GLfloat mat_diffuse[]={0.8,0.8,0.8,1.0};
GLfloat mat_specular[]={1.0,1.0,1.0,1.0};
GLfloat mat_shininess[]={80.0};
//�����0����Դ�����ԣ�����ƽ�еĻ����⣬û�о۹�Ч��
GLfloat light0_diffuse[]={0.0,0.0,1.0,1.0};
GLfloat light0_position[]={1.0,1.0,1.0,0.0};
//�����һ����Դ�����ԣ��۹��һ��
GLfloat light1_ambient[]={0.2,0.2,0.2,1.0};
GLfloat light1_diffuse[]={1.0,0.0,0.0,1.0};
GLfloat light1_specular[]={1.0,0.6,0.6,1.0};
GLfloat light1_position[]={-3.0,-3.0,3.0,1.0};
GLfloat spot_direction[]={1.0,1.0,-1.0};
//����ڶ�����Դ�����ԣ��۹�ƶ���
GLfloat light2_ambient[]={0.2,0.6,0.2,1.0};
GLfloat light2_diffuse[]={0.0,1.0,0.0,1.0};
GLfloat light2_specular[]={0.0,1.0,0.0,1.0};
GLfloat light2_position[]={-3.0,-3.0,3.0,1.0};
GLfloat spot2_direction[]={1.0,1.0,-1.0};
//���������ǿ�����һ�͵ڶ����۹�Դ��������ɫ�Ķ�����һ��ƫ�죬һ��ƫ��
//����û���κβ�ͬ��������������Ǻ������ģ���һ�����忪��һ����Դ����
//��һ�����忪����һ����Դ���ͻ����һ�����Դ�Բ�ͬ���巢����ͬ���Ч��
//��ǰ������Զ������Ӧ��
glLightfv(GL_LIGHT0,GL_DIFFUSE,light0_diffuse);
glLightfv(GL_LIGHT0,GL_POSITION,light0_position);
glLightfv(GL_LIGHT1,GL_AMBIENT,light1_ambient);
glLightfv(GL_LIGHT1,GL_DIFFUSE,light1_diffuse);
glLightfv(GL_LIGHT1,GL_SPECULAR,light1_specular);
glLightfv(GL_LIGHT1,GL_POSITION,light1_position);
//����۹�Ʒ�ɢ��
glLightf(GL_LIGHT1,GL_SPOT_CUTOFF,30.0);
//����۹�Ʒ��䷽�������
glLightfv(GL_LIGHT1,GL_SPOT_DIRECTION,spot_direction);
glLightfv(GL_LIGHT2,GL_AMBIENT,light2_ambient);
glLightfv(GL_LIGHT2,GL_DIFFUSE,light2_diffuse);
glLightfv(GL_LIGHT2,GL_SPECULAR,light2_specular);
glLightfv(GL_LIGHT2,GL_POSITION,light2_position);
glLightf(GL_LIGHT2,GL_SPOT_CUTOFF,30.0);
glLightfv(GL_LIGHT2,GL_SPOT_DIRECTION,spot2_direction);
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);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHT1);
glEnable(GL_LIGHT2);
}
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);
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);
initlights();
// 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);
//���ȱ���۹�Դһ������λ�ã�ͬһλ�ã�
glPushMatrix();
glTranslated(-3.0,-3.0,3.0);
glDisable(GL_LIGHTING);
glColor3f(1.0,0.0,0.0);
auxWireCube(0.1);
glEnable(GL_LIGHTING);
glPopMatrix();
//�ص��ڶ�����Դ��ֻ���õ�һ����Դ���죩����������һ
glPushMatrix();
glDisable(GL_LIGHT2);
glTranslated(0.0,2.0,0.0);
auxSolidSphere(2.0);
glPopMatrix();
//�ص���һ����Դ��ֻ���õڶ�����Դ���̣������������
glPushMatrix();
glDisable(GL_LIGHT1);
glEnable(GL_LIGHT2);
glTranslated(0.0,-2.0,0.0);
auxSolidSphere(2.0);
glPopMatrix();
glFlush();
}
void main(void)
{
myinit();
auxReshapeFunc(reshape);
auxMainLoop(display);
}
//end of sample
///////////////////////////////////////////////////////////////
һ����ʵ�����Լ���龰�����ˡ����������ԣ�
�����Դ֮ǰ���ٸ��һ����Դ�ƶ������ӣ������õ��������Ϣ����Ӧ��ʵ��
�dz�����OPENGL�ĸ�����ṩ�ķ�ʽ����һ��CALLBACK����ɣ�����ǰ��
����Ӧ��������ķ�����ȫһ��
//////////////////////////////////////////////////////////////
//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);
//���ƹ�Դ�ƶ��ı���
static int step=0;
//�����Ӧ��CALLBACK����
void CALLBACK movelight(AUX_EVENTREC *event)
{
step=(step+15)%360;
}
void initlights(void)
{
GLfloat mat_ambient[]={0.2,0.2,0.2,1.0};
GLfloat mat_diffuse[]={0.8,0.8,0.8,1.0};
GLfloat mat_specular[]={1.0,1.0,1.0,1.0};
GLfloat mat_shininess[]={80.0};
GLfloat light0_diffuse[]={0.0,0.0,1.0,1.0};
GLfloat light0_ambient[]={0.2,0.5,0.5,1.0};
glLightfv(GL_LIGHT0,GL_DIFFUSE,light0_diffuse);
glLightfv(GL_LIGHT0,GL_AMBIENT,light0_ambient);
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);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
}
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);
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);
initlights();
// 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)
{
GLfloat position[]={0.0,0.0,1.5,1.0};
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(0.0,0.0,-5.0);
glPushMatrix();
//��Դ��λ��ֻ����ת����step������ÿ����������һ�£�step��ֵ���ı�
//���¹�Դλ�õĸı�
glRotated((GLdouble)step,-1.0,1.0,1.0);
glLightfv(GL_LIGHT0,GL_POSITION,position);
glTranslated(0.0,0.0,1.5);
glDisable(GL_LIGHTING);
glColor3f(1.0,1.0,0.0);
auxWireSphere(0.25);
glEnable(GL_LIGHTING);
glPopMatrix();
auxSolidTorus(0.5,2.5);
glPopMatrix();
glFlush();
}
void main(void)
{
myinit();
auxMouseFunc(AUX_LEFTBUTTON,AUX_MOUSEDOWN,movelight);
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.yWbW4$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,f35fb8dc093b6721,start X-Google-Attributes: gidfc86e,public From: Ambi_A@bbs.ustc.edu.cn (����) Subject: OPENGL(15) Date: 1998/05/05 Message-ID: <980505.yWbW4$PBBS@bbs.ustc.edu.cn> X-Deja-AN: 350443995 Organization: �й�ƴ�BBSվ Newsgroups: cn.bbs.comp.program