<< 「実践CGへの誘い」例題をPythonで行う その4 戻る 「実践CGへの誘い」例題をPythonで行う その6 >>

「実践CGへの誘い」例題をPythonで行う その5

「実践CGへの誘い」p.30
Listing 2.6
cgkitを使ってPython APIによるRenderManeインタフェースの勉強です。今回は、色つき立方体の生成です。面白いですね。
レンダリングは、3Delightを使っています。さらに、勉強していきます。ありがとうございます。

colormain.jpg



#list26.py
#/* Copyrighted Pixar 1989 */
#/* From the RenderMan Companion p. 30 */
#/* Listing 2.6 Defining a larger cube from smaller minicubes */
#/*
# * ColorCube(): create a unit color cube from smaller cubes
# * Parameters:
# * n: the number of minicubes on a side
# * s: a scale factor for each minicube
# */

import cgkit.cri
from cgkit.cgtypes import *

# Load the RenderMan API.
# Replace the library name with whatever renderer you want to use.
ri = cgkit.cri.loadRI("3delight")
cgkit.cri.importRINames(ri, globals())

#/* UnitCube(): Enter a unit cube into the scene */

def ColorCube(n, s):
if n<=0:
return

RiAttributeBegin()
RiTranslate(-.5, -.5, -.5 )
RiScale(1.0/n, 1.0/n, 1.0/n)
color=[0,0,0]
for x in range(n):
for y in range(n):
for z in range(n):
color[0] = (x+1)/float(n)
color[1] = (y+1)/float(n)
color[2] = (z+1)/float(n)
RiColor(color)
RiTransformBegin()
RiTranslate (x+.5, y+.5, z+.5)
RiScale(s, s, s)
UnitCube()
RiTransformEnd ()


RiAttributeEnd();


def UnitCube():
square = [ [.5,.5,.5], [-.5,.5,.5], [-.5,-.5,.5], [.5,-.5,.5] ]
RiTransformBegin()
#/* far square */
RiPolygon( RI_P, square, RI_NULL)
#/* right face */
RiRotate(90.0, 0.0, 1.0, 0.0)
RiPolygon( RI_P, square, RI_NULL)
#/* near face */
RiRotate(90.0, 0.0, 1.0, 0.0)
RiPolygon( RI_P, square, RI_NULL)
#/* left face */
RiRotate(90.0, 0.0, 1.0, 0.0)
RiPolygon( RI_P, square, RI_NULL)
RiTransformEnd()

RiTransformBegin()
#/* bottom face */
RiRotate(90.0, 1.0, 0.0, 0.0)
RiPolygon( RI_P, square, RI_NULL)
RiTransformEnd()

RiTransformBegin()
#/* top face */
RiRotate(-90.0, 1.0, 0.0, 0.0)
RiPolygon( RI_P, square, RI_NULL)
RiTransformEnd()

color = ( .2, .4, .6 )

RiBegin(RI_NULL); #/* Start the renderer */
RiDisplay("colormain.tiff", RI_FILE, "rgb", RI_NULL)
RiFormat(512, 384, -1.0)
RiShadingRate(1.0)
RiLightSource("distantlight", RI_NULL)
RiProjection(RI_PERSPECTIVE,RI_FOV,65)
RiWorldBegin()
RiSides(1) # /* N E W */
RiTranslate(0.0, 0.0, 1.5)
RiRotate(30.0, -1.0, 0.0, 0.0)
RiRotate(30.0, 0.0, -1.0, 0.0)
RiColor(color) # /* Declare the color */
ColorCube(4, .8) #/* Define the cube */
RiWorldEnd()
RiEnd() #/* Clean up after the renderer */



  • -
  • -

<< 「実践CGへの誘い」例題をPythonで行う その4 戻る 「実践CGへの誘い」例題をPythonで行う その6 >>