展开全部
对楼上的无语了,一楼的仁兄,真厉害,人家是选修课只需要一段简单代码,你还搞什么矩阵、四元数这么底层的东西,叫人家怎么看得懂啊,OpenGL平移就一个glTranslatef(),缩放就一个glScalef(),旋转就一个glRotatef(),就这三个函数就可以完全搞定了,干嘛这么复杂。。。
二楼的朋友大概理解错了吧,glutReshapeFunc调用的ChangeSize函数是用来控制窗口、视图、视角的,并不是用来实现物体的三维平移、缩放和旋转的。
我就不写完整的程序了,建议楼主首先看一下OpenGL的框架,然后看一下glTranslatef( )、glScalef( )、glRotatef( )这三个函数的用法,之后你就可以写出你想要的程序了。
P.S. 楼主这样把作业贴上来,不可能有人会帮你从头到尾写一遍代码然后发给你的,最多只能给你一个思路或者一点提示,所以,还是希望楼主好好看那三个函数,然后自己写一个完整的程序,不难的。
二楼的朋友大概理解错了吧,glutReshapeFunc调用的ChangeSize函数是用来控制窗口、视图、视角的,并不是用来实现物体的三维平移、缩放和旋转的。
我就不写完整的程序了,建议楼主首先看一下OpenGL的框架,然后看一下glTranslatef( )、glScalef( )、glRotatef( )这三个函数的用法,之后你就可以写出你想要的程序了。
P.S. 楼主这样把作业贴上来,不可能有人会帮你从头到尾写一遍代码然后发给你的,最多只能给你一个思路或者一点提示,所以,还是希望楼主好好看那三个函数,然后自己写一个完整的程序,不难的。
墨刀Modao
2024-12-05 广告
2024-12-05 广告
在制作原型图时,可以选择多种软件工具来满足不同的需求和偏好。以下是一些常见的原型图软件:墨刀 :墨刀是一款在线原型设计工具,界面友好,易于上手,适合产品经理快速创建移动应用和网页的低保真原型。其协作功能便于团队实时共享设计和反馈。Sketc...
点击进入详情页
本回答由墨刀Modao提供
展开全部
大体思路就是在glutReshapeFunc函数中引用一个回调函数,在这个函数中定义整个图形在窗口大小改变时的的投影区域和视见区域。发一段函数作为参考:
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, w, h);
// Reset projection matrix stack
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// 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);
// Reset Model view matrix stack
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
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, w, h);
// Reset projection matrix stack
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// 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);
// Reset Model view matrix stack
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
更多追问追答
追问
我只要一个能实现三维变换的程序,作为作业,简单点没关系
追答
不会吧.这个很简单啊.
opengl是右乘,确切地说,你搞个转换矩阵去乘以想要变换的顶点(对顶点来说,就是右乘了),也就是说,你设计的数组元素要列主序排列,来保存这个转换矩阵.
平移,缩放是最容易的,就略过了.
而旋转,最好用四元数来表达,直接按结论编写程序就行了.
如果不想,就用现成的,glTranslate*(),glRotate*(),直接调用并封装到函数中,不就行了么?
刚开始学习opengl的话,买本opengl红宝书先.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询