求高手解释openGL显示问题,在线等
我用openGL画了一个圆柱
glTranslatef(x_fscrmove,y_fscrmove,z_fscrmove);
glRotatef(-90,1.0,0.0,0.0);
GLUquadricObj* quadObj;
quadObj=gluNewQuadric();
glColor4f(0.4f,0.0f,0.0f,0.0f);
gluCylinder(quadObj,0.15,0.15,50.0,50,3);
投影用的是平面投影
glOrtho (-70, 70, -60*(GLfloat)h/(GLfloat)w,60*(GLfloat)h/(GLfloat)w, -100.0, 200.0);
然后加入键盘响应移动该圆柱
void CSimulationView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
if (nChar == 's ')
y_fscrmove += 1.0;
if (nChar == 'w ')
y_fscrmove -= 1.0;
if (nChar == 'd ')
x_fscrmove -= 1.0;
if (nChar == 'a ')
x_fscrmove += 1.0;
//Invalidate(FALSE);
CView::OnChar(nChar, nRepCnt, nFlags);
}
问:为什么在移动该圆柱的时候圆柱一会粗一会细呢?是不是因为圆柱半径半径太小,转化为屏幕象素时取整的原因啊?请高手解释,并如何解决这个问题。谢谢。
[解决办法]
开始还以为是透视的效果,可你用的是平行透视。
如果是取整问题可以把圆柱的 近似度的参数提高些。。。而且最多只影响一个象素,应该效果还好,可以接受的。
另外在OnChar()里放着, 不知道你是否 出现了 按键压下去时 先出现效果,然后暂停住,然后又加速移动。大概是控制面板里的 连续按键 时间设置 的效果影响了程序。。 要是用api的getkeystate()就能完全同步于键盘。我不知道这个会影响不, 如果你没出现我说的现象。就当我没提。。
因为没程序运行。 所以我也看不到结果。试着改变代码的方式看看。。openGL很多地方没办法清楚,不如多试其他办法,避开问题,我的经验是这样的,解决一个问题的时间太长了,相关资料太少了。调试疯了。。
帮你UP