OpenGL初步例程改进

OpenGL 3D绘图:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glLoadIdentity();

angle = angle + 0.1f;

if(angle >= 360.0f)

    angle = 0.0f;

 

glTranslatef(0.0f, 0.0f, -5.0f);

glRotatef(angle, 0.0f, 0.0f, 1.0f);

 

glColor3f(1.0f, 0.0f, 0.0f);

 

glBegin(GL_TRIANGLES);

    glVertex3f(0.0f, 0.0f, 0.0f);

    glVertex3f(1.0f, 0.0f, 0.0f);

    glVertex3f(1.0f, 1.0f, 0.0f);

glEnd();

SwapBuffers(g_HDC);

键盘消息:WM_KEYDOWN

int fwKey;//虚拟键编码

LPARAM  keyData;

fwKeys = (int)wParam;

keyData = lparam;

switch(fwKey)

{

    case VK_ESCAPE:

        PostQuitMessage(0);//发送退出消息

        break;

    default:

         break;

}

主循环已经改造完毕;接下来创建openGL类

cgfxOpenGL.h//设计一个C++类

#ifndef __GL_COMPONENT

#define __GL_COMPONENT

#define PI 3.14159

#define TWO_PI PI*2.0

 

class CGfxOpenGL{

private:

    int m_windowWidth;

    int m_windowHeight;

    float m_angle;

public:

    CGfxOpenGL();

    virtual ~CGfxOpenGL();

    bool init();

    bool shutdown();

    void setupProjection(int width, int height);

    void prepare(float dt);

    void render();

};

#endif

cgfxOpenGL.cpp

#include <windows.h>

#include <gl/GL.h>//openGL 的头文件要用到Windows的头文件

#include <gl/GLUT.h>

#include "cfgxOpenGL.h"

#pragma warning(disable:4305) //禁止单精度浮点数自动转化为双精度浮点数,保持OpenGL原有的单精度浮点数

CGfxOpenGL::CGfxOpenGL(){}

CGfxOpenGL::~CGfxOpenGL(){}

bool CGfxOpenGL::init()

{

     glClearColor(0.0, 0.0, 0.0, 0.0);//把背景全部变为黑色

    m_angle = 0.0f;

    return true;

}

bool CGfxOpenGL::shutdown()

{

    return true;

}

void CGfxOpenGL::setupProjection(int width, int height)

{

    if(height == 0)

        height = 1;

    glViewport(0, 0, width, height);

    glMatrixMode(GL_PROJECTION);

    glLoadIdentity();

    gluPerspective(45.0f, (GLfloat)width/(GLfloat)height, 1.0f, 1000.0f);

    glMatrixMode(GL_MODELVIEW);

    glLoadIdentity();

    m_windowWidth = width;

    m_windowHeight = height;

}

void CGfxOpenGL::prepare(float dt)

{

    m_angle = m_angle + 0.1f;

    if(m_angle >= 360.0f)

        m_angle = 0.0f;

}

void CGfxOpenGL::render()

{

    glClear(GL_COLOR_BUFFER_BIT |  GL_DEPTH_BUFFER_BIT);

    glLoadIdentity();

    glTranslatef(0.0f, 0.0f, -5.0f);

    glRotatef(m_angle, 0.0f, 0.0f, 1.0f);

    glColor3f(1.0f, 0.0f, 0.0f);

    glBegin(GL_TRIANGLES);

        glVertex3f(0.0f, 0.0f, 0.0f);

        glVertex3f(1.0f, 0.0f, 0.0f);

        glVertex3f(1.0f, 1.0f, 0.0f);

    glEnd();

}

}

=========================================================

demo.cpp

#include  “cgfxOpenGL.h"

CGfxOpenGL *g_glRender = NULL;

g_glRender = new CGfxOpenGL;

g_glRender->init(); //消息循环之前调用

while(!exit)

{

    g_glRender->prepare(0.0);

    g_glRender->render();

    SwapBuffers(g_HDC);

}

case WM_SIZE:

    height = HIWORD(lParam);

    width = LOWORD(lParam);

    g_glRender->setupProjection(width, height);

    break;

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值