亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在不使用gluSphere()的情況下在OpenGL中繪制Sphere?

在不使用gluSphere()的情況下在OpenGL中繪制Sphere?

C++
UYOU 2019-11-23 11:00:40
是否有任何教程可以解釋如何無需使用OpenGL在OpenGL中繪制球體gluSphere()?OpenGL的許多3D教程都在立方體上。我已經搜索過,但是大多數使用繪制球體的解決方案都可以使用gluSphere()。還有具有代碼在繪制球體網站這個網站,但它并不能解釋背后繪制球體數學。我還有其他版本的如何在多邊形中而不是在該鏈接中以四邊形繪制球體。但是同樣,我不明白如何用代碼繪制球體。我希望能夠進行可視化,以便在需要時可以修改球體。
查看完整描述

3 回答

?
MYYA

TA貢獻1868條經驗 獲得超4個贊

快速解釋了示例中的代碼。您應該研究一下功能void drawSphere(double r, int lats, int longs):


void drawSphere(double r, int lats, int longs) {

    int i, j;

    for(i = 0; i <= lats; i++) {

        double lat0 = M_PI * (-0.5 + (double) (i - 1) / lats);

        double z0  = sin(lat0);

        double zr0 =  cos(lat0);


        double lat1 = M_PI * (-0.5 + (double) i / lats);

        double z1 = sin(lat1);

        double zr1 = cos(lat1);


        glBegin(GL_QUAD_STRIP);

        for(j = 0; j <= longs; j++) {

            double lng = 2 * M_PI * (double) (j - 1) / longs;

            double x = cos(lng);

            double y = sin(lng);


            glNormal3f(x * zr0, y * zr0, z0);

            glVertex3f(r * x * zr0, r * y * zr0, r * z0);

            glNormal3f(x * zr1, y * zr1, z1);

            glVertex3f(r * x * zr1, r * y * zr1, r * z1);

        }

        glEnd();

    }

}

參數lat定義了您的球體中要有多少條水平線以及lon幾條垂直線。r是球體的半徑。


現在在lat/上進行了兩次迭代,lon并使用簡單的三角函數計算了頂點坐標。


現在計算出的頂點利用發送到您的GPU glVertex...()的GL_QUAD_STRIP,這意味著你要發送形成與先前2派四每兩個頂點。


現在,您只需要了解三角函數的工作方式即可,但是我想您可以輕松地弄清楚。


查看完整回答
反對 回復 2019-11-23
  • 3 回答
  • 0 關注
  • 795 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號