
OpenGL中的三角函数的用法 5
以下是绘制盘旋的飞机的部分代码,及绘制圆弧的代码,其中的三角函数的用法让我有点晕,哪位大侠帮我指点一下!不胜感激!!!voidCWelcomeView::myplane(...
以下是绘制盘旋的飞机的部分代码,及绘制圆弧的代码,其中的三角函数的用法让我有点晕,哪位大侠帮我指点一下! 不胜感激!!!
void CWelcomeView::myplane()
{
glPushMatrix();
glTranslatef(ABS(rx)*cosf((rangplane2+rangx)*6.283f/360.0f),
0.0f,
-ABS(rx)*sinf((rangplane2+rangx)*6.283f/360.0f));
glRotated((rangplane2+rangx),0.0,1.0,0.0);
glRotated(-90.0f,0.0,1.0,0.0);
glRotated(rangx,1.0,0.0,0.0);
glShadeModel(GL_SMOOTH);
glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
for(int i=0;i<2;i++){
glBegin(GL_TRIANGLE_FAN);
glColor3f(1.0f,0.5f,1.0f);
glVertex3f(-0.18f,0.0f,0.0f);
glColor3f(1.0f,0.5f,1.0f);
glVertex3f(0.1f,0.0f,-0.1f);
glColor3f(1.0f,0.8f,1.0f);
glVertex3f(0.09f,0.0f,-0.01f);
glColor3f(1.0f,0.3f,1.0f);
glVertex3f(0.08f,-0.05f,0.0f);
glColor3f(1.0f,1.0f,1.0f);
glVertex3f(0.09f,0.0f,0.01f);
glColor3f(1.0f,1.0f,1.0f);
glVertex3f(0.1f,0.0f,0.1f);
glEnd();
glShadeModel(GL_FLAT);
glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
};
glPopMatrix();
}
void CWelcomeView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if(nIDEvent==1){
if(rangflykey){
if(ABS(rangx)==26.0f){rangxkey=-rangxkey;};
rangx=rangx+0.5f*rangxkey;
if(ABS(rx)>=0.8f){rxkey=-rxkey;}else{
if(ABS(rx)<=0.5f){rxkey=-rxkey;}};
rx=rx-0.001f*rxkey;
if(rangplane2==360.0f){rangplane2=5.0f;}else{rangplane2=rangplane2+5.0f;};
};
if(ABS(rangfly)==90.0f){rangfly=-rangfly;};
rangfly=rangfly+30.0f;
Invalidate(FALSE);
};
CView::OnTimer(nIDEvent);
}
绘制彩虹圆弧代码:
void CPlmyView::mylines()
{
glPushMatrix();
glTranslatef(0.2f,-1.1f,0.0f);
for(float fk=0 ;fk<60;fk++){
glColor3f((2.0f-fk/15)*(1.0f-fk/35),
-(1.0f-fk/5)*(1.0f-fk/45),
-(1.0f-fk/15)*(1.0f-fk/80));
for(float fj=0 ;fj<20;fj++){
glBegin(GL_LINES);
glVertex3f((1.8f-0.0025f*fk)*cosf(0.8f+0.1f*fj),
(1.8f-0.0025f*fk)*sinf(0.8f+0.1f*fj)-fk/600,
0.0f);
glVertex3f((1.8f-0.0025f*fk)*cosf(0.8f+0.1f*(fj+1)),
(1.8f-0.0025f*fk)*sinf(0.8f+0.1f*(fj+1))-fk/600,
0.0f);
glEnd();
};
};
其中的三角函数怎让我很郁闷!,哪位好心的高手帮解释一下,详细点啊!谢谢
其中ABS是定义的取绝对值函数! 展开
void CWelcomeView::myplane()
{
glPushMatrix();
glTranslatef(ABS(rx)*cosf((rangplane2+rangx)*6.283f/360.0f),
0.0f,
-ABS(rx)*sinf((rangplane2+rangx)*6.283f/360.0f));
glRotated((rangplane2+rangx),0.0,1.0,0.0);
glRotated(-90.0f,0.0,1.0,0.0);
glRotated(rangx,1.0,0.0,0.0);
glShadeModel(GL_SMOOTH);
glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
for(int i=0;i<2;i++){
glBegin(GL_TRIANGLE_FAN);
glColor3f(1.0f,0.5f,1.0f);
glVertex3f(-0.18f,0.0f,0.0f);
glColor3f(1.0f,0.5f,1.0f);
glVertex3f(0.1f,0.0f,-0.1f);
glColor3f(1.0f,0.8f,1.0f);
glVertex3f(0.09f,0.0f,-0.01f);
glColor3f(1.0f,0.3f,1.0f);
glVertex3f(0.08f,-0.05f,0.0f);
glColor3f(1.0f,1.0f,1.0f);
glVertex3f(0.09f,0.0f,0.01f);
glColor3f(1.0f,1.0f,1.0f);
glVertex3f(0.1f,0.0f,0.1f);
glEnd();
glShadeModel(GL_FLAT);
glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
};
glPopMatrix();
}
void CWelcomeView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if(nIDEvent==1){
if(rangflykey){
if(ABS(rangx)==26.0f){rangxkey=-rangxkey;};
rangx=rangx+0.5f*rangxkey;
if(ABS(rx)>=0.8f){rxkey=-rxkey;}else{
if(ABS(rx)<=0.5f){rxkey=-rxkey;}};
rx=rx-0.001f*rxkey;
if(rangplane2==360.0f){rangplane2=5.0f;}else{rangplane2=rangplane2+5.0f;};
};
if(ABS(rangfly)==90.0f){rangfly=-rangfly;};
rangfly=rangfly+30.0f;
Invalidate(FALSE);
};
CView::OnTimer(nIDEvent);
}
绘制彩虹圆弧代码:
void CPlmyView::mylines()
{
glPushMatrix();
glTranslatef(0.2f,-1.1f,0.0f);
for(float fk=0 ;fk<60;fk++){
glColor3f((2.0f-fk/15)*(1.0f-fk/35),
-(1.0f-fk/5)*(1.0f-fk/45),
-(1.0f-fk/15)*(1.0f-fk/80));
for(float fj=0 ;fj<20;fj++){
glBegin(GL_LINES);
glVertex3f((1.8f-0.0025f*fk)*cosf(0.8f+0.1f*fj),
(1.8f-0.0025f*fk)*sinf(0.8f+0.1f*fj)-fk/600,
0.0f);
glVertex3f((1.8f-0.0025f*fk)*cosf(0.8f+0.1f*(fj+1)),
(1.8f-0.0025f*fk)*sinf(0.8f+0.1f*(fj+1))-fk/600,
0.0f);
glEnd();
};
};
其中的三角函数怎让我很郁闷!,哪位好心的高手帮解释一下,详细点啊!谢谢
其中ABS是定义的取绝对值函数! 展开
1个回答
展开全部
glBegin(GL_TRIANGLE_FAN); 开始绘制三角形
glColor3f(1.0f,0.5f,1.0f); 设置顶点颜色
glVertex3f(-0.18f,0.0f,0.0f); 绘制一个点
三角形当然需要3个点了,程序自动将相连的3个点作为三角形的顶点。
比如调用了6次glVertex3f函数,那么将绘制2个三角形。
glColor3f(1.0f,0.5f,1.0f); 设置顶点颜色
glVertex3f(-0.18f,0.0f,0.0f); 绘制一个点
三角形当然需要3个点了,程序自动将相连的3个点作为三角形的顶点。
比如调用了6次glVertex3f函数,那么将绘制2个三角形。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |