🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

OPENGL(10)

#971
From: ����
Date: Tue, 05 May 1998 00:00
217 lines
10857 bytes
BBSˮľ�廪վ�þ�����
������: yxy (��˿˿#���ߵ�С��ӥ), ����: GAME_Designer 
��  ��: OPENGL(10) 
����վ: BBS ˮľ�廪վ (Wed Jan 21 17:52:06 1998) 
 
OPENGL������ 
��3Dͼ���У�����ӳ���ǹ㷺ʹ�õġ�����ӳ��Ҳ���൱���ӵĹ�̣� 
һ �������� 
�� �����˲� 
�� ˵��ӳ�䷽ʽ 
�� ���Ƴ������������������ͼ������ 
ע�⣡������ӳ��ֻ����RGBAģʽ��ʹ�ã�����������ɫ����ģʽ 
 
1.���?�� 
void glTexImage2D( GLenum target, GLint level, GLint components,  
                   GLsizei width, GLsizei height, GLint border,  
                   GLenum format, GLenum type, const GLvoid *pixels );  
����һ����ά����ӳ�䡣 
target�dz��� GL_TEXTURE_2D 
level��ʾ�༶�ֱ��ʵ�����ͼ��ļ�����ֻ��һ�ֱַ��ʣ�levelΪ0�� 
components�Ǵ�1��4������1��ѡ��R��2��ѡ��R A��3��ѡ��R G B�� 
                          4��ѡ��R G B A�� 
width height������ijߴ硣 
format��type����ӳ���ʽ��������͡�������ǰ�潲��glDrawPixels()�� 
��������ͬ������԰����?����ͼ������ 
���⻹��һά���?�壺 
void glTexImage1D( GLenum target, GLint level, GLint components,  
                   GLsizei width, GLint border, GLenum format,  
                   GLenum type, const GLvoid *pixels );  
��֮ͬ������target�dz���GL_TEXTURE_1D�������ṩ�����Ӧ����һά���顣 
һ���������ά��Ӧ����2���ݴΣ���ʱ��Ҫ������ͼ��ϱ߽���ݡ� 
 
2.������ƣ��˲����ظ������ޣ� 
�����������ͨ�� 
void glTexParameter{if}[v](GLenum target,GLenum pname,TYPE param); 
��ʵ�֣�target������GL_TEXTURE_1D GL_TEXTURE_2D��˵����һά���Ƕ�ά 
���?pname��param�Ŀ���ȡֵ���£� 
pname:                        param:     
GL_TEXTURE_WRAP_S             GL_CLAMP 
                              GL_REPEAT 
GL_TEXTURE_WRAP_T             GL_CLAMP 
                              GL_REPEAT 
GL_TEXTURE_MAG_FILTER         GL_NEAREST 
                              GL_LINEAR 
GL_TEXTURE_MIN_FILTER         GL_NEAREST 
                              GL_NEAREST_MIPMAP_NEAREST 
                              GL_NEAREST_MIPMAP_LINEAR 
                              GL_LINEAR_MIPMAP_NEAREST 
                              GL_LINEAR_MIPMAP_LINEAR 
2.1 �˲� 
ԭʼ����ͼ���Ǹ�����ͼ�󣬰���ӳ�䵽���ι�״�������ϣ�һ�㲻����ͼ�� 
�ϵ�һ�����ض�Ӧ��Ļ��һ�����ء���˾ֲ��Ŵ���Сʱ����Ҫ������ʵ��� 
����ʽ����2DΪ�� 
void glTexParameter(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); 
void glTexParameter(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); 
ǰ���ǷŴ��˲���GL_TEXTURE_MAG_FILTER���� 
��������С�˲���GL_TEXTURE_MIN_FILTER���� 
���⣬GL_NEAREST���������������������ĵ�����Ԫ�أ����п���ʹͼ�� 
���ͣ��������ٶȿ죻GL_LINEAR�������β�ֵ��Ч��õ��������� 
 
2.2�ظ������� 
����ӳ������ظ�ӳ���������ӳ�䣬�ظ�ӳ��ʱ����������Լ������S T�� 
���ظ��� 
�����ظ�ӳ�䣺 
void glTexParameterfv(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); 
void glTexParameterfv(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); 
����GL_REPEAT��ΪGL_CLAMP�������ޣ����д���1������Ԫ��ֵ��Ϊ1������С�� 
0������Ԫ��ֵ��Ϊ0�� 
 
3. ӳ�䷽ʽ 
�������?��ͼ����ɫ�����屾����ɫ�Ĺ�ϵ�� 
void glTexEnv{if}[v](GLenum target,GLenum pname,TYPE param); 
target������GL_TEXTURE_ENV; 
 
pname��GL_TEXTURE_ENV_MODE����param������ GL_DECAL GL_MODULATE�� 
GL_BLEND��˵������ֵ��ԭ����ɫ��ͬ�Ĵ��?ʽ�� 
pname��GL_TEXTURE_ENV_COLOR�������param�ǰ�4��������R��G��B��A�� 
�����顣��Щֵֻ�ڲ���GL_BLEND���?��ʱ�Ų��á� 
 
4. ������� 
���Ķ��壺����ͼ���Ƿ��εģ��������ɶ����s,t,r,q��꣬������� 
���ϵ��x,y,z,w��ꡣ 
void glTexCoord{1234}{sifd}[v](TYPE coords)�� 
���õ�ǰ������꣬�˺����glVertex*()�����Ķ��㶼���赱ǰ��������ꡣ 
 
5. ����Զ����� 
��ʱ����ҪΪÿ�����嶥�㸳��������꣬����ʹ�� 
void glTexGen{if}(GLenum coord,GLenum pname,TYPE param); 
coordΪ��GL_S GL_T GL_R��GL_Q��ָ���ĸ�����Զ����� 
 
pnameΪGL_TEXTURE_GEN_MODEʱ 
paramΪ����GL_OBJECT_LINEAR GL_EYE_LINEAR��GL_SPHERE_MAP�����Ǿ����� 
�ĸ������������������ 
 
pnameΪGL_OBJECT_PLANE��GL_EYE_PLANE��paramʱһ��ָ����������ָ�롣 
 
���뿴һ���򵥵����ӣ� 
//////////////////////////////////////////// 
//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); 
 
//��������ͼ����ӳ��� 
#define TEXTUREWIDTH 64 
#define TEXTUREHEIGHT 64 
GLubyte Texture[TEXTUREWIDTH][TEXTUREHEIGHT][3]; 
void makeTexture(void) 
{ 
 int i,j,r,g,b; 
 for(i=0;i<TEXTUREWIDTH;i++) 
 { 
  for(j=0;j<TEXTUREHEIGHT;j++) 
  { 
         r=(i*j)%255; 
         g=(4*i)%255; 
         b=(4*j)%255; 
         Texture[i][j][0]=(GLubyte)r; 
         Texture[i][j][1]=(GLubyte)g; 
         Texture[i][j][2]=(GLubyte)b; 
  }  
 } 
} 
 
 
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); 
 
//��������ͼ���ԭʼ��ݱ�����Texture[][][]�� 
        makeTexture(); 
        glPixelStorei(GL_UNPACK_ALIGNMENT,1); 
 
//��������� 
        glTexImage2D(GL_TEXTURE_2D,0,3,TEXTUREWIDTH, 
                         TEXTUREHEIGHT,0,GL_RGB,GL_UNSIGNED_BYTE, 
                                 &Texture[0][0][0]); 
//�����˲� 
        glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP); 
        glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP); 
        glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); 
        glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); 
 
//˵��ӳ�䷽ʽ 
        glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL); 
 
//���Ӧ�ú����ˣ���������ģʽ 
        glEnable(GL_TEXTURE_2D); 
//      glShadeModel(GL_FLAT); 
} 
 
void CALLBACK reshape(GLsizei w,GLsizei h) 
{ 
 
glViewport(0,0,w,h); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
//���������Ӿ��� 
gluPerspective(60.0,1.0*(GLfloat)w/(GLfloat)h,1.0,30.0); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glTranslatef(0.0,0.0,-3.6); 
} 
 
void CALLBACK display(void) 
{ 
  glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); 
 
   glBegin(GL_QUADS);//�����ı��� 
//�Ȼ������Σ�������ʾʵ��δ���ε�����ͼ�� 
   glTexCoord2f(0.0,0.0);glVertex3f(-2.0,-1.0,0.0); 
   glTexCoord2f(0.0,1.0);glVertex3f(-2.0,1.0,0.0); 
   glTexCoord2f(1.0,1.0);glVertex3f(0.0,1.0,0.0); 
   glTexCoord2f(1.0,0.0);glVertex3f(0.0,-1.0,0.0); 
 
//����һ���������ı��Σ�������ʾ�����������������״����εġ� 
   glTexCoord2f(0.0,0.0);glVertex3f(0.0,-1.0,0.0); 
   glTexCoord2f(0.0,1.0);glVertex3f(0.0,1.0,0.0); 
   glTexCoord2f(1.0,1.0);glVertex3f(1.41421,1.0,-1.41421); 
   glTexCoord2f(1.0,0.0);glVertex3f(1.41421,-1.0,-1.41421); 
   glEnd(); 
 
  glFlush(); 
} 
void main(void) 
{ 
    myinit(); 
     
    auxReshapeFunc(reshape); 
    auxMainLoop(display); 
} 
//end of sample 
/////////////////////////////////////////////////////////// 
��������������������Ķ���Ϳ��ƱȽ��鷳�Ͳ���������⣬��Ӧ����ʮ�� 
����ġ�ֻ�����������ϵѡ�����ʵ㸽��ʵ�����嶥���ϼ��ɡ����ڸ��� 
�����?��Ϳ��ƣ���Ҳ�������иı�һЩ�����Ч����Ρ������ 
GL_LINEAR�ij�GL_NEAREST������������Ա�Ĵֲڣ���������ȴ��Ķࡣ 
��Ҳ���ԸĶ�glTexCoord2f()�IJ�������ѡ�������һ���֣��������� 
ѡ��ȫ�����?����ͼ������1.0�ij�0.5��ѡ��ʵ�����������1/4��������ͼ�� 
�´ν����һ�����ӵ�����Ӧ�õ����Ӻ�˵����18:03 98-1-21 
 
 
-- 
�� ��Դ:��BBS ˮľ�廪վ bbs.net.tsinghua.edu.cn��[FROM: 166.111.74.90] 

BBSˮľ�廪վ�þ�����

�� ��Դ: �й�ƴ�BBSվ [bbs.ustc.edu.cn]
Technical Details
Message-ID: <980505.yWbU5$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,e72571a00d1d605d,start
X-Google-Attributes: gidfc86e,public
From: Ambi_A@bbs.ustc.edu.cn (����)
Subject: OPENGL(10)
Date: 1998/05/05
Message-ID: <980505.yWbU5$PBBS@bbs.ustc.edu.cn>
X-Deja-AN: 350421244
Organization: �й�ƴ�BBSվ
Newsgroups: cn.bbs.comp.program