OpenGL——绘制三角形

##绘制一个三角形
#注意:代码不一定能运行,因为我只是拿来读代码理解的!!!
(```)
#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;
}

(```)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值