ManimCommunity / ManimCommunity/manim

Interactive IPython Terminal does not increase the `phi` value more than 90 degrees

Open
#2,496 3 comments 0 reactions 0 assignees View on GitHub
issue:bug opengl
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]:
```

![log](https://user-images.githubusercontent.com/73739511/151151890-7f226a5c-de84-47d3-88c0-d4fd411b2ef1.png)

## 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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.