|
|
就是在原点绘制了一个立方体及坐标轴,用鼠标拖动可以旋转观察,刚开始还是好的,某次编译以后就显示不正常了,拖动的时候只能看到坐标轴,好像立方体没有绘制出来,可是修改EyePos有时却可以看到立方体的一部分(比如在z轴2.0的位置可以看到,在3.0就不行了....跟透视投影设置有关么?好像是又不确定),仔细的检查了很久却没找到是哪里的问题~
用OpenGL有些时候了,没遇到过这样的情况...代码很简单,贴出来希望有人可以帮下我~
- void CGLDrawer::OnSize(UINT nType, int cx, int cy)
- {
- CWnd::OnSize(nType, cx, cy);
-
- // TODO: Add your message handler code here
-
- int w = cx,h = cy;
- glViewport(0,0,w,h); // 设置视口大小
-
- glMatrixMode(GL_PROJECTION);
-
- glLoadIdentity();
-
- // 采用90度视场角
-
- gluPerspective(90.0f,(float)w/(float)h,0.1f,100.0f);
-
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
-
- }
复制代码
- BOOL CGLDrawer::InitGL()
- {
- glClearColor(0.0,0.0,0.0,0.0);
- glClearDepth(1.0f); // Depth Buffer Setup
- glEnable(GL_DEPTH_TEST); // Enables Depth Testing
- glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do
-
- return TRUE;
- }
复制代码
--------------------
上面两个应该没有问题吧,从前经常这样做的,下面是绘制代码
- void CGLDrawer::DrawGLScene()
- {
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
- glLoadIdentity(); // Reset The View
-
-
- glRotatef(m_xRot,1.0f,0.0f,0.0f);
- glRotatef(m_yRot,0.0f,1.0f,0.0f);
-
- gluLookAt(0.0f,-2.0f,0.0f,0.0f,0.0f,0.0f,0.0f,1.0f,0.0f);
-
- // 绘制坐标轴
- // x: R
- // y: G
- // z: B
-
- glBegin(GL_LINES);
- // x轴
- glColor3f(5.0f,0.0f,0.0f); // 红色
- glVertex3f(-5.0,0.0,0.0);
- glVertex3f(5.0,0.0,0.0);
-
- // y轴
- glColor3f(0.0f,5.0f,0.0f); // 绿色
- glVertex3f(0.0f,-5.0f,0.0f);
- glVertex3f(0.0f,5.0f,0.0f);
-
- // z轴
- glColor3f(0.0f,0.0f,5.0f); // 蓝色
- glVertex3f(0.0f,0.0f,-5.0f);
- glVertex3f(0.0f,0.0f,5.0f);
- glEnd();
-
-
-
- // 绘制立方体
- glBegin(GL_QUADS);
- // Front Face
- glColor3f(0.5f,0.0f,0.5f); // Purple
-
- glVertex3f(-0.5f, -0.5f, 0.5f);
- glVertex3f( 0.5f, -0.5f, 0.5f);
- glVertex3f( 0.5f, 0.5f, 0.5f);
- glVertex3f(-0.5f, 0.5f, 0.5f);
- // Back Face
- glColor3f(0.5f,0.0f,0.5f); // Magenta
-
- glVertex3f(-0.5f, -0.5f, -0.5f);
- glVertex3f(-0.5f, 0.5f, -0.5f);
- glVertex3f( 0.5f, 0.5f, -0.5f);
- glVertex3f( 0.5f, -0.5f, -0.5f);
- // Top Face
- glColor3f(0.5f,0.07843f,0.57647f); // DeepPink
-
- glVertex3f(-0.5f, 0.5f, -0.5f);
- glVertex3f(-0.5f, 0.5f, 0.5f);
- glVertex3f( 0.5f, 0.5f, 0.5f);
- glVertex3f( 0.5f, 0.5f, -0.5f);
- // Bottom Face
- glColor3f(0.941176f,0.5098f,0.941176f); // Violet
-
- glVertex3f(-0.5f, -0.5f, -0.5f);
- glVertex3f( 0.5f, -0.5f, -0.5f);
- glVertex3f( 0.5f, -0.5f, 0.5f);
- glVertex3f(-0.5f, -0.5f, 0.5f);
- // Right face
- glColor3f(0.415682f,0.3529f,0.8039f); // SlateBlue
-
- glVertex3f( 0.5f, -0.5f, -0.5f);
- glVertex3f( 0.5f, 0.5f, -0.5f);
- glVertex3f( 0.5f, 0.5f, 0.5f);
- glVertex3f( 0.5f, -0.5f, 0.5f);
- // Left Face
- glColor3f(0.541176f,0.1686f,0.88627f); // BlueViolet
-
- glVertex3f(-0.5f, -0.5f, -0.5f);
- glVertex3f(-0.5f, -0.5f, 0.5f);
- glVertex3f(-0.5f, 0.5f, 0.5f);
- glVertex3f(-0.5f, 0.5f, -0.5f);
- glEnd();
-
-
-
- CPaintDC dc(this);
-
-
- SwapBuffers(dc.GetSafeHdc());
-
-
- }
复制代码
---------------------
不知道错哪儿了,很受挫折的说.把工程打包放出来了,
很简单的,除了GL配置,绘图代码就是DLG框架了,希望有空的达人帮忙看下代码下载
====================
把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(); // Reset The View
- gluLookAt(m_fCamX,m_fCamY,m_fCamZ,0.0f,0.0f,0.0f,0.0f,1.0f,0.0f);
-
复制代码
绘制的时候有部分立方体显示不出来,好像被裁掉了一样,而且gluLookAt的参数改一下就什么都看不到了,很纳闷,立方体中心是位于原点的啊,改变视点位置,但是注视位置不变,怎么会看不到呢...附图
 |
|