🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: cn.bbs.comp.program
1 messages
1 total messages Started by ���� Tue, 05 May 1998 00:00
OPENGL(10)
#971
Author: ����
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]
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads