Project1

标题: 这算法是哪里错了…… [打印本页]

作者: TheRebirth    时间: 2013-7-28 22:29
标题: 这算法是哪里错了……
本帖最后由 TheRebirth 于 2013-7-30 18:36 编辑

关键源码如下:(只求各位别光看着就晕过去了就行了)

void CylinderRender(float x1,float x2,float y1,float y2,float z1,float z2,float distance1,float distance2,
                                        float xscale1=1.0,float xscale2=1.0,float yscale1=1.0,float yscale2=1.0,
                                        int stockings=16,float xangle=0.0,float yangle=0.0,float zangle=0.0)
{
        glRotatef(xangle,1.0f,0.0f,0.0f);
        glRotatef(yangle,0.0f,1.0f,0.0f);
        glRotatef(zangle,0.0f,0.0f,1.0f);
        for (int i=1;i<stockings;i++)
        {
                glColor3f(((float)i/stockings)*1.0f,((float)i/stockings)*1.0f,1.0f);
                glVertex3f(x1+distance1*((cos(360.0/i*stockings)))*xscale1,y1+distance1*((sin(360.0/i*stockings)))*yscale1,z1);
                glVertex3f(x2+distance1*((cos(360.0/i*stockings)))*xscale2,y2+distance1*((sin(360.0/i*stockings)))*yscale2,z2);
                glVertex3f(x2+distance1*((cos(360.0/(i+1)*stockings)))*xscale2,y2+distance1*((sin(360.0/(i+1)*stockings)))*yscale2,z2);
                glVertex3f(x1+distance1*((cos(360.0/(i+1)*stockings)))*xscale1,y1+distance1*((sin(360.0/(i+1)*stockings)))*yscale1,z1);       
        }
}

int DrawGLScene(GLvoid)                                                                        // Here's Where We Do All The Drawing
{
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);        // Clear Screen And Depth Buffer
        glLoadIdentity();
        gluLookAt(5.0f,5.0f,-20.0f,5.0f,-2.5f,10.0f,0.0f,1.0f,0.0f);
//        glTranslatef(0.0f,0.0f,20.0f);
        glBegin(GL_QUADS);
        glColor3f(0.0f,0.4f,1.0f);
        for (int i=0;i<25;i++)
        {
                glVertex3f(i*1.5f-0.125f-2.0f,-2.0f,-100.0f);
                glVertex3f(i*1.5f+0.125f-2.0f,-2.0f,-100.0f);
                glVertex3f(i*1.5f+0.125f-2.0f,-2.0f,100.0f);
                glVertex3f(i*1.5f-0.125f-2.0f,-2.0f,100.0f);
                glVertex3f(-100.0f,-2.0f,i*1.5f+0.125f-2.0f);
                glVertex3f(100.0f,-2.0f,i*1.5f+0.125f-2.0f);
                glVertex3f(100.0f,-2.0f,i*1.5f-0.125f-2.0f);
                glVertex3f(-100.0f,-2.0f,i*1.5f-0.125f-2.0f);
        }
        glEnd();
        glRotatef(rtri,0.0f,1.0f,0.0f);
        glRotatef(rquad,1.0f,0.0f,0.0f);
        glRotatef(rz,0.0f,0.0f,1.0f);
        glBegin(GL_QUADS);
        CylinderRender(-5.0,5.0,2.0,2.0,-5.0,5.0,3.0,5.0,1.0,1.0,1.0,1.0,16,0.0,0.0,0.0);
        glEnd();
        return TRUE;                                                                                // Keep Going
}

根据原计划,CylinderRender函数中的x1是初始X位置,x2是末X位置,y1是初始Y位置,y2是末Y位置,z1是初始Z位置,z2是末Z位置,distance1是初始半径,distance2是末半径,xscale1是初始X缩放,yscale1是初始Y缩放,xscale2是末X缩放,yscale2是末Y缩放,stockings是侧面多边形数量,xangle是X角度,yangle是Y角度,zangle是Z角度
以下函数已定义:
glColor3f的作用是设置该点的颜色,三个参数的最大值是1.0,相当于255.
gluLookat的参数分别是视点X,视点Y,视点Z,目标点X,目标点Y,目标点Z,头部朝向X,头部朝向Y,头部朝向Z

不知为啥原因,运行出来的效果就这么奇葩……(是不是还是该让数学帝来…)


旋转一定角度后……



我本来想着如果这函数用得好的话建模可以完全不用担心的,看来代码建模得等一会儿了…… (限于各种原因我很难实现打开模型文件和操作模型和使模型骨骼旋转兼得,所以只能用代码建模了)
作者: 结城照美    时间: 2013-7-28 22:33
已晕,求治疗
作者: 哇哈哈哇哈哈    时间: 2013-7-29 11:59
好多星星啊········我要晕了·········
作者: tjjlb    时间: 2013-7-29 12:00
好多太阳啊!= =这是什么
作者: c248611    时间: 2013-7-29 12:03
目测不是C语言。
作者: 八月桑    时间: 2013-7-29 12:05
好多VIP啊 都砸过来吧。
作者: TheRebirth    时间: 2013-7-29 22:59
首先可以说这就是C++,倒是这数学帝呢……(唉,是不是一提数学类问题就没人能给个回答啥的?就算有曲面方程也没用,真是太悲哀了)
作者: 救世小树    时间: 2013-7-29 23:51
c++  ?
好晕。。一个函数那么一堆参数。。不明觉厉
作者: SuperMario    时间: 2013-7-30 00:07
描述太抽象,不知道你要干嘛
作者: 小学生    时间: 2013-7-30 07:30
我表示没看懂。
作者: 紫英晓狼1130    时间: 2013-7-30 07:32
没看懂,也不能看懂…
作者: 啥名送啊    时间: 2013-7-30 17:47
我竟然没有感到恶心....
我真强悍。
作者: TheRebirth    时间: 2013-7-30 18:33
SuperMario 发表于 2013-7-30 00:07
描述太抽象,不知道你要干嘛

根据原来的预想,这个函数的作用是创建一个空心的圆台,或者可以被理解为两个底面的半径不同的空心圆柱,但只有当Stockings的值为无穷大时,它才能被称为真正意义上的圆柱或圆台,也就是说,stockings这个参数所起的是指定精度的作用。
至于初始位置和末位置则指的是两个底面的中心位置,或者近似地理解为圆心的位置。
初始半径和末半径指的便是两个底面分别拥有的半径。
xscale和yscale控制底面的X与Y缩放,xscale=yscale则表现为正n边形,若xscale>yscale则表现为左右凸出的椭圆,反之则为上下凸出的椭圆。
xangle,yangle,zangle等则是在原来创建的物体的基础上将他旋转一定的角度。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1