11年前の記事Happy Buddha!
http://rman.sakura.ne.jp/sb/log/eid62.html
python2.7でcgkitを扱う。sitex airでレンダリング。Happy Buddha
cgkitの良いところは、RIBで出力した設定を挿入して、レンダラーに合わせて設定できるところ。Airspace(windows only)を使って、shaderやlightの設定を、レンダリングして、スクリプトを参考にcgkitに挿入した。
以下、スクリプトbuddha_air.py
ありがとうございます。
######################################################################
# Main file for rendering the landscape image
######################################################################
# sitex air renderer and python2.7 cgkit
g=Globals(rib="""Option "occlusion" "prepass" [1]
# the prepass uses indirect attributes for the occlusion call
Attribute "indirect" "maxerror" [0.1]
Attribute "indirect" "integer nsamples" 64
Attribute "indirect" "maxhitdist" 6
Attribute "indirect" "maxpixeldist" 10
Imager "background" "color background" [0.2 0.4 0.6]
Option "searchpath" "shader" "C:/Program Files (x86)/AIR//shaders:C:/Program Files (x86)/AIR//usershaders:&"
Imager "VBgEnvironment"
"float Intensity" [1]
"string EnvironmentName" ["C:/Program Files (x86)/AIR/texture/DebevecGroveProbe.tx"]
"string EnvironmentSpace" ["world"]
"float EnvironmentBlur" [0]
#UseFrames 0
Environment "envMap"
"string MapName" ["C:/Program Files (x86)/AIR/texture/DebevecGroveProbe.tx"]
"float MapIntensity" [1]
"float MapBlur" [0.01]
"float MapSamples" [4]
"string MapSpace" ["world"]
"float RotateX" [90]
"float RotateY" [0]
"float RotateZ" [0]
"float ReflectionVisibility" [1]
"float ReflectionIntensity" [1]
"float ReflectionAddBlur" [0]
"float IndirectVisibility" [1]
"float IndirectIntensity" [1]
"float IndirectAddBlur" [0]
"float CameraVisibility" [0]
"float CameraIntensity" [1]
"float CameraAddBlur" [0]
""",
resolution = (320, 240),
#pixelsamples=(4,4),
#shadingrate=0.25,
#pixelfilter=("gaussian",(2,2)),
up = (0,1,0),
background = (0.2,0.2,0.2)
)
######################################################################
# Camera
######################################################################
# Load the external camera (if it exists), otherwise use the camera for
# the final image
if os.path.exists("camera.py"):
load("camera.py")
else:
TargetCamera(
name = "Camera",
pos = (0.0729126, 0.641438, -2.2),
target = (0, 0, 0),
fov = 30
)
GLPointLight(
intensity = 0.1,
pos = (-50,30, -20),
diffuse = (1, 1, 1)
)
# ...and a distant light
dis=RMLightSource(name = "distant_0",shader=RMShader("distantlight",intensity=0.4))
dis.shader.declare('string shadowname="raytrace"')
dis.shader.declare('uniform point from=(-15,30,-30)')
# ...and a env light
env=RMLightSource(name = "env01",shader= RMShader("envlight"))
env.shader.declare('uniform color lightcolor=(.9,.9,1)')
env.shader.declare('uniform color shadowcolor=(.05,.05,0)')
# ...no indirect
# models and darktree shader
r=RIBArchive(
name ="butu_center",
filename = './butu.rib',
pos = (0,0,0)
)
r.rib='Attribute "visibility" "trace" [1]\nAttribute "visibility" "int transmission" [1]\nSurface "DarkTreeSurface"\n "string DarkTreeShader" ["C:/Users/yokamak/Documents/cgkit/DTRep_thumb/tx_stone/pvStone_Tan_Brown.dsts"]\n "float Diffuse" [1]\n "float Specular" [1]\n "float Reflection" [1]\n "float ReflectionSamples" [1]\n "float ReflectionBlur" [0]\n "string ReflectionName" ["raytrace"]\n "string ReflectionSpace" ["current"]\n "float Incandescence" [1]\n "float Use2DCoordinates" [0]\n "float[2] Texture2dSize" [1 1]\n "float[2] Texture2dOrigin" [0 0]\n "float Texture2dAngle" [0]\n "float Pattern3dSize" [1]\n "float[3] Pattern3dOrigin" [0 0 0]\n "string Pattern3dSpace" ["shader"]\n "float BumpScale" [1]\n "float TimeScale" [1]\n "string ColorTweak1Name" ["Color 1"]\n "color ColorTweak1" [0.682 0.556 0.513]\n "string ColorTweak2Name" ["Coor 2"]\n "color ColorTweak2" [0.545 0.466 0.439]\n "string ColorTweak3Name" ["Color 3"]\n "color ColorTweak3" [0.533 0.435 0.419]\n "string ColorTweak4Name" ["Color 4"]\n "color ColorTweak4" [0.654 0.65 0.545]\n "string ColorTweak5Name" ["Color 5"]\n "color ColorTweak5" [0.494 0.411 0.352]\n "string ColorTweak6Name" ["Water"]\n "color ColorTweak6" [0 0.192 0.388]\n "string FloatTweak1Name" ["Diffuse"]\n "float FloatTweak1" [1]\n "string FloatTweak2Name" ["Specular"]\n "float FloatTweak2" [0.75]\n "string FloatTweak3Name" ["Glossiness"]\n "float FloatTweak3" [0.35]\n "string FloatTweak4Name" ["Seed"]\n "float FloatTweak4" [1]\n "string FloatTweak5Name" ["Dark Specular"]\n "float FloatTweak5" [1]\n "string FloatTweak6Name" ["Light Specular"]\n "float FloatTweak6" [0]\n "string FloatTweak7Name" ["Dark Gloss"]\n "float FloatTweak7"\n'
t=RIBArchive(
name ="butu_left",
filename = './butu.rib',
pos = (0.5,0,0)
)
t.rib='Attribute "visibility" "trace" [1]\nAttribute "visibility" "int transmission" [1]\nSurface "DarkTreeSurface"\n "string DarkTreeShader" ["C:/Program Files (x86)/AIR/viztools/darktree/metalGoldTarnish.dsts"]\n "float Diffuse" [1]\n "float Specular" [1]\n "float Reflection" [1]\n "float ReflectionSamples" [1]\n "float ReflectionBlur" [0]\n "string ReflectionName" ["raytrace"]\n "string ReflectionSpace" ["current"]\n "float Incandescence" [1]\n "float Use2DCoordinates" [0]\n "float[2] Texture2dSize" [1 1]\n "float[2] Texture2dOrigin" [0 0]\n "float Texture2dAngle" [0]\n "float Pattern3dSize" [1]\n "float[3] Pattern3dOrigin" [0 0 0]\n "string Pattern3dSpace" ["shader"]\n "float BumpScale" [1]\n "float TimeScale" [1]\n "string ColorTweak1Name" ["Gold 1"]\n "color ColorTweak1" [0.913 0.85 0.615]\n "string ColorTweak2Name" ["Gold 2"]\n "color ColorTweak2" [0.878 0.701 0.349]\n "string ColorTweak3Name" ["Rust 1"]\n "color ColorTweak3" [0.294 0.211 0.172]\n "string FloatTweak1Name" ["Tarnish"]\n "float FloatTweak1" [0]\n "string FloatTweak2Name" ["Reflectivity"]\n "float FloatTweak2" [0.2]\n "string FloatTweak3Name" ["Input Seed"]\n "float FloatTweak3" [133]\n "string FloatTweak4Name" ["Glossiness"]\n "float FloatTweak4" [0.05]\n "string FloatTweak5Name" ["Metal Hightlight"]\n "float FloatTweak5" [0.75]\n "string FloatTweak6Name" [""]\n "float FloatTweak6" [0.5]\n "string FloatTweak7Name" [""]\n "float FloatTweak7" [0.5]\n'
s=RIBArchive(
name ="butu_right",
filename = './butu.rib',
pos = (-0.5,0,0)
)
s.rib='Attribute "visibility" "trace" [1]\nAttribute "visibility" "int transmission" [1]\n Surface "DarkTreeSurface"\n "string DarkTreeShader" ["C:/Users/yokamak/Documents/cgkit/DTRep_thumb/ba_shader/MetallicPaintShader.dsts"]\n "float Diffuse" [1]\n "float Specular" [1]\n "float Reflection" [1]\n "float ReflectionSamples" [1]\n "float ReflectionBlur" [0]\n "string ReflectionName" ["raytrace"]\n "string ReflectionSpace" ["current"]\n "float Incandescence" [1]\n "float Use2DCoordinates" [0]\n "float[2] Texture2dSize" [1 1]\n "float[2] Texture2dOrigin" [0 0]\n "float Texture2dAngle" [0]\n "float Pattern3dSize" [1]\n "float[3] Pattern3dOrigin" [0 0 0]\n "string Pattern3dSpace" ["shader"]\n "float BumpScale" [1]\n "float TimeScale" [1]\n "string ColorTweak1Name" ["Paint Color"]\n "color ColorTweak1" [0.247 0.572 0.929]\n "string ColorTweak2Name" ["Paint Color 2"]\n "color ColorTweak2" [0 0.289 1]\n "string ColorTweak3Name" ["Rust 1"]\n "color ColorTweak3" [0.294 0.211 0.172]\n "string ColorTweak4Name" ["Rust 2"]\n "color ColorTweak4" [0.439 0.239 0.203]\n "string ColorTweak5Name" ["Rust 3"]\n "color ColorTweak5" [0.313 0.266 0.239]\n "string ColorTweak6Name" ["Rust 4"]\n "color ColorTweak6" [0.556 0.301 0.066]\n "string FloatTweak1Name" ["Reflectivity"]\n "float FloatTweak1" [0.35]\n "string FloatTweak2Name" ["Metallic Specular"]\n "float FloatTweak2" [0.55]\n "string FloatTweak3Name" ["CC Specular"]\n "float FloatTweak3" [0.5]\n "string FloatTweak4Name" ["CC Gloss"]\n "float FloatTweak4" [0.9]\n "string FloatTweak5Name" ["Random Seed"]\n "float FloatTweak5" [95]\n "string FloatTweak6Name" ["Glossiness"]\n "float FloatTweak6" [0.15]\n "string FloatTweak7Name" ["Seed"]\n "float FloatTweak7" [6]\n'
pl = RMMaterial(
surface = RMShader("VWood"),
color = (1, 1, 1))
pl2 = RMMaterial(
surface = RMShader("VPhysicalMetal"),
color = (1, 1, 1))
glm=GLMaterial(diffuse=(0.8, 0.7, 0.7))
p01=Plane(
lx = 50,
ly = 50,
pos = (0,0,0.6),
rot= mat3().fromEulerXYZ(0, radians(180), 0)
)
p01.rib='Attribute "visibility" "trace" [1]\nAttribute "visibility" "shadow" [1]\n Surface "VShinyTile2D"\n "float Diffuse" [0.9]\n "float DiffuseRoughness" [0.3]\n "float Specular" [0.5]\n "float SpecularRoughness" [0.01]\n "float SpecularSharpness" [0.8]\n "float Reflection" [4.0]\n "float ReflectionSamples" [2]\n "float ReflectionBlur" [0]\n "string ReflectionName" ["raytrace"]\n "string ReflectionSpace" ["current"]\n "float[2] TileSize" [0.01 0.01]\n "float TileStagger" [0]\n "float TileColorVary" [0.1]\n "float GrooveWidth" [0.001]\n "float GrooveDepth" [0.008]\n "color GrooveColor" [0.98 0.98 0.98]\n "float BumpHeight" [0]\n "float BumpWidth" [0.0005]\n "float[2] TextureSizeXY" [0.25 0.25]\n "float[2] TextureOriginXY" [0 0]\n "float TextureAngle" [0]\n "string Projection" ["st"]\n "string ProjectionSpace" ["shader"]\n "float[16] ProjectionTransform" [1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1]'
#p01.rib='Attribute "visibility" "trace" [1]\nAttribute "visibility" "shadow" [1]\nSurface "VMetal"\n'
p02=Plane(
lx = 50,
ly = 50,
pos = (0,-0.44,0),
rot= mat3().fromEulerXYZ(radians(-90), 0, 0),
material = pl2
)
p02.rib='Attribute "visibility" "trace" [1]\nAttribute "visibility" "shadow" [1]\n'
■cgkit_sample $ viewer.py demo1.py
pygame 1.9.6
Hello from the pygame community. https://www.pygame.org/contribute.html
Traceback (most recent call last):
File "/usr/local/bin/viewer.py", line 63, in
from cgkit.all import *
File "/usr/local/lib/python2.7/dist-packages/cgkit/all/__init__.py", line 46, in
from cgkit import _core
ImportError: libboost_python-py27.so.1.65.1: cannot open shared object file: No such file or directory
■cgkit_sample $ sudo ldconfig -p | grep libboost_python
libboost_python38.so.1.67.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libboost_python38.so.1.67.0
libboost_python38.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libboost_python38.so
libboost_python27.so.1.67.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libboost_python27.so.1.67.0
libboost_python27.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libboost_python27.so
■ cgkit_sample $ cd /usr/lib/x86_64-linux-gnu/
■ /usr/lib/x86_64-linux-gnu $ ls libboost*.*
libboost_date_time.so.1.71.0 libboost_python27.so.1.67.0
libboost_filesystem.so.1.71.0 libboost_python3-py38.a
libboost_iostreams.so.1.71.0 libboost_python3-py38.so
libboost_locale.so.1.71.0 libboost_python3.a
libboost_python.a libboost_python3.so
libboost_python.so libboost_python38.a
libboost_python2.so libboost_python38.so
libboost_python27.a libboost_python38.so.1.67.0
libboost_python27.so libboost_thread.so.1.71.0
■ /usr/lib/x86_64-linux-gnu $ sudo ln -s libboost_python27.so.1.67.0 libboost_python-py27.so.1.65.1
■ /usr/lib/x86_64-linux-gnu $ ls libboost*.*
libboost_date_time.so.1.71.0 libboost_python27.so.1.67.0
libboost_filesystem.so.1.71.0 libboost_python3-py38.a
libboost_iostreams.so.1.71.0 libboost_python3-py38.so
libboost_locale.so.1.71.0 libboost_python3.a
libboost_python-py27.so.1.65.1 libboost_python3.so
libboost_python.a libboost_python38.a
libboost_python.so libboost_python38.so
libboost_python2.so libboost_python38.so.1.67.0
libboost_python27.a libboost_thread.so.1.71.0
libboost_python27.so
■ /usr/lib/x86_64-linux-gnu $ sudo ldconfig
■cgkit_sample $ viewer.py demo3.py
pygame 1.9.6
Hello from the pygame community. https://www.pygame.org/contribute.html
■cgkit-2.0.0/utilities $ python checkenv.py
----------------------------------------------------------------------
Python 2.7.18 (default, Jul 1 2022, 12:27:04)
[GCC 9.4.0]
Platform: linux2
----------------------------------------------------------------------
Python version: 2.7........... OK
PyProtocols................... is installed
PyOpenGL...................... is installed
PIL........................... is installed
pygame........................ pygame 1.9.6
Hello from the pygame community. https://www.pygame.org/contribute.html
is installed
PyODE......................... is installed
PySerial...................... is installed
cgkit (base).................. 2.0.0 (Nov 26 2018)
cgkit (C++ lib)............... OK
cgkit (all)................... OK
It works.
Thank you.
LANG=C xdg-user-dirs-gtk-update
sudo apt update
sudo apt upgrade
sudo apt install build-essential
sudo apt install python-is-python2
sudo apt install python2-dev
sudo apt install libode-dev
sudo apt install lib3ds-dev
sudo apt install freeglut3-dev
sudo apt install libboost-all-dev
■Download cgkit.
https://sourceforge.net/p/cgkit/code/ci/master/tree/
glmaterial.py, line 141, in _passPILImage
self.texData(w, h, format, GL_UNSIGNED_BYTE, img.tostring())
replaced tostring() with tobytes().
self.texData(w, h, format, GL_UNSIGNED_BYTE, img.tobytes())
■Download PyProtocol.
http://peak.telecommunity.com/dist/
■Download get-pip.py for 2.7.
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py
# python get-pip.py
mak@mx:~/.local/bin
$ ./pip install pygame
$ ./pip install pyopengl
$ ./pip install serial
$ ./pip install pyode
$ ./pip install pillow
$ ./pip install scons
$ unzip PyProtocols-0.9.3.zip
$ sudo python setup.py --without-speedups install
$ ./pip list
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support pip 21.0 will remove support for this functionality.
Package Version
----------- -------
future 0.18.3
iso8601 0.1.16
Pillow 6.2.2
pip 20.3.4
pygame 2.0.3
PyODE 1.2.1
PyOpenGL 3.1.7
PyProtocols 0.9.3
PyYAML 5.4.1
scons 3.1.2
serial 0.0.97
setuptools 44.1.1
wheel 0.37.1
$ cd ~/Downloads/cgkit-code/utilities/
mak@mx:~/Downloads/cgkit-code/utilities
$ python checkenv.py
----------------------------------------------------------------------
Python 2.7.18 (default, Jul 14 2021, 08:11:37)
[GCC 10.2.1 20210110]
Platform: linux2
----------------------------------------------------------------------
Python version: 2.7........... OK
PyProtocols................... is installed
PyOpenGL...................... is installed
PIL........................... is installed
pygame........................ pygame 2.0.3 (SDL 2.0.16, Python 2.7.18)
Hello from the pygame community. https://www.pygame.org/contribute.html
is installed
PyODE......................... is installed
PySerial...................... is installed
cgkit (base).................. missing
cgkit (C++ lib)............... failed
The cgkit supportlib could not be imported. One possible reason for that
is that shared libraries (such as the boost_python runtime or OpenGL)
could not be found.
cgkit (all)................... failed
$ ls /usr/lib/x86_64-linux-gnu/libboost_python*.*
/usr/lib/x86_64-linux-gnu/libboost_python39.a
/usr/lib/x86_64-linux-gnu/libboost_python39.so
/usr/lib/x86_64-linux-gnu/libboost_python39.so.1.74.0
■Download following:
libboost-python1.67.0_1.67.0-17ubuntu8_amd64.deb
libboost-python1.67-dev_1.67.0-17ubuntu8_amd64.deb
$ dpkg -x libboost-python1.67.0_1.67.0-17ubuntu8_amd64.deb usr
$ dpkg -x libboost-python1.67-dev_1.67.0-17ubuntu8_amd64.deb usr
■Copy following:
libboost_python27.so
libboost_python27.so.1.67.0
libboost_python27.a
$ sudo cp libboost_python27*.* /usr/lib/x86_64-linux-gnu/
$ ls /usr/lib/x86_64-linux-gnu/libboost_python*.*
/usr/lib/x86_64-linux-gnu/libboost_python27.a
/usr/lib/x86_64-linux-gnu/libboost_python27.so
/usr/lib/x86_64-linux-gnu/libboost_python27.so.1.67.0
/usr/lib/x86_64-linux-gnu/libboost_python39.a
/usr/lib/x86_64-linux-gnu/libboost_python39.so
/usr/lib/x86_64-linux-gnu/libboost_python39.so.1.74.0
$ ls /usr/lib/x86_64-linux-gnu/lib3ds*.*
/usr/lib/x86_64-linux-gnu/lib3ds-1.so
/usr/lib/x86_64-linux-gnu/lib3ds-1.so.3.0.0
/usr/lib/x86_64-linux-gnu/lib3ds-1.so.3
/usr/lib/x86_64-linux-gnu/lib3ds.so
■scons
$ /home/mak/.local/bin/scons
■changed config.cfg
######################################################################
# Boost.Python settings
######################################################################
# Name of the Boost.Python library to link with
BOOST_LIB = "boost_python27"
####### Libd3DS #######
LIB3DS_AVAILABLE = True
LIB3DS_PATH = r"/usr/lib/x86_64-linux-gnu/"
#LIB3DS_LIBNAME = "lib3ds-120s"
■Build cgkit.
$ python setup.py build
1.Build error;
wrappers/py_arrayslots1.cpp: In function ‘void class_ArraySlots()’:
wrappers/py_slot.h:43:75: error: unable to find string literal operator ‘operator""sname’ with ‘const char [11]’, ‘long unsigned int’ arguments
43 | #define ARRAYSLOT(sname,stype) class_<_ArraySlotIterator
>("_"sname"_Iterator", init&>()) \
| ^~~~~~~~~~~
wrappers/py_slot.h:43:75: note: in definition of macro ‘ARRAYSLOT’
43 | #define ARRAYSLOT(sname,stype) class_<_ArraySlotIterator >("_"sname"_Iterator", init&>()) \
| ^~~~~~~~~~~
wrappers/py_slot.h:43:75: error: unable to find string literal operator ‘operator""sname’ with ‘const char [11]’, ‘long unsigned int’ arguments
43 | #define ARRAYSLOT(sname,stype) class_<_ArraySlotIterator >("_"sname"_Iterator", init&>()) \
| ^~~~~~~~~~~
wrappers/py_slot.h:43:75: note: in definition of macro ‘ARRAYSLOT’
43 | #define ARRAYSLOT(sname,stype) class_<_ArraySlotIterator >("_"sname"_Iterator", init&>()) \
|
1.Build error;
[solved]
py_slot.h,line:43, Put blank spaces on both sides of sname.
>("_" sname "_Iterator",
2.Build error;
wrappers/py_geoms1.cpp: In member function ‘boost::python::api::object _VariableIterator::next()’:
wrappers/py_geoms1.cpp:145:24: error: could not convert ‘std::make_tuple(_Elements&& ...) [with _Elements = {std::__cxx11::basic_string, std::allocator >&, const support3d::VarStorage&, const support3d::VarType&, const int&}](info.support3d::PrimVarInfo::storage, info.support3d::PrimVarInfo::type, info.support3d::PrimVarInfo::multiplicity)’ from ‘std::tuple, std::allocator >, support3d::VarStorage, support3d::VarType, int>’ to ‘boost::python::api::object’
145 | return make_tuple(name, info.storage, info.type, info.multiplicity);
| ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| |
| std::tuple, std::allocator >, support3d::VarStorage, support3d::VarType, int>
wrappers/py_geoms1.cpp: In function ‘boost::python::api::object findVariable(support3d::GeomObject*, std::string)’:
wrappers/py_geoms1.cpp:166:22: error: could not convert ‘std::make_tuple(_Elements&& ...) [with _Elements = {std::__cxx11::basic_string, std::allocator >&, support3d::VarStorage&, support3d::VarType&, int&}](info->support3d::PrimVarInfo::storage, info->support3d::PrimVarInfo::type, info->support3d::PrimVarInfo::multiplicity)’ from ‘std::tuple, std::allocator >, support3d::VarStorage, support3d::VarType, int>’ to ‘boost::python::api::object’
166 | return make_tuple(name, info->storage, info->type, info->multiplicity);
| ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| |
| std::tuple, std::allocator >, support3d::VarStorage, support3d::VarType, int>
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
2.Build error;
[solved]
py_geoms1.cpp,line:145 and line:166 boost::python::make_tuple
replaced make_tuple with boost::python::make_tuple.
---------------------------------------------------------------------------
■Install cgkit.
sudo python setup.py install --record files.txt
if you uninstall cgkit...
cat files.txt | sudo xargs rm -rf
mak@mx:~/Downloads/cgkit-code/utilities
$ python checkenv.py
-------------------------------------------------do ---------------------
Python 2.7.18 (default, Jul 14 2021, 08:11:37)
[GCC 10.2.1 20210110]
Platform: linux2
----------------------------------------------------------------------
Python version: 2.7........... OK
PyProtocols................... is installed
PyOpenGL...................... is installed
PIL........................... is installed
pygame........................ pygame 2.0.3 (SDL 2.0.16, Python 2.7.18)
Hello from the pygame community. https://www.pygame.org/contribute.html
is installed
PyODE......................... is installed
PySerial...................... is installed
cgkit (base).................. 2.0.0 (Aug 12 2023)
cgkit (C++ lib)............... OK
cgkit (all)................... OK
$ viewer.py -N softimage demo1.py
$ viewer.py -N softimage demo4.py
pygame 2.0.3 (SDL 2.0.16, Python 2.7.18)
Hello from the pygame community. https://www.pygame.org/contribute.html
Texname: 1
Loading "maps/uvmap.png"...
texturing is ok.
It is light and fun.
but pyode1.2.1 is old?
$ viewer.py -N softimage piddemo1.py
The ball moves freely.
Thank you for your support.