关于opengl模型视图变换,在线等待

ChinaShrimp 2003-07-11 06:26:29
void ChangeSize(int w, int h)
{
GLfloat nRange = 100.0f;

// Prevent a divide by zero
if(h == 0)
h = 1;

// Set Viewport to window dimensions
glViewport(0, 0, (GLsizei)w, (GLsizei)h);

// Reset coordinate system
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

// gluPerspective(60.0, (GLfloat)w/(GLfloat)h, -100,100);
// Establish clipping volume (left, right, bottom, top, near, far)
if (w <= h)
glOrtho (-nRange, nRange, -nRange*h/w, nRange*h/w, -nRange, nRange);
else
glOrtho (-nRange*w/h, nRange*w/h, -nRange, nRange, -nRange, nRange);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

// Called to draw scene
void RenderScene(void)
{
// Clear the window with current clearing color
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glLoadIdentity();
glPushMatrix();

glTranslatef(0.0f, 0.0f, 50.0f);

glRotatef(xRot, 1.0f, 0.0f, 0.0f);
glRotatef(yRot, 0.0f, 1.0f, 0.0f);

glPopMatrix();

glFlush();

// Show the graphics
glutSwapBuffers();
}


int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutCreateWindow("RGB Cube");
glutReshapeFunc(ChangeSize);
glutSpecialFunc(SpecialKeys);
glutDisplayFunc(RenderScene);
SetupRC();
glutMainLoop();

return 0;
}
为什么我在RenderScene函数里头调用glTranslatef(0.0f, 0.0f, 50.0f)完之后没有反应?不应该是这样的,是不是?
...全文
86 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wx020101 2003-11-02
  • 打赏
  • 举报
回复
allendragon 2003-07-12
  • 打赏
  • 举报
回复
你把变换的这句改为glTranslatef(0.0f, 0.0f, 150.0f);看看如何?我给你试了一下,在z方向改为150时球是缩小了的。
ChinaShrimp 2003-07-12
  • 打赏
  • 举报
回复
例如:
glPushMatrix();

glTranslatef(0.0f, 0.0f, 50.0f);

glRotatef(xRot, 1.0f, 0.0f, 0.0f);
glRotatef(yRot, 0.0f, 1.0f, 0.0f);

glutSolidSphere(80, 10, 8);
glPopMatrix();

然后我改变glTranslatef(0.0f, 0.0f, 50.0f);关于z轴的参数,为什么我感觉不到在显示的时候那个球体的变化(“变大”or "变小")?
那位高手知道为什么?
ChinaShrimp 2003-07-12
  • 打赏
  • 举报
回复
不好意思,是我错了!
glOrtho 定义的是一个正交投影,那么在z方向上做模型视图变换肯定是看不到效果的:)不过还是感谢二位的留言。
ChinaShrimp 2003-07-12
  • 打赏
  • 举报
回复
将glTranslatef(0.0f, 0.0f, 150.0f);中的z参数设置为正值,球应该放大的呀?我改变x,y方向的参数时,变化很明显,唯独改变z方向,看不到效果,不知道为什么?
我想是不是这一段有问题?
if (w <= h)
glOrtho (-nRange, nRange, -nRange*h/w, nRange*h/w, -nRange, nRange);
else
glOrtho (-nRange*w/h, nRange*w/h, -nRange, nRange, -nRange, nRange);
在做视区变换的时候,由于需要裁减的区域大小定了,并且最后在屏幕上显示的窗口大小也一定,那么不管怎么做模型视图变换,其效果不变?
tangt 2003-07-11
  • 打赏
  • 举报
回复
glPushMatrix();

glTranslatef(0.0f, 0.0f, 50.0f);

glRotatef(xRot, 1.0f, 0.0f, 0.0f);
glRotatef(yRot, 0.0f, 1.0f, 0.0f);

glPopMatrix();
看不到你在矩阵变换后绘制了什么东西??
之前你能看到什么?

4,445

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧