游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2142|回复: 2

一个简单的GL程序,找不到错哪儿了,希望眼尖的朋友指点下

[复制链接]

8

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2008-4-13 02:00:00 | 显示全部楼层 |阅读模式
就是在原点绘制了一个立方体及坐标轴,用鼠标拖动可以旋转观察,刚开始还是好的,某次编译以后就显示不正常了,拖动的时候只能看到坐标轴,好像立方体没有绘制出来,可是修改EyePos有时却可以看到立方体的一部分(比如在z轴2.0的位置可以看到,在3.0就不行了....跟透视投影设置有关么?好像是又不确定),仔细的检查了很久却没找到是哪里的问题~
用OpenGL有些时候了,没遇到过这样的情况...代码很简单,贴出来希望有人可以帮下我~

  1. void CGLDrawer::OnSize(UINT nType, int cx, int cy)
  2. {
  3.         CWnd::OnSize(nType, cx, cy);
  4.        
  5.         // TODO: Add your message handler code here
  6.        
  7.                 int w = cx,h = cy;
  8.                 glViewport(0,0,w,h);        // 设置视口大小
  9.                
  10.                 glMatrixMode(GL_PROJECTION);
  11.                
  12.                 glLoadIdentity();
  13.                
  14.                 // 采用90度视场角
  15.                
  16.                 gluPerspective(90.0f,(float)w/(float)h,0.1f,100.0f);
  17.                
  18.                 glMatrixMode(GL_MODELVIEW);
  19.                 glLoadIdentity();
  20.        
  21. }
复制代码


  1. BOOL CGLDrawer::InitGL()
  2. {

  3.         glClearColor(0.0,0.0,0.0,0.0);

  4.         glClearDepth(1.0f);                                                                        // Depth Buffer Setup
  5.         glEnable(GL_DEPTH_TEST);                                                        // Enables Depth Testing
  6.         glDepthFunc(GL_LEQUAL);                                                                // The Type Of Depth Testing To Do
  7.        
  8.         return TRUE;
  9. }
复制代码

--------------------
上面两个应该没有问题吧,从前经常这样做的,下面是绘制代码
  1. void CGLDrawer::DrawGLScene()
  2. {
  3.         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  4.        
  5.         glLoadIdentity();                                                                        // Reset The View
  6.        
  7.        
  8.         glRotatef(m_xRot,1.0f,0.0f,0.0f);
  9.         glRotatef(m_yRot,0.0f,1.0f,0.0f);
  10.        
  11.         gluLookAt(0.0f,-2.0f,0.0f,0.0f,0.0f,0.0f,0.0f,1.0f,0.0f);
  12.                                
  13.         // 绘制坐标轴
  14.         // x: R
  15.         // y: G
  16.         // z: B
  17.        
  18.         glBegin(GL_LINES);
  19.         // x轴
  20.                                 glColor3f(5.0f,0.0f,0.0f);        // 红色
  21.                                 glVertex3f(-5.0,0.0,0.0);
  22.                                 glVertex3f(5.0,0.0,0.0);
  23.                                
  24.                                 // y轴
  25.                                 glColor3f(0.0f,5.0f,0.0f);        // 绿色
  26.                                 glVertex3f(0.0f,-5.0f,0.0f);
  27.                                 glVertex3f(0.0f,5.0f,0.0f);
  28.                                
  29.                                 // z轴
  30.                                 glColor3f(0.0f,0.0f,5.0f);        // 蓝色
  31.                                 glVertex3f(0.0f,0.0f,-5.0f);
  32.                                 glVertex3f(0.0f,0.0f,5.0f);
  33.                                 glEnd();
  34.                                
  35.                                
  36.                                
  37.                                 // 绘制立方体
  38.                                 glBegin(GL_QUADS);
  39.                                 // Front Face
  40.                                 glColor3f(0.5f,0.0f,0.5f);        // Purple
  41.                                
  42.                                 glVertex3f(-0.5f, -0.5f,  0.5f);
  43.                                 glVertex3f( 0.5f, -0.5f,  0.5f);
  44.                                 glVertex3f( 0.5f,  0.5f,  0.5f);
  45.                                 glVertex3f(-0.5f,  0.5f,  0.5f);
  46.                                 // Back Face
  47.                                 glColor3f(0.5f,0.0f,0.5f);        // Magenta
  48.                                
  49.                                 glVertex3f(-0.5f, -0.5f, -0.5f);
  50.                                 glVertex3f(-0.5f,  0.5f, -0.5f);
  51.                                 glVertex3f( 0.5f,  0.5f, -0.5f);
  52.                                 glVertex3f( 0.5f, -0.5f, -0.5f);
  53.                                 // Top Face
  54.                                 glColor3f(0.5f,0.07843f,0.57647f);        // DeepPink
  55.                                
  56.                                 glVertex3f(-0.5f,  0.5f, -0.5f);
  57.                                 glVertex3f(-0.5f,  0.5f,  0.5f);
  58.                                 glVertex3f( 0.5f,  0.5f,  0.5f);
  59.                                 glVertex3f( 0.5f,  0.5f, -0.5f);
  60.                                 // Bottom Face
  61.                                 glColor3f(0.941176f,0.5098f,0.941176f);        // Violet
  62.                                
  63.                                 glVertex3f(-0.5f, -0.5f, -0.5f);
  64.                                 glVertex3f( 0.5f, -0.5f, -0.5f);
  65.                                 glVertex3f( 0.5f, -0.5f,  0.5f);
  66.                                 glVertex3f(-0.5f, -0.5f,  0.5f);
  67.                                 // Right face
  68.                                 glColor3f(0.415682f,0.3529f,0.8039f);        // SlateBlue       
  69.                                
  70.                                 glVertex3f( 0.5f, -0.5f, -0.5f);
  71.                                 glVertex3f( 0.5f,  0.5f, -0.5f);
  72.                                 glVertex3f( 0.5f,  0.5f,  0.5f);
  73.                                 glVertex3f( 0.5f, -0.5f,  0.5f);
  74.                                 // Left Face
  75.                                 glColor3f(0.541176f,0.1686f,0.88627f);        // BlueViolet
  76.                                
  77.                                 glVertex3f(-0.5f, -0.5f, -0.5f);
  78.                                 glVertex3f(-0.5f, -0.5f,  0.5f);
  79.                                 glVertex3f(-0.5f,  0.5f,  0.5f);
  80.                                 glVertex3f(-0.5f,  0.5f, -0.5f);
  81.                                 glEnd();
  82.                                
  83.                                
  84.                                
  85.                                 CPaintDC dc(this);
  86.                                
  87.                                
  88.                                 SwapBuffers(dc.GetSafeHdc());
  89.                                
  90.                                
  91. }
复制代码

---------------------
不知道错哪儿了,很受挫折的说.把工程打包放出来了,
很简单的,除了GL配置,绘图代码就是DLG框架了,希望有空的达人帮忙看下代码下载
====================
把gluLookAt去掉就好了,但是我想用gluLookAt控制视点位置的...新修改了代码,去掉了glRotatef的两句,改成如下
  1. m_fCamX = cos(RADIANS(m_yRot))*m_fR;
  2.         m_fCamZ =  - sin(RADIANS(m_yRot))*m_fR;
  3.        
  4.         m_fCamY = sin(RADIANS(m_xRot))*m_fR;

  5.         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  6.        
  7.         glLoadIdentity();                                                                        // Reset The View

  8.         gluLookAt(m_fCamX,m_fCamY,m_fCamZ,0.0f,0.0f,0.0f,0.0f,1.0f,0.0f);
  9.        
复制代码

绘制的时候有部分立方体显示不出来,好像被裁掉了一样,而且gluLookAt的参数改一下就什么都看不到了,很纳闷,立方体中心是位于原点的啊,改变视点位置,但是注视位置不变,怎么会看不到呢...附图


1

主题

24

帖子

24

积分

注册会员

Rank: 2

积分
24
发表于 2008-4-13 20:45:00 | 显示全部楼层

Re:一个简单的GL程序,找不到错哪儿了,希望眼尖的朋友指

在glRotatef()前面加glPushMatrix()试试
顺便把gluLookAt()放到glRotatef()前面.
画完了加个glPopMatrix()?

8

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
 楼主| 发表于 2008-4-13 23:06:00 | 显示全部楼层

Re:一个简单的GL程序,找不到错哪儿了,希望眼尖的朋友指

To 楼上:还是像最下面那个图的样子..........绘制的时候有部分立方体显示不出来,好像被裁掉了一样,而且gluLookAt的参数改一下就什么都看不到了,
------------------
把gluLookAt去掉就好了,但是我想用gluLookAt控制视点位置的...新修改了代码,去掉了glRotatef的两句,改成如下
m_fCamX = cos(RADIANS(m_yRot))*m_fR;       
m_fCamZ =  - sin(RADIANS(m_yRot))*m_fR;               
m_fCamY = sin(RADIANS(m_xRot))*m_fR;       
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);               
glLoadIdentity();                                                       
gluLookAt(m_fCamX,m_fCamY,m_fCamZ,0.0f,0.0f,0.0f,0.0f,1.0f,0.0f);
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 20:02

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表