opengl 问题
#include"windows.h"#include"GL/gl.h"#include"gl/glu.h"#include"gl/glut.h"voidmyint(){...
#include "windows.h"
#include "GL/gl.h"
#include "gl/glu.h"
#include "gl/glut.h"
void myint()
{
glClearColor(0.0,0.0,0.0,0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-50,50,-50,50,-1.0,1.0);
glMatrixMode(GL_MODELVIEW);
}
void symbol()
{
glBegin(GL_LINE_LOOP);
glVertex2f(20,30.0);
glVertex2f(20.0,20.0);
glVertex2f(25.0,10.0);
glvertex2f(30.0,20.0);
glvertex2f(30.0,30.0);
glvertex2f(25.0,20.0);
glEnd();
}
void mydisplay()
{
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
symbol();
glLoadIdentity();
glRotatef(-120.0,0.0,0.0,1.0);
symbol();
glFlush();
}
void main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitWindowSize(640,480);
glutInitWindowPosition(100,150);
glutCreateWindow("标志");
glutDisplayFunc(mydisplay);
myint();
glutMainLoop();
}
三个形状一样 上面是我写的代码 但是glRotatef里面的参数 不知怎麽设置 那个角度应该是120 但是绕那个轴旋转呢 那个高手 给解释一下 展开
#include "GL/gl.h"
#include "gl/glu.h"
#include "gl/glut.h"
void myint()
{
glClearColor(0.0,0.0,0.0,0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-50,50,-50,50,-1.0,1.0);
glMatrixMode(GL_MODELVIEW);
}
void symbol()
{
glBegin(GL_LINE_LOOP);
glVertex2f(20,30.0);
glVertex2f(20.0,20.0);
glVertex2f(25.0,10.0);
glvertex2f(30.0,20.0);
glvertex2f(30.0,30.0);
glvertex2f(25.0,20.0);
glEnd();
}
void mydisplay()
{
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
symbol();
glLoadIdentity();
glRotatef(-120.0,0.0,0.0,1.0);
symbol();
glFlush();
}
void main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitWindowSize(640,480);
glutInitWindowPosition(100,150);
glutCreateWindow("标志");
glutDisplayFunc(mydisplay);
myint();
glutMainLoop();
}
三个形状一样 上面是我写的代码 但是glRotatef里面的参数 不知怎麽设置 那个角度应该是120 但是绕那个轴旋转呢 那个高手 给解释一下 展开
2个回答
展开全部
你这个显然是要绕Z轴旋转
虽然没用过opengl,但对于类似的东西还是用过不少。估计opengl的旋转函数用的可能2种情况
一种是roll, pitch 和 yaw。分别代表沿x,y,z轴旋转。所以你的情况只要roll,pitch都设为0,yaw设为120度或者想要的弧度值就行了。具体是度还是弧度,看你函数的需求。
另一种是三个值代表旋转轴,一个值代表旋转的度数。这种情况自然是旋转轴为0,0,1,度数是120或2pi/3了 。当然参数有可能是旋转轴在前,角度在后
我擦。我网上查了查,你旋转函数没用错,是你图画错了,你的图多横移了25个单位
void symbol()
{
glBegin(GL_LINE_LOOP);
glVertex2f(-5.0,30.0);
glVertex2f(-5.0,20.0);
glVertex2f(0.0,10.0);
glvertex2f(5.0,20.0);
glvertex2f(5.0,30.0);
glvertex2f(0.0,20.0);
glEnd();
}
这样应该就对了~~
虽然没用过opengl,但对于类似的东西还是用过不少。估计opengl的旋转函数用的可能2种情况
一种是roll, pitch 和 yaw。分别代表沿x,y,z轴旋转。所以你的情况只要roll,pitch都设为0,yaw设为120度或者想要的弧度值就行了。具体是度还是弧度,看你函数的需求。
另一种是三个值代表旋转轴,一个值代表旋转的度数。这种情况自然是旋转轴为0,0,1,度数是120或2pi/3了 。当然参数有可能是旋转轴在前,角度在后
我擦。我网上查了查,你旋转函数没用错,是你图画错了,你的图多横移了25个单位
void symbol()
{
glBegin(GL_LINE_LOOP);
glVertex2f(-5.0,30.0);
glVertex2f(-5.0,20.0);
glVertex2f(0.0,10.0);
glvertex2f(5.0,20.0);
glvertex2f(5.0,30.0);
glvertex2f(0.0,20.0);
glEnd();
}
这样应该就对了~~
展开全部
欢迎来到OGL的大坑。。
LZ要记住OGL是个状态机,例如glRotaef()这个函数会它后面所有的绘制有效果,因为它是通过改变当前的变换矩阵来实现旋转的。
在每次执行这些rotate, translate之类的变换之前,最后用glPushMatrix()来保存当前的矩阵,在绘制完相应的东西后调用glPopMatrix()来还原矩阵。
你问题里的旋转可以这样实现(3个部分分别处理)
先保存矩阵;
绕Z轴旋转;
还原矩阵;
LZ要记住OGL是个状态机,例如glRotaef()这个函数会它后面所有的绘制有效果,因为它是通过改变当前的变换矩阵来实现旋转的。
在每次执行这些rotate, translate之类的变换之前,最后用glPushMatrix()来保存当前的矩阵,在绘制完相应的东西后调用glPopMatrix()来还原矩阵。
你问题里的旋转可以这样实现(3个部分分别处理)
先保存矩阵;
绕Z轴旋转;
还原矩阵;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询