##绘制一个三角形
#注意:代码不一定能运行,因为我只是拿来读代码理解的!!!
(```)
#include<GLTools.h>
#include<GLShaderManage.h>
#ifdef APPLE
#include<glut/glut.h>
#else
#define FREEGLUT_STATIC
#include<GL/glut.h>
#endif
GLBatch triangleBatch
GLShaderManager shaderManager;
//设置窗体大小
void changesize(int w,int h)
{
glViewport(0,0,w,h);
}
//初始化
void setRC()
{
//设置背景色
glClearColor(0.0f,0.0f,1.0f,1.0f);
shaderManager.InitializeStockShaders();
//开始绘制三角形:1.设置坐标 2.开始调用函数进行绘制
GLfloat vVerts[]={
-0.5f,0.0f,0.0f,
0.5f,0.0f,0.0f,
0.0f,0.5f,0.0f
};
triangleBatch.Begin(GL_TRIANGLES,3);
triangleBatch.CopyVertexData3f(vVerts);
triangleBatch.end;
}
//在屏幕上画图
void RenderScene()
{
//清屏
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
GLfloat vRed[]={1.0f,0.0f,0.0f,1.0f};
shaderManager.UseStockShader(GLT_SHADER_IDENTITY,vRed);
//调用函数绘图
triangleBatch.Draw();
glutSwapBuffers();
}
//按键设置
void SpecialKeys(int key,int x,int y)
{
//每次移动的步长
GLfloat stepSize=0.025f;
GLfloat blockx=vVerts[0];
GLfloat blocky=vVerts[7];
//设置上下左右按键的动作
if(key==GLUT_KEY_UP)
blockY+=stepSize;
if(key==GLUT_KEY_DOWN)
blockY-=stepSize;
if(key==GLUT_KEY_LEFT);
blockX-=stepSize;
if(key==GLUT_KEY_RIGHT)
blockX+=stepSize;
//碰撞检测
if(blockX<-1.0f)
blockX--1.0f;
if(blockX>(1.0f-blockSize*2))
blockX=1.0f-blockSize*2;
if(blockY<-1.0+blockSize*2)
blockY=-1.0f+blockSize*2;
if(blockY>1.0f)
blockY=1.0f;
//更新位置
vVerts[0]=blockX;
vVerts[1]=blockY-2*blockSize;
vVerts[3]=blockX+blockSize*2;
vVerts[4]=blockY-blockSize*2;
vVerts[6]=blockX+blockSize*2;
vVerts[7]=blockY;
vVerts[9]=blockX;
vVerts[10]=blockY;
squareBatch.CopyVertexData3f(vVerts);
glutPostRedisplay();
}
int main(int argc,char* argv[])
{
gltSetWorkingDirectory(argv[0]);
glutInit(&argc,argv);
//设置模式以形成动画效果
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL);
glutInitWindowSize(800,600);
glutCreateWindow("Triangle");
glutReshapeFunc(Changesize);
glutDisplayFunc(RenderScene);
GLenum err=glewInit();
if(GLEW_OK!=err)
{
fprintf(stderr,"GLEW Error:%s\n",glewGetErrorString(err));
return 1;
}
serRC();
glutMainloop();//在主窗口关闭前都不会返回
return 0;
}
(```)