
    kj&                         d dl Z d dlmZ d dlZd dlZd dlmZ d dlm	Z	 ddddddefd	e
d
ededededee         dee         de	fdZdS )    N)Optional)AttributeNames)VAOg      ?       Tradiussectorsringsnormalsuvsname
attr_namesreturnc                 l   d|dz
  z  }d|dz
  z  }dg||z  dz  z  }	dg||z  dz  z  }
dg||z  dz  z  }d\  }}}t          |          D ]9}t          |          D ]%}t          j        t          j         dz  t          j        |z  |z  z             }t          j        dt          j        z  |z  |z            t          j        t          j        |z  |z            z  }t          j        dt          j        z  |z  |z            t          j        t          j        |z  |z            z  }||z  ||<   ||z  ||dz   <   || z  |	|<   || z  |	|dz   <   || z  |	|dz   <   ||
|<   ||
|dz   <   ||
|dz   <   |dz  }|dz  }|dz  }';dg|z  |z  dz  }d}t          |dz
            D ]}t          |dz
            D ]j}||z  |z   ||<   |dz   |z  |dz   z   ||dz   <   ||z  |dz   z   ||dz   <   ||z  |z   ||dz   <   |dz   |z  |z   ||d	z   <   |dz   |z  |dz   z   ||d
z   <   |dz  }kt          |pdt          j                  }t          j	        |	t          j
                  }|                    |d|j        g           |r=t          j	        |
t          j
                  }|                    |d|j        g           |r=t          j	        |t          j
                  }|                    |d|j        g           t          j	        |t          j                  }|                    |d	           |S )a  Creates a sphere.

    Keyword Args:
        radius (float): Radius or the sphere
        rings (int): number or horizontal rings
        sectors (int): number of vertical segments
        normals (bool): Include normals in the VAO
        uvs (bool): Include texture coordinates in the VAO
        name (str): An optional name for the VAO
        attr_names (AttributeNames): Attribute names
    Returns:
        A :py:class:`VAO` instance
    g      ?   g              )r   r   r   r            sphere)mode)dtype3f2f)index_element_size)rangemathsinpicosr   mlg	TRIANGLESnumpyarrayfloat32bufferPOSITIONNORMAL
TEXCOORD_0uint32index_buffer)r   r	   r
   r   r   r   r   RS
vertices_l	normals_luvs_lvntrsyxzindicesivaovbo_verticesvbo_normalsvbo_uvsvbo_elementss                              Z/home/agentuser/manim-venv/lib/python3.11/site-packages/moderngl_window/geometry/sphere.pyr   r      s   , 	uqyAw{A %'/A-.J1,-IEUW_q()EGAq!5\\  w 	 	A$'A!a788ATWq1,--1q0I0IIATWq1,--1q0I0IIA1uE!Hq5E!a%LJJqM !F
Jq1u !F
Jq1uIaL Ia!e Ia!eFAFAFAA%	( cEkG#a'G	A519 	 	w{## 	 	AWqGAJ!ew.!a%8GAEN[AE2GAEN[1_GAEN!ew.2GAEN!ew.!a%8GAENFAA	 dhS]
3
3
3C;z???LJJ|TJ$7#8999 ;k)5=AAA

;z'8&9:::
 ;+e5=999

7D:#8"9:::;wel;;;L\a888J    )r   typingr   modernglr"   r$   moderngl_window.geometryr   moderngl_window.opengl.vaor   floatintboolstrtyper    rB   rA   <module>rM      s                3 3 3 3 3 3 * * * * * * '5Q QQQ Q 	Q
 
Q 3-Q ^$Q 	Q Q Q Q Q QrB   