NeheTutorials for BMax 1.22
Tutorial 6/7:
Tutorial 6/7:
'begin tut6 Import brl.bmploader Import brl.max2d Global ScreenWidth:Int=800 Global ScreenHeight:Int=600 Global ScreenDepth:Int=32 Global xrot:Float=0 Global yrot:Float=0 Global zrot:Float=0 Global Checkimage:Byte[256,256,4] Global Texname:Int GLGraphics ScreenWidth,ScreenHeight,ScreenDepth,0,BGL_BACKBUFFER | BGL_DEPTHBUFFER InitGl() HideMouse While Not KeyHit( KEY_ESCAPE ) glClear GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT 'Clear The Screen And The Depth Buffer nehe6() glColor3f(1.0,1.0,1.0) 'Framecounter-------------------------------------------- Framecounter_counter=Framecounter_counter+1 If Framecounter_time=0 Then Framecounter_time=MilliSecs() If Framecounter_time+1001 <MilliSecs() Then Framecounter_framerate=Framecounter_counter Framecounter_counter=0 Framecounter_time=MilliSecs() EndIf GLDrawText("FPS : "+Framecounter_framerate,ScreenWidth-(8*12),ScreenHeight-16-8) '-------------------------------------------------------- GLDrawText("Nehe lesson 6",10,24) Flip Wend End Function InitGl() LoadGlTextures() glClearColor(0.0, 0.0, 0.0, 0.0) glClearDepth 1.0 glDepthFunc(GL_LESS) glEnable(GL_DEPTH_TEST) glShadeModel(GL_SMOOTH) glViewport(0,0,ScreenWidth,ScreenHeight) glMatrixMode(GL_PROJECTION) glLoadIdentity() gluPerspective(45.0,Float(ScreenWidth)/Float(ScreenHeight),1.0,100.0) glMatrixMode(GL_MODELVIEW) End Function Function LoadGlTextures() Local PointeurImg:Byte Ptr Local TexWidth Local TexHeight tex01:TPixmap=LoadPixmap("data\NeHe.bmp") TexWidth=tex01.Width TexHeight=tex01.Height PointeurImg=PixmapPixelPtr(tex01,0,0) pp=0 For y=TexHeight-1 To 0 Step -1 For x=0 To TexWidth-1 Checkimage[y,x,0]=PointeurImg[pp] Checkimage[y,x,1]=PointeurImg[pp+1] Checkimage[y,x,2]=PointeurImg[pp+2] Checkimage[y,x,3]=100 pp=pp+3 Next Next tex01=Null glPixelStorei(GL_UNPACK_ALIGNMENT,1) glGenTextures(1, Varptr Texname) glBindTexture(GL_TEXTURE_2D, Texname) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST) glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, TexWidth, TexHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, Checkimage) End Function Function nehe6() glClear GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT glEnable(GL_TEXTURE_2D) glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE) glBindTexture GL_TEXTURE_2D,Texname glLoadIdentity glTranslatef 0.0,0.0,-5.0 glRotatef xrot,1.0,0.0,0.0 ' Rotate On The X Axis glRotatef yrot,0.0,1.0,0.0 ' Rotate On The Y Axis glRotatef zrot,0.0,0.0,1.0 ' Rotate On The Z Axis glBegin GL_QUADS ' Front Face glTexCoord2f 0.0, 0.0; glVertex3f -1.0, -1.0, 1.0 ' Bottom Left Of The Texture And Quad glTexCoord2f 1.0, 0.0; glVertex3f 1.0, -1.0, 1.0 ' Bottom Right Of The Texture And Quad glTexCoord2f 1.0, 1.0; glVertex3f 1.0, 1.0, 1.0 ' Top Right Of The Texture And Quad glTexCoord2f 0.0, 1.0; glVertex3f -1.0, 1.0, 1.0 ' Top Left Of The Texture And Quad ' Back Face glTexCoord2f 1.0, 0.0; glVertex3f -1.0, -1.0, -1.0 ' Bottom Right Of The Texture And Quad glTexCoord2f 1.0, 1.0; glVertex3f -1.0, 1.0, -1.0 ' Top Right Of The Texture And Quad glTexCoord2f 0.0, 1.0; glVertex3f 1.0, 1.0, -1.0 ' Top Left Of The Texture And Quad glTexCoord2f 0.0, 0.0; glVertex3f 1.0, -1.0, -1.0 ' Bottom Left Of The Texture And Quad ' Top Face glTexCoord2f 0.0, 1.0; glVertex3f -1.0, 1.0, -1.0 ' Top Left Of The Texture And Quad glTexCoord2f 0.0, 0.0; glVertex3f -1.0, 1.0, 1.0 ' Bottom Left Of The Texture And Quad glTexCoord2f 1.0, 0.0; glVertex3f 1.0, 1.0, 1.0 ' Bottom Right Of The Texture And Quad glTexCoord2f 1.0, 1.0; glVertex3f 1.0, 1.0, -1.0 ' Top Right Of The Texture And Quad ' Bottom Face glTexCoord2f 1.0, 1.0; glVertex3f -1.0, -1.0, -1.0 ' Top Right Of The Texture And Quad glTexCoord2f 0.0, 1.0; glVertex3f 1.0, -1.0, -1.0 ' Top Left Of The Texture And Quad glTexCoord2f 0.0, 0.0; glVertex3f 1.0, -1.0, 1.0 ' Bottom Left Of The Texture And Quad glTexCoord2f 1.0, 0.0; glVertex3f -1.0, -1.0, 1.0 ' Bottom Right Of The Texture And Quad ' Right face glTexCoord2f 1.0, 0.0; glVertex3f 1.0, -1.0, -1.0 ' Bottom Right Of The Texture And Quad glTexCoord2f 1.0, 1.0; glVertex3f 1.0, 1.0, -1.0 ' Top Right Of The Texture And Quad glTexCoord2f 0.0, 1.0; glVertex3f 1.0, 1.0, 1.0 ' Top Left Of The Texture And Quad glTexCoord2f 0.0, 0.0; glVertex3f 1.0, -1.0, 1.0 ' Bottom Left Of The Texture And Quad ' Left Face glTexCoord2f 0.0, 0.0; glVertex3f -1.0, -1.0, -1.0 ' Bottom Left Of The Texture And Quad glTexCoord2f 1.0, 0.0; glVertex3f -1.0, -1.0, 1.0 ' Bottom Right Of The Texture And Quad glTexCoord2f 1.0, 1.0; glVertex3f -1.0, 1.0, 1.0 ' Top Right Of The Texture And Quad glTexCoord2f 0.0, 1.0; glVertex3f -1.0, 1.0, -1.0 ' Top Left Of The Texture And Quad glEnd xrot = xrot + 0.3 ' X Axis Rotation yrot = yrot + 0.2 ' Y Axis Rotation zrot = zrot + 0.4 ' Z Axis Rotation glDisable(GL_TEXTURE_2D) End Function 'end tut6 ######################################################################################################################## 'begin tut7 Import brl.bmploader Import brl.system Global ScreenWidth:Int=800 Global ScreenHeight:Int=600 Global ScreenDepth:Int=32 Global xrot:Float=0 Global yrot:Float=0 Global zrot:Float=0 Global Filter:Int=0 Global z:Float=-5.0 Global xspeed:Float=0.0 Global yspeed:Float=0.0 Global Lp:Byte=0 Global Checkimage:Byte[256,256,3] Global Texname:Int[3] Global LightAmbient:Float[]=[0.5, 0.5, 0.5, 1.0] Global LightDiffuse:Float[]=[1.0, 1.0, 1.0, 1.0] Global LightPosition:Float[]=[0.0, 0.0, 2.0, 1.0] GLGraphics ScreenWidth,ScreenHeight,ScreenDepth,0,BGL_BACKBUFFER | BGL_DEPTHBUFFER InitGl() HideMouse While Not KeyHit( KEY_ESCAPE ) nehe7() glDisable(GL_LIGHTING) glColor3f(1.0,1.0,1.0) 'Framecounter-------------------------------------------- Framecounter_counter=Framecounter_counter+1 If Framecounter_time=0 Then Framecounter_time=MilliSecs() If Framecounter_time+1001 <MilliSecs() Then Framecounter_framerate=Framecounter_counter Framecounter_counter=0 Framecounter_time=MilliSecs() EndIf GLDrawText("FPS : "+Framecounter_framerate,ScreenWidth-(8*12),ScreenHeight-16-8) '-------------------------------------------------------- GLDrawText("Nehe lesson 7",10,24) glEnable(GL_LIGHTING) Flip Wend End Function InitGl() LoadGlTextures() glClearColor(0.0, 0.0, 0.0, 0.0) glClearDepth 1.0 glDepthFunc(GL_LESS) glEnable(GL_DEPTH_TEST) glShadeModel(GL_SMOOTH) glViewport(0,0,ScreenWidth,ScreenHeight) glMatrixMode(GL_PROJECTION) glLoadIdentity() gluPerspective(45.0,Float(ScreenWidth)/Float(ScreenHeight),1.0,100.0) glMatrixMode(GL_MODELVIEW) glLightfv GL_LIGHT1, GL_AMBIENT, Float Ptr LightAmbient glLightfv GL_LIGHT1, GL_DIFFUSE, Float Ptr LightDiffuse glLightfv GL_LIGHT1, GL_POSITION, Float Ptr LightPosition glEnable GL_LIGHT1 End Function Function LoadGlTextures() Local PointeurImg:Byte Ptr Local TexWidth Local TexHeight tex01:TPixmap=LoadPixmap("data\crate.bmp") TexWidth=tex01.Width TexHeight=tex01.Height PointeurImg=PixmapPixelPtr(tex01,0,0) pp=0 For y=TexHeight-1 To 0 Step -1 For x=0 To TexWidth-1 Checkimage[y,x,0]=PointeurImg[pp] Checkimage[y,x,1]=PointeurImg[pp+1] Checkimage[y,x,2]=PointeurImg[pp+2] pp=pp+3 Next Next tex01=Null ' Create Nearest Filtered Texture glGenTextures 3, Varptr Texname[0] glBindTexture GL_TEXTURE_2D,Texname[0] glTexParameteri GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST glTexParameteri GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST glTexImage2D GL_TEXTURE_2D, 0, 3, TexWidth, TexHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, Checkimage ' Create Linear Filtered Texture glBindTexture GL_TEXTURE_2D, Texname[1] glTexParameteri GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR glTexParameteri GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR glTexImage2D GL_TEXTURE_2D, 0, 3, TexWidth, TexHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, Checkimage ' Create MipMapped Texture glBindTexture GL_TEXTURE_2D, Texname[2] glTexParameteri GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR glTexParameteri GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST gluBuild2DMipmaps GL_TEXTURE_2D, 3, TexWidth, TexHeight, GL_RGB, GL_UNSIGNED_BYTE, Checkimage End Function Function nehe7() If KeyHit(KEY_L) Then lp = Not lp EndIf If lp=0 Then glDisable(GL_LIGHTING) Else glEnable(GL_LIGHTING) EndIf If KeyHit(KEY_F) Filter:+1 If Filter>2 Then Filter=0 EndIf If KeyDown(KEY_PAGEUP) Then z:-0.02 If KeyDown(KEY_PAGEDOWN) Then z:+ 0.02 If KeyHit(KEY_UP) Then xspeed:-0.001 If KeyHit(KEY_DOWN) Then xspeed:+0.001 If KeyHit(KEY_RIGHT) Then yspeed:+0.001 If KeyHit(KEY_LEFT) Then yspeed:-0.001 glClear GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT glEnable GL_LIGHT1 glEnable(GL_TEXTURE_2D) glBindTexture GL_TEXTURE_2D, Texname[Filter] glLoadIdentity glTranslatef 0.0,0.0,z glRotatef xrot,1.0,0.0,0.0 glRotatef yrot,0.0,1.0,0.0 glBegin GL_QUADS ' Front Face glNormal3f 0.0, 0.0, 1.0 glTexCoord2f 0.0, 0.0; glVertex3f -1.0, -1.0, 1.0 glTexCoord2f 1.0, 0.0; glVertex3f 1.0, -1.0, 1.0 glTexCoord2f 1.0, 1.0; glVertex3f 1.0, 1.0, 1.0 glTexCoord2f 0.0, 1.0; glVertex3f -1.0, 1.0, 1.0 ' Back Face glNormal3f 0.0, 0.0,-1.0 glTexCoord2f 1.0, 0.0; glVertex3f -1.0, -1.0, -1.0 glTexCoord2f 1.0, 1.0; glVertex3f -1.0, 1.0, -1.0 glTexCoord2f 0.0, 1.0; glVertex3f 1.0, 1.0, -1.0 glTexCoord2f 0.0, 0.0; glVertex3f 1.0, -1.0, -1.0 ' Top Face glNormal3f 0.0, 1.0, 0.0 glTexCoord2f 0.0, 1.0; glVertex3f -1.0, 1.0, -1.0 glTexCoord2f 0.0, 0.0; glVertex3f -1.0, 1.0, 1.0 glTexCoord2f 1.0, 0.0; glVertex3f 1.0, 1.0, 1.0 glTexCoord2f 1.0, 1.0; glVertex3f 1.0, 1.0, -1.0 ' Bottom Face glNormal3f 0.0,-1.0, 0.0 glTexCoord2f 1.0, 1.0; glVertex3f -1.0, -1.0, -1.0 glTexCoord2f 0.0, 1.0; glVertex3f 1.0, -1.0, -1.0 glTexCoord2f 0.0, 0.0; glVertex3f 1.0, -1.0, 1.0 glTexCoord2f 1.0, 0.0; glVertex3f -1.0, -1.0, 1.0 ' Right face glNormal3f 1.0, 0.0, 0.0 glTexCoord2f 1.0, 0.0; glVertex3f 1.0, -1.0, -1.0 glTexCoord2f 1.0, 1.0; glVertex3f 1.0, 1.0, -1.0 glTexCoord2f 0.0, 1.0; glVertex3f 1.0, 1.0, 1.0 glTexCoord2f 0.0, 0.0; glVertex3f 1.0, -1.0, 1.0 ' Left Face glNormal3f -1.0, 0.0, 0.0 glTexCoord2f 0.0, 0.0; glVertex3f -1.0, -1.0, -1.0 glTexCoord2f 1.0, 0.0; glVertex3f -1.0, -1.0, 1.0 glTexCoord2f 1.0, 1.0; glVertex3f -1.0, 1.0, 1.0 glTexCoord2f 0.0, 1.0; glVertex3f -1.0, 1.0, -1.0 glEnd xrot = xrot + xspeed yrot = yrot + yspeed glDisable(GL_TEXTURE_2D) glDisable GL_LIGHT1 End Function 'end tut7