ManimCommunity / ManimCommunity/manim
Interactive IPython Terminal does not increase the `phi` value more than 90 degrees
- Dominant language
- Python
- Stars
- 40.9k
- Forks
- 3.1k
- Avg merge
- 3d 12h
- Merged PRs (30d)
- 25
Description
## Description of bug / unexpected behaviour
When using the interactive ipython terminal (using `self.interactive_embed()` function and `OpenGL` renderer), the `phi`(polar angle) value for the orientation of the camera does not increase beyond `90 DEGREES` or decrease below `-90 DEGREES`. **Note that the `theta`(azimuthal angle) value does increase beyond `90 DEGREES`.**
But when using (in interactive mode) `self.move_camera(phi=100 * DEGREES, theta=100 * DEGREES)`, the camera does move to an orientation that has a `phi` value more than `90 DEGREES`.
It is only during the 'manual change of view' (or change in orientation of camera) in interactive mode, that the `phi` value was not increasing beyond `90 DEGREES`.
https://user-images.githubusercontent.com/73739511/151150955-9e1105c8-059f-4978-af09-145c2b8e02f3.mp4
## Expected behaviour
The below video shows the expected behaviour which was rendered using `self.move_camera(phi=120 * DEGREES, theta=30 * DEGREES)`. Here, the `phi`(polar angle) value has increased more than `90 DEGREES`, which was not happening during the manual change of view in interactive mode.
https://user-images.githubusercontent.com/73739511/151150363-c5ebbfd8-c0ab-422f-aaae-a1307a37224f.mp4
## How to reproduce the issue
Code for reproducing the problem
```py
from manim import *
class ThreeDCameraRotation(ThreeDScene):
def construct(self):
axes = ThreeDAxes()
circle=Circle()
lab = axes.get_z_axis_label(Tex("$z$-label"))
self.set_camera_orientation(phi=50 * DEGREES, theta=30 * DEGREES)
self.add(circle,axes, lab)
self.interactive_embed()
```
NOTE: you have to add `--renderer=opengl` flag
## Additional media files
Images/GIFs
## Logs
Terminal output
```
Manim Community v0.14.0
Python 3.8.10 (default, Nov 26 2021, 20:14:08)
Type 'copyright', 'credits' or 'license' for more information
IPython 8.0.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]:
```

## System specifications
System Details
- OS: Linux Mint 20.3 x86_64
- RAM: 7.5 GiB
- Python version: Python 3.8.10
- Installed modules:
```
Package Version
------------------------- --------------------
apt-clone 0.2.1
apturl 0.5.2
argon2-cffi 21.3.0
argon2-cffi-bindings 21.2.0
asttokens 2.0.5
attrs 19.3.0
backcall 0.2.0
beautifulsoup4 4.8.2
black 21.12b0
bleach 4.1.0
blessings 1.7
blinker 1.4
bpytop 1.0.68
Brlapi 0.7.0
certifi 2019.11.28
cffi 1.15.0
chanim 1.0.2.1
chardet 3.0.4
click 8.0.3
click-default-group 1.2.2
cloup 0.7.1
colorama 0.4.3
colour 0.1.5
command-not-found 0.3
commonmark 0.9.1
configobj 5.0.6
cryptography 2.8
cssselect 1.1.0
cupshelpers 1.0
cycler 0.10.0
dbus-python 1.2.16
debugpy 1.5.1
decorator 5.1.1
defer 1.0.6
defusedxml 0.7.1
distlib 0.3.4
distro 1.4.0
dnspython 1.16.0
entrypoints 0.3
executing 0.8.2
filelock 3.4.2
glcontext 2.3.4
gpustat 0.6.0
grpcio 1.16.1
html5lib 1.0.1
httplib2 0.14.0
idna 2.8
ifaddr 0.1.6
IMDbPY 6.8
importlib-metadata 1.5.0
ipykernel 6.7.0
ipython 8.0.0
ipython-genutils 0.2.0
ipywidgets 7.6.5
isosurfaces 0.1.0
jedi 0.18.1
Jinja2 3.0.3
jsonschema 3.2.0
jupyter 1.0.0
jupyter-client 7.1.1
jupyter-console 6.4.0
jupyter-core 4.9.1
jupyterlab-pygments 0.1.2
jupyterlab-widgets 1.0.2
keyring 18.0.1
kiwisolver 1.0.1
kociemba-manim-rubikscube 0.0.1
launchpadlib 1.10.13
lazr.restfulclient 0.14.2
lazr.uri 1.0.3
louis 3.12.0
lxml 4.5.0
macaroonbakery 1.3.1
Mako 1.1.0
manim 0.14.0
manim-physics 0.2.3
manim-rubikscube 0.1.0
ManimPango 0.4.0.post0
mapbox-earcut 0.12.11
Markdown 3.1.1
MarkupSafe 2.0.1
matplotlib 3.1.2
matplotlib-inline 0.1.3
mistune 0.8.4
mock 3.0.5
moderngl 5.6.4
moderngl-window 2.4.1
more-itertools 4.2.0
multipledispatch 0.6.0
mypy-extensions 0.4.3
nbclient 0.5.10
nbconvert 6.4.0
nbformat 5.1.3
nemo-emblems 5.2.0
nest-asyncio 1.5.4
netaddr 0.7.19
netifaces 0.10.4
networkx 2.6.3
notebook 6.4.7
numpy 1.17.4
nvidia-ml-py3 7.352.0
oauthlib 3.1.0
onboard 1.4.1
packaging 20.3
PAM 0.4.2
pandocfilters 1.5.0
parso 0.8.3
pathspec 0.9.0
pbr 5.4.5
pexpect 4.6.0
pickleshare 0.7.5
Pillow 7.0.0
pip 20.0.2
platformdirs 2.4.1
prometheus-client 0.12.0
prompt-toolkit 3.0.24
protobuf 3.6.1
psutil 5.9.0
ptyprocess 0.7.0
pure-eval 0.2.1
PyAudio 0.2.11
pycairo 1.20.1
pycparser 2.21
pycrypto 2.6.1
pycups 1.9.73
pycurl 7.43.0.2
pydub 0.25.1
pyglet 1.5.21
Pygments 2.3.1
PyGObject 3.36.0
PyICU 2.4.2
pyinotify 0.9.6
PyJWT 1.7.1
pymacaroons 0.13.0
pymunk 6.2.1
PyNaCl 1.3.0
pyparsing 2.4.6
pyparted 3.11.2
PyQt5 5.14.1
PyQtWebEngine 5.14.0
pyRFC3339 1.1
pyrr 0.10.3
pyrsistent 0.15.5
python-apt 2.0.0+ubuntu0.20.4.6
python-dateutil 2.7.3
python-debian 0.1.36ubuntu1
python-magic 0.4.16
python-xapp 2.2.1
python-xlib 0.23
pytz 2019.3
pyxdg 0.26
PyYAML 5.3.1
pyzmq 22.3.0
qtconsole 5.2.2
QtPy 1.9.0
reportlab 3.5.34
requests 2.22.0
requests-file 1.4.3
requests-unixsocket 0.2.0
rich 11.0.0
scipy 1.7.3
scour 0.37
screeninfo 0.6.7
SecretStorage 2.3.1
Send2Trash 1.8.0
setproctitle 1.1.10
setuptools 45.2.0
simplejson 3.16.0
sip 4.19.21
six 1.14.0
skia-pathops 0.7.2
soupsieve 1.9.5
srt 3.5.0
stack-data 0.1.3
systemd-python 234
terminado 0.12.1
testpath 0.5.0
tinycss2 1.0.2
tldextract 2.2.1
tomli 1.2.3
tornado 6.1
tqdm 4.62.3
traitlets 5.1.1
typing-extensions 4.0.1
ubuntu-drivers-common 0.0.0
ufw 0.36
Unidecode 1.1.1
urllib3 1.25.8
virtualenv 20.13.0
wadllib 1.3.3
watchdog 2.1.6
wcwidth 0.2.5
webencodings 0.5.1
wheel 0.34.2
widgetsnbextension 3.5.2
xkit 0.0.0
xlrd 1.1.0
youtube-dl 2021.4.26
zipp 1.0.0
```
LaTeX details
+ LaTeX distribution: MikTeX
+ Installed LaTeX packages:
FFMPEG
Output of `ffmpeg -version`:
```
ffmpeg version 4.2.4-1ubuntu0.1 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 9 (Ubuntu 9.3.0-10ubuntu2)
configuration: --prefix=/usr --extra-version=1ubuntu0.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-nvenc --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
libavutil 56. 31.100 / 56. 31.100
libavcodec 58. 54.100 / 58. 54.100
libavformat 58. 29.100 / 58. 29.100
libavdevice 58. 8.100 / 58. 8.100
libavfilter 7. 57.100 / 7. 57.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 5.100 / 5. 5.100
libswresample 3. 5.100 / 3. 5.100
libpostproc 55. 5.100 / 55. 5.100
```
## Additional comments
Contributor guide
Research direction
Start with the ThreeDScene example using self.interactive_embed() and the OpenGL renderer, then reproduce it with the supplied code and --renderer=opengl. Compare manual camera rotation with move_camera(phi=120 * DEGREES, theta=30 * DEGREES); done means interactive phi can move beyond 90 and below -90 degrees while theta continues to work.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- computer-graphics
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100