新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论高级C/C++编程、代码重构(Refactoring)、极限编程(XP)、泛型编程等话题
    [返回] 计算机科学论坛计算机技术与应用『 C/C++编程思想 』 → 各位哥哥姐姐帮帮忙,一个关于OPENGL的问题 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 4063 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 各位哥哥姐姐帮帮忙,一个关于OPENGL的问题 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     cai555444 美女呀,离线,快来找我吧!
      
      
      等级:大一新生
      文章:0
      积分:52
      门派:XML.ORG.CN
      注册:2006/12/28

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给cai555444发送一个短消息 把cai555444加入好友 查看cai555444的个人资料 搜索cai555444在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看cai555444的博客楼主
    发贴心情 各位哥哥姐姐帮帮忙,一个关于OPENGL的问题

    [QUOTE][QUOTE]我有一段编码,程序已经提示没有问题可是出来是空白的,怎么也没办法实现方向的控制请问是为什么??帮帮忙,谢谢大家!!!
    // HomeworkView.cpp : implementation of the CHomeworkView class
    //

    #include "stdafx.h"
    #include "Homework.h"
    #include "cel.h"
    #include "cesen.h"

    #include "HomeworkDoc.h"
    #include "HomeworkView.h"

    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif

    /////////////////////////////////////////////////////////////////////////////
    // CHomeworkView

    IMPLEMENT_DYNCREATE(CHomeworkView, CView)

    BEGIN_MESSAGE_MAP(CHomeworkView, CView)
     //{{AFX_MSG_MAP(CHomeworkView)
     ON_WM_KEYDOWN()
     ON_WM_SIZE()
     ON_WM_TIMER()
     ON_WM_DESTROY()
     ON_WM_CREATE()
     ON_WM_CLOSE()
     //}}AFX_MSG_MAP
     // Standard printing commands
     ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
     ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
     ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
    END_MESSAGE_MAP()

    /////////////////////////////////////////////////////////////////////////////
    // CHomeworkView construction/destruction

    CHomeworkView::CHomeworkView()
    {
     // TODO: add construction code here

    }

    CHomeworkView::~CHomeworkView()
    {
    }

    BOOL CHomeworkView::PreCreateWindow(CREATESTRUCT& cs)
    {
     // TODO: Modify the Window class or styles here by modifying
     //  the CREATESTRUCT cs
    ////////////////////////////////////////////////////////////////
    //设置窗口类型
     cs.style |=WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
    ////////////////////////////////////////////////////////////////
     return CView::PreCreateWindow(cs);
    }

    /////////////////////////////////////////////////////////////////////////////
    // CHomeworkView drawing

    void CHomeworkView::OnDraw(CDC* pDC)
    {
     CHomeworkDoc* pDoc = GetDocument();
     ASSERT_VALID(pDoc);
     // TODO: add draw code for native data here
    }

    /////////////////////////////////////////////////////////////////////////////
    // CHomeworkView printing

    BOOL CHomeworkView::OnPreparePrinting(CPrintInfo* pInfo)
    {
     // default preparation
     return DoPreparePrinting(pInfo);
    }

    void CHomeworkView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
    {
     // TODO: add extra initialization before printing
    }

    void CHomeworkView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
    {
     // TODO: add cleanup after printing
    }

    /////////////////////////////////////////////////////////////////////////////
    // CHomeworkView diagnostics

    #ifdef _DEBUG
    void CHomeworkView::AssertValid() const
    {
     CView::AssertValid();
    }

    void CHomeworkView::Dump(CDumpContext& dc) const
    {
     CView::Dump(dc);
    }

    CHomeworkDoc* CHomeworkView::GetDocument() // non-debug version is inline
    {
     ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CHomeworkDoc)));
     return (CHomeworkDoc*)m_pDocument;
    }
    #endif //_DEBUG

    /////////////////////////////////////////////////////////////////////////////
    // CHomeworkView message handlers


    void CHomeworkView::OnSize(UINT nType, int cx, int cy)
    {
     CView::OnSize(nType, cx, cy);
     
     // TODO: Add your message handler code here
    /////////////////////////////////////////////////////////////////
    //添加窗口缩放时的图形变换函数
     glViewport(0,0,cx,cy);
    /////////////////////////////////////////////////////////////////
     GLdouble aspect_ratio;
     aspect_ratio = (GLdouble)cx/(GLdouble)cy;
     ::glMatrixMode(GL_PROJECTION);
     ::glLoadIdentity();
     gluPerspective(40.0F, aspect_ratio, 1.0F, 10000.0F);
     ::glMatrixMode(GL_MODELVIEW);
     ::glLoadIdentity();
     
    }

    void CHomeworkView::OnTimer(UINT nIDEvent)
    {
    // TODO: Add your message handler code here and/or call default
    /////////////////////////////////////////////////////////////////
    //添加定时器响应函数和场景更新函数
     Invalidate(FALSE); 
    /////////////////////////////////////////////////////////////////
     
     CView::OnTimer(nIDEvent);
    }

    void CHomeworkView::OnDestroy()
    {
          CView::OnDestroy();
     
     // TODO: Add your message handler code here
      /////////////////////////////////////////////////////////////////
       //删除调色板和渲染上下文、定时器
     ::wglMakeCurrent(0,0);
     ::wglDeleteContext( m_hRC);
     if (m_hPalette)
         DeleteObject(m_hPalette);
     if ( m_pDC )
     {
      delete m_pDC;
     }
     KillTimer(1);  

     
    }
    /////////////////////////////////////////////////////////////////
     


    int CHomeworkView::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
     if (CView::OnCreate(lpCreateStruct) == -1)
      return -1;
     
     // TODO: Add your specialized creation code here
    //////////////////////////////////////////////////////////////////
    //初始化OpenGL和设置定时器
     m_pDC = new CClientDC(this);
     SetTimer(1,20, NULL);
     InitializeOpenGL(m_pDC);
    //////////////////////////////////////////////////////////////////
     Init();  
     return 0;
    }


    void CHomeworkView::OnClose()
    {
     // TODO: Add your message handler code here and/or call default
     
     CView::OnClose();
    }


    //////////////////////////////////////////////////////////
    //      初始化openGL场景
    //////////////////////////////////////////////////////////

    BOOL CHomeworkView::InitializeOpenGL(CDC *pDC)
    {
     m_pDC = pDC;
     SetupPixelFormat();
     //生成绘制描述表
     m_hRC = ::wglCreateContext(m_pDC->GetSafeHdc());
     //置当前绘制描述表
     ::wglMakeCurrent(m_pDC->GetSafeHdc(), m_hRC);

     return TRUE;
    }
    //////////////////////////////////////////////////////////
    //      设置像素格式
    //////////////////////////////////////////////////////////
    BOOL CHomeworkView::SetupPixelFormat()
    {
    PIXELFORMATDESCRIPTOR pfd = {
        sizeof(PIXELFORMATDESCRIPTOR),    // pfd结构的大小
         1,                                // 版本号
         PFD_DRAW_TO_WINDOW |              // 支持在窗口中绘图
         PFD_SUPPORT_OPENGL |              // 支持 OpenGL
         PFD_DOUBLEBUFFER,                 // 双缓存模式
         PFD_TYPE_RGBA,                    // RGBA 颜色模式
         24,                               // 24 位颜色深度
         0, 0, 0, 0, 0, 0,                 // 忽略颜色位
         0,                                // 没有非透明度缓存
         0,                                // 忽略移位位
         0,                                // 无累加缓存
         0, 0, 0, 0,                       // 忽略累加位
         64,                               // 32 位深度缓存     
         0,                                // 无模板缓存
         0,                                // 无辅助缓存
         PFD_MAIN_PLANE,                   // 主层
         0,                                // 保留
         0, 0, 0                           // 忽略层,可见性和损毁掩模
     };  
     int pixelformat;
     pixelformat = ::ChoosePixelFormat(m_pDC->GetSafeHdc(), &pfd);//选择像素格式
     ::SetPixelFormat(m_pDC->GetSafeHdc(), pixelformat, &pfd); //设置像素格式
     if(pfd.dwFlags & PFD_NEED_PALETTE)
      SetLogicalPalette(); //设置逻辑调色板
     return TRUE;
    }
    //////////////////////////////////////////////////////////
    //      场景绘制与渲染
    /////////////////////////////////////////////////////////

    BOOL CHomeworkView::RenderScene()
    {
    ::glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
     ::glMatrixMode(GL_MODELVIEW);
     ::glLoadIdentity();
      

    ::glRotatef( 7 ,1.0,0.0,0.0);


     ::glTranslatef(0.0,0.0,-0170.0);
       

     ::glPopMatrix();
     //车轮1 左后
     ::glPushMatrix();
      ::glTranslatef(23,-2.0,-43.0); 

      ::glRotatef(rotation ,1.0,0.0,0.0);
      glCallList(Model); 
     ::glPopMatrix();

     //车轮2 右前  //
     ::glPushMatrix();
      ::glTranslatef(-26.0,-2.0,34);
       ::glRotatef( rotation ,1.0,0.0,0.0);

      glCallList(Model);
     ::glPopMatrix();
     //车轮3 左前 //
     ::glPushMatrix();
      ::glTranslatef(24.0,-1.0,35);
             ::glRotatef( rotation ,1.0,0.0,0.0);
      glCallList(Model);
     ::glPopMatrix();
    // 车轮4右后
     ::glPushMatrix();
      ::glTranslatef(-26.0,-3.0,-32);
      ::glRotatef( rotation ,1.0,0.0,0.0);//车轮的旋转
      ::glCallList(Model); 
        ::glPopMatrix();

     rotation = (rotation   +5)   % 360; 

    //车身
     ::glPushMatrix();
     ::glTranslatef(0.0,0.0,0.0);
         glCallList(Model2); 
      ::glPushMatrix();


     ::glPopMatrix();
     

     ::SwapBuffers(m_pDC->GetSafeHdc());  //交互缓冲区
     return TRUE;
    }

    void CHomeworkView::Init(GLvoid)
    { ::glShadeModel(GL_SMOOTH);
     ::glClearColor(0.0F, 0.0F, 0.0F, 0.0F);

     ::glClearDepth(1.0F);
      glEnable(GL_DEPTH_TEST);
      glDepthFunc(GL_LESS);
      glEnable(GL_CULL_FACE);
      glCullFace(GL_BACK);
      glFrontFace(GL_CCW);
      glDisable(GL_DITHER);

     GLfloat ambientLight[] = { 0.3f, 0.3f, 0.3f, 1.0f};
     GLfloat diffuseLight[] = { 0.7f, 0.7f, 0.7f, 1.0f};
     GLfloat lightPos[]     = {6000.0f,6000.0f,6000.0f, 1.0f};


     glLightfv(GL_LIGHT0, GL_AMBIENT, ambientLight);
     glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLight);
     glLightfv(GL_LIGHT0, GL_POSITION, lightPos);
     glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientLight);
     glEnable(GL_LIGHTING);
     glEnable(GL_LIGHT0);
     
       glMateriali(GL_FRONT, GL_SHININESS, 128);

     //Model = GL3DS_initialize_DC10();
     Model=GL3DS_initialize_cel();
     Model2=GL3DS_initialize_cesen();
       
      if (Model ==-1)
     {
      printf("Error initializing display list\n");
      exit (-1);
     }

     rotation =0;
    }


    void CHomeworkView::SetLogicalPalette()
    {
     struct
        {
            WORD Version;
            WORD NumberOfEntries;
            PALETTEENTRY aEntries[256];
        } logicalPalette = { 0x300, 256 };

     BYTE reds[] = {0, 36, 72, 109, 145, 182, 218, 255};
     BYTE greens[] = {0, 36, 72, 109, 145, 182, 218, 255};
     BYTE blues[] = {0, 85, 170, 255};

        for (int colorNum=0; colorNum<256; ++colorNum)
        {
            logicalPalette.aEntries[colorNum].peRed =
                reds[colorNum & 0x07];
            logicalPalette.aEntries[colorNum].peGreen =
                greens[(colorNum >> 0x03) & 0x07];
            logicalPalette.aEntries[colorNum].peBlue =
                blues[(colorNum >> 0x06) & 0x03];
            logicalPalette.aEntries[colorNum].peFlags = 0;
        }

        m_hPalette = CreatePalette ((LOGPALETTE*)&logicalPalette);

    }
    //////////////////////////////////////////////////////////////////

    /////////////////////////////
    static  shoulder = 90;
    GLfloat elbow[4] = {45,45,45,45};

    //////////////////////////////////////
    void CHomeworkView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
    {
     // TODO: Add your message handler code here and/or call default
     
     CView::OnKeyDown(nChar, nRepCnt, nFlags);
     switch(nChar)
     { 
     case AUX_LEFT:
       shoulder = (shoulder + 5);
     break;
     case AUX_RIGHT:
       shoulder = (shoulder - 5);
     break;
     case AUX_UP:
          shoulder = (shoulder + 5);
     break;
     case AUX_DOWN:
         shoulder = (shoulder - 5);
         break;
     }
    }


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/12/28 21:14:00
     
     卷积内核 帅哥哟,离线,有人找我吗?
      
      
      威望:8
      头衔:总统
      等级:博士二年级(版主)
      文章:3942
      积分:27590
      门派:XML.ORG.CN
      注册:2004/7/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给卷积内核发送一个短消息 把卷积内核加入好友 查看卷积内核的个人资料 搜索卷积内核在『 C/C++编程思想 』的所有贴子 访问卷积内核的主页 引用回复这个贴子 回复这个贴子 查看卷积内核的博客2
    发贴心情 
    static  shoulder = 90;
    你把这个改成非static类型看看,应该是这里的问题。

    ----------------------------------------------
    事业是国家的,荣誉是单位的,成绩是领导的,工资是老婆的,财产是孩子的,错误是自己的。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/12/29 10:16:00
     
     一分之千 帅哥哟,离线,有人找我吗?射手座1984-11-30
      
      
      威望:1
      等级:研一(随老板参加了WWW大会还和Tim Berners-Lee合了影^_^)
      文章:632
      积分:4379
      门派:XML.ORG.CN
      注册:2006/12/31

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给一分之千发送一个短消息 把一分之千加入好友 查看一分之千的个人资料 搜索一分之千在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看一分之千的博客3
    发贴心情 
    hehe,  u made a mistake,u should set the opengl drawing function in the ondraw function of the homeworkview. In the OnDraw function of the view class cpp u did nothing.

    ----------------------------------------------
    越学越无知

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/12/31 20:54:00
     
     qduxiao 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:1
      积分:59
      门派:XML.ORG.CN
      注册:2007/5/8

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给qduxiao发送一个短消息 把qduxiao加入好友 查看qduxiao的个人资料 搜索qduxiao在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看qduxiao的博客4
    发贴心情 
    缺少按下键盘的宏定义,也就是不会产生任何按键消息!
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/5/8 16:58:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 C/C++编程思想 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/11/26 13:12:00

    本主题贴数4,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    3,562.500ms